Русское сообщество по скриптингу

Помогите перевести lasermine v2.8.1 с аммо на деньги

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Помогите перевести lasermine v2.8.1 с аммо на деньги

Сообщение razduw3 » 20 ноя 2012, 14:26

Добрый день. Я давно хотел перевести Lm v2.8.1 на деньги, но не как не получалось. Иногда получалось, но мины в игре не работали.
И вот решил обратиться к вам.
код
[pawn]
  1.  

  2. /*

  3.         Плагин редактировал Shidla [SGC] специально для тех, кого достали те, кто ломают мины)))

  4.         ICQ: 312-298-513

  5.  

  6.         Shidla [SGC] | 2010 год

  7.  

  8.         2.8.1 [Final Version] | 09.09.2010

  9. */

  10.  

  11. #include <amxmodx>

  12. #include <fakemeta>

  13. #include <hamsandwich>

  14. #include <xs>

  15. #include <zombieplague>

  16.  

  17. #if AMXX_VERSION_NUM < 180

  18.         #assert AMX Mod X v1.8.0 or greater library required!

  19. #endif

  20.  

  21. #define PLUGIN "[ZP] LaserMine"

  22. #define VERSION "2.8.1"

  23. #define AUTHOR "SandStriker / Shidla / QuZ/DJ_WEST"

  24.  

  25. #define RemoveEntity(%1)        engfunc(EngFunc_RemoveEntity,%1)

  26. #define TASK_PLANT                      15100

  27. #define TASK_RESET                      15500

  28. #define TASK_RELEASE            15900

  29.  

  30. #define LASERMINE_TEAM          pev_iuser1 //EV_INT_iuser1

  31. #define LASERMINE_OWNER         pev_iuser2 //EV_INT_iuser3

  32. #define LASERMINE_STEP          pev_iuser3

  33. #define LASERMINE_HITING        pev_iuser4

  34. #define LASERMINE_COUNT         pev_fuser1

  35.  

  36. #define LASERMINE_POWERUP       pev_fuser2

  37. #define LASERMINE_BEAMTHINK     pev_fuser3

  38.  

  39. #define LASERMINE_BEAMENDPOINT  pev_vuser1

  40. #define MAX_MINES                       10

  41. #define MODE_LASERMINE          0

  42. #define OFFSET_TEAM                     114

  43. #define OFFSET_MONEY            115

  44. #define OFFSET_DEATH            444

  45.  

  46. #define cs_get_user_team(%1)    CsTeams:get_offset_value(%1,OFFSET_TEAM)

  47. #define cs_get_user_deaths(%1)  get_offset_value(%1,OFFSET_DEATH)

  48.  

  49. // Цена за мину ОТОБРАЖАЕМОЕ в Меню. Реальная цена задаётся КВАРом!

  50. new const LMCost = 2

  51.  

  52.  

  53. /*########### Цвета Мин и лазерных лучей ###########*/

  54. // Цвет мины и лазера людей

  55. new const

  56.         Red_Hum         = 0,

  57.         Green_Hum       = 0,

  58.         Blue_Hum        = 255;

  59.  

  60. // Цвет мины и лазера зомби

  61. new const

  62.         Red_Zomb        = 0,

  63.         Green_Zomb      = 255,

  64.         Blue_Zomb       = 0;

  65. /*####### Цвета Мин и лазерных лучей (конец) #######*/

  66.  

  67. enum CsTeams {

  68. CS_TEAM_UNASSIGNED = 0,

  69. CS_TEAM_T = 1,

  70. CS_TEAM_CT = 2,

  71. CS_TEAM_SPECTATOR = 3

  72. };

  73.  

  74. enum tripmine_e {

  75.         TRIPMINE_IDLE1 = 0,

  76.         TRIPMINE_IDLE2,

  77.         TRIPMINE_ARM1,

  78.         TRIPMINE_ARM2,

  79.         TRIPMINE_FIDGET,

  80.         TRIPMINE_HOLSTER,

  81.         TRIPMINE_DRAW,

  82.         TRIPMINE_WORLD,

  83.         TRIPMINE_GROUND,

  84. };

  85.  

  86. enum

  87. {

  88.         POWERUP_THINK,

  89.         BEAMBREAK_THINK,

  90.         EXPLOSE_THINK

  91. };

  92.  

  93. enum

  94. {

  95.         POWERUP_SOUND,

  96.         ACTIVATE_SOUND,

  97.         STOP_SOUND

  98. };

  99.  

  100. new const

  101.         ENT_MODELS[]    = "models/zombie_plague/LaserMines/v_laser_mine.mdl",

  102.         ENT_SOUND1[]    = "weapons/mine_deploy.wav",

  103.         ENT_SOUND2[]    = "weapons/mine_charge.wav",

  104.         ENT_SOUND3[]    = "weapons/mine_activate.wav",

  105.         ENT_SOUND4[]    = "items/suitchargeok1.wav",

  106.         ENT_SOUND5[]    = "items/gunpickup2.wav",

  107.         ENT_SOUND6[]    = "debris/bustglass1.wav",

  108.         ENT_SOUND7[]    = "debris/bustglass2.wav",

  109.         ENT_SPRITE1[]   = "sprites/laserbeam.spr",

  110.         ENT_SPRITE2[]   = "sprites/lm_explode.spr";

  111.  

  112. new const

  113.         ENT_CLASS_NAME[]        =       "lasermine",

  114.         ENT_CLASS_NAME3[]       =       "func_breakable",

  115.         gSnarkClassName[]       =       "wpn_snark",    // Для совместимости с плагином "Snark"

  116.         barnacle_class[]        =       "barnacle",             // Для совместимости с плагином "Barnacle"

  117.         weapon_box[]            =       "weaponbox";

  118.  

  119. new g_EntMine, beam, boom

  120. 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

  121. new g_LRDMG,g_LFF,g_LCBT, g_LDELAY, g_LVISIBLE, g_LSTAMMO, g_LACCESS, g_LGLOW, g_LDMGMODE, g_LCLMODE

  122. new g_LCBRIGHT, g_LDSEC, g_LCMDMODE, g_LBUYMODE, g_LME;

  123. new g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText;

  124. new g_dcount[33],g_nowtime,g_MaxPL

  125. new bool:g_settinglaser[33]

  126. new Float:plspeed[33], plsetting[33], g_havemine[33], g_deployed[33];

  127. //new CVAR_LMCost

  128.  

  129. public plugin_init()

  130. {

  131.         register_plugin(PLUGIN, VERSION, AUTHOR);

  132.  

  133.         // Регистрируем ExtraItem

  134.  

  135.         g_LME = zp_register_extra_item("Laser Mine", LMCost, ZP_TEAM_ANY)

  136.  

  137.         // Вызываем функцию Laser_TakeDamage при получении урона объектом ENT_CLASS_NAME3 (func_breakable)

  138.         RegisterHam(Ham_TakeDamage, ENT_CLASS_NAME3, "Laser_TakeDamage")

  139.         // Add your code here...

  140.         register_clcmd("+setlaser","CreateLaserMine_Progress_b");

  141.         register_clcmd("-setlaser","StopCreateLaserMine");

  142.         register_clcmd("+dellaser","ReturnLaserMine_Progress");

  143.         register_clcmd("-dellaser","StopReturnLaserMine");

  144.         register_clcmd("say","say_lasermine");

  145.         register_clcmd("buy_lasermine","BuyLasermine");

  146.  

  147.         g_LENABLE       = register_cvar("zp_ltm","1")

  148.         g_LACCESS       = register_cvar("zp_ltm_acs","0") //0 all, 1 admin

  149.         g_LMODE         = register_cvar("zp_ltm_mode","0") //0 lasermine, 1 tripmine

  150.         g_LAMMO         = register_cvar("zp_ltm_ammo","5")

  151.         g_LDMG          = register_cvar("zp_ltm_dmg","60") //laser hit dmg

  152.         g_LCOST         = register_cvar("zp_ltm_cost","2")

  153.         g_LFMONEY       = register_cvar("zp_ltm_fragmoney","1")

  154.         g_LHEALTH       = register_cvar("zp_ltm_health","5")

  155.         g_LTMAX         = register_cvar("zp_ltm_teammax","100")

  156.         g_LRADIUS       = register_cvar("zp_ltm_radius","320.0")

  157.         g_LRDMG         = register_cvar("zp_ltm_rdmg","100") //radius damage

  158.         g_LFF           = register_cvar("zp_ltm_ff","0")

  159.         g_LCBT          = register_cvar("zp_ltm_cbt","ALL")

  160.         g_LDELAY        = register_cvar("zp_ltm_delay","0.1")

  161.         g_LVISIBLE      = register_cvar("zp_ltm_line","1")

  162.         g_LGLOW         = register_cvar("zp_ltm_glow","0")

  163.         g_LCBRIGHT      = register_cvar("zp_ltm_bright","255")//laser line brightness.

  164.         g_LCLMODE       = register_cvar("zp_ltm_color","0") //0 is team color,1 is green

  165.         g_LDMGMODE      = register_cvar("zp_ltm_ldmgmode","0") //0 - frame dmg, 1 - once dmg, 2 - 1 second dmg

  166.         g_LDSEC         = register_cvar("zp_ltm_ldmgseconds","1") //mode 2 only, damage / seconds. default 1 (sec)

  167.         g_LSTAMMO       = register_cvar("zp_ltm_startammo","1")

  168.         g_LBUYMODE      = register_cvar("zp_ltm_buymode","1");

  169.         g_LCMDMODE      = register_cvar("zp_ltm_cmdmode","0");          //0 is +USE key, 1 is bind, 2 is each.

  170.         g_LBEO          = register_cvar("zp_ltm_brokeenemy","1");

  171.         g_NOROUND       = register_cvar("zp_ltm_noround","1");

  172.         g_NEMROUND      = register_cvar("zp_ltm_nemround","1");

  173.         g_SURVROUND     = register_cvar("zp_ltm_survround","1");

  174.  

  175.         register_event("DeathMsg", "DeathEvent", "a");

  176.         register_event("CurWeapon", "standing", "be", "1=1");

  177.         register_event("ResetHUD", "delaycount", "a");

  178.         register_event("ResetHUD", "newround", "b");

  179.         register_logevent("endround", 2, "0=World triggered", "1=Round_End");   // Регистрируем конец раунда

  180.         register_event("Damage","CutDeploy_onDamage","b");

  181.         g_msgDeathMsg   = get_user_msgid("DeathMsg");

  182.         g_msgScoreInfo  = get_user_msgid("ScoreInfo");

  183.         g_msgDamage             = get_user_msgid("Damage");

  184.         g_msgStatusText = get_user_msgid("StatusText");

  185.  

  186.         // Forward.

  187.         register_forward(FM_Think, "ltm_Think");

  188.         register_forward(FM_PlayerPostThink, "ltm_PostThink");

  189.         register_forward(FM_PlayerPreThink, "ltm_PreThink");

  190.  

  191.         // Регистируем файл языков

  192.         register_dictionary("LaserMines.txt")

  193.         register_cvar("Shidla", "[ZP] LaserMines v.2.8.1 Final", FCVAR_SERVER|FCVAR_SPONLY)

  194. }

  195.  

  196. public plugin_precache()

  197. {

  198.         precache_sound(ENT_SOUND1);

  199.         precache_sound(ENT_SOUND2);

  200.         precache_sound(ENT_SOUND3);

  201.         precache_sound(ENT_SOUND4);

  202.         precache_sound(ENT_SOUND5);

  203.         precache_sound(ENT_SOUND6);

  204.         precache_sound(ENT_SOUND7);

  205.         precache_model(ENT_MODELS);

  206.         beam = precache_model(ENT_SPRITE1);

  207.         boom = precache_model(ENT_SPRITE2);

  208.         return PLUGIN_CONTINUE;

  209. }

  210.  

  211. public plugin_modules()

  212. {

  213.         require_module("fakemeta");

  214.         require_module("cstrike");

  215. }

  216.  

  217. public plugin_cfg()

  218. {

  219.         g_EntMine = engfunc(EngFunc_AllocString,ENT_CLASS_NAME3);

  220.         arrayset(g_havemine,0,sizeof(g_havemine));

  221.         arrayset(g_deployed,0,sizeof(g_deployed));

  222.         g_MaxPL = get_maxplayers();

  223.  

  224.         new file[64]; get_localinfo("amxx_configsdir",file,63);

  225.         format(file, 63, "%s/zp_ltm_cvars_ap.cfg", file);

  226.         if(file_exists(file)) server_cmd("exec %s", file), server_exec();

  227. }

  228.  

  229. public Laser_TakeDamage(victim, inflictor, attacker, Float:f_Damage, bit_Damage)

  230. {

  231.         if(get_pcvar_num(g_LBEO))

  232.         {

  233.                 new i_Owner

  234.  

  235.                 // Получаем ID игрока, который поставил мину

  236.                 i_Owner = pev(victim, LASERMINE_OWNER)

  237.  

  238.                 // Если команда того, кто поставил мину и того, кто атаковал совпадают

  239.                 if(CsTeams:pev(victim, LASERMINE_TEAM) == cs_get_user_team(attacker))

  240.                 // Если тот кто поставил мину, не совпадает с тем, кто ее атаковал, то прекращаем выполнение

  241.                 if(i_Owner != attacker)

  242.                         return HAM_SUPERCEDE

  243.                 return PLUGIN_CONTINUE

  244.         }

  245.         return PLUGIN_CONTINUE

  246. }

  247.  

  248. public delaycount(id)

  249. {

  250.         g_dcount[id] = floatround(get_gametime());

  251. }

  252.  

  253. bool:CheckTime(id)

  254. {

  255.         g_nowtime = floatround(get_gametime()) - g_dcount[id];

  256.         if(g_nowtime >= get_pcvar_num(g_LDELAY))

  257.                 return true;

  258.         return false;

  259. }

  260.  

  261. public CreateLaserMine_Progress_b(id)

  262. {

  263.         if(get_pcvar_num(g_LCMDMODE) != 0)

  264.                 CreateLaserMine_Progress(id);

  265.         return PLUGIN_HANDLED;

  266. }

  267.  

  268. public CreateLaserMine_Progress(id)

  269. {

  270.  

  271.         if(!CreateCheck(id))

  272.                 return PLUGIN_HANDLED;

  273.         g_settinglaser[id] = true;

  274.  

  275.         message_begin(MSG_ONE, 108, {0,0,0}, id);

  276.         write_byte(1);

  277.         write_byte(0);

  278.         message_end();

  279.  

  280.         set_task(1.2, "Spawn", (TASK_PLANT + id));

  281.  

  282.         return PLUGIN_HANDLED;

  283. }

  284.  

  285. public ReturnLaserMine_Progress(id)

  286. {

  287.  

  288.         if(!ReturnCheck(id))

  289.                 return PLUGIN_HANDLED;

  290.         g_settinglaser[id] = true;

  291.  

  292.         message_begin(MSG_ONE, 108, {0,0,0}, id);

  293.         write_byte(1);

  294.         write_byte(0);

  295.         message_end();

  296.  

  297.         set_task(1.2, "ReturnMine", (TASK_RELEASE + id));

  298.  

  299.         return PLUGIN_HANDLED;

  300. }

  301.  

  302. public StopCreateLaserMine(id)

  303. {

  304.  

  305.         DeleteTask(id);

  306.         message_begin(MSG_ONE, 108, {0,0,0}, id);

  307.         write_byte(0);

  308.         write_byte(0);

  309.         message_end();

  310.  

  311.         return PLUGIN_HANDLED;

  312. }

  313.  

  314. public StopReturnLaserMine(id)

  315. {

  316.  

  317.         DeleteTask(id);

  318.         message_begin(MSG_ONE, 108, {0,0,0}, id);

  319.         write_byte(0);

  320.         write_byte(0);

  321.         message_end();

  322.  

  323.         return PLUGIN_HANDLED;

  324. }

  325.  

  326. public ReturnMine(id)

  327. {

  328.         id -= TASK_RELEASE;

  329.         new tgt,body,Float:vo[3],Float:to[3];

  330.         get_user_aiming(id,tgt,body);

  331.         if(!pev_valid(tgt)) return;

  332.         pev(id,pev_origin,vo);

  333.         pev(tgt,pev_origin,to);

  334.         if(get_distance_f(vo,to) > 70.0) return;

  335.         new EntityName[32];

  336.         pev(tgt, pev_classname, EntityName, 31);

  337.         if(!equal(EntityName, ENT_CLASS_NAME)) return;

  338.         if(pev(tgt,LASERMINE_OWNER) != id) return;

  339.         RemoveEntity(tgt);

  340.  

  341.         g_havemine[id] ++;

  342.         g_deployed[id] --;

  343.         emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

  344.         ShowAmmo(id)

  345.  

  346.         return;

  347. }

  348.  

  349. public Spawn(id)

  350. {

  351.         id -= TASK_PLANT

  352.         // motor

  353.         new i_Ent = engfunc(EngFunc_CreateNamedEntity,g_EntMine);

  354.         if(!i_Ent)

  355.         {

  356.                 client_print(id, print_chat,"[Laesrmine Debug] Can't Create Entity");

  357.                 return PLUGIN_HANDLED_MAIN;

  358.         }

  359.         set_pev(i_Ent,pev_classname,ENT_CLASS_NAME);

  360.  

  361.         engfunc(EngFunc_SetModel,i_Ent,ENT_MODELS);

  362.  

  363.         set_pev(i_Ent,pev_solid,SOLID_NOT);

  364.         set_pev(i_Ent,pev_movetype,MOVETYPE_FLY);

  365.  

  366.         set_pev(i_Ent,pev_frame,0);

  367.         set_pev(i_Ent,pev_body,3);

  368.         set_pev(i_Ent,pev_sequence,TRIPMINE_WORLD);

  369.         set_pev(i_Ent,pev_framerate,0);

  370.         set_pev(i_Ent,pev_takedamage,DAMAGE_YES);

  371.         set_pev(i_Ent,pev_dmg,100.0);

  372.         set_user_health(i_Ent,get_pcvar_num(g_LHEALTH));

  373.         new Float:vOrigin[3];

  374.         new     Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],

  375.                 Float:vTraceEnd[3],Float:vEntAngles[3];

  376.         pev(id, pev_origin, vOrigin);

  377.         velocity_by_aim(id, 128, vTraceDirection);

  378.         xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);

  379.         engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);

  380.         new Float:fFraction;

  381.         get_tr2(0, TR_flFraction, fFraction);

  382.  

  383.         // -- We hit something!

  384.         if(fFraction < 1.0)

  385.         {

  386.                 // -- Save results to be used later.

  387.                 get_tr2(0, TR_vecEndPos, vTraceEnd);

  388.                 get_tr2(0, TR_vecPlaneNormal, vNormal);

  389.         }

  390.  

  391.  

  392.         xs_vec_mul_scalar(vNormal, 8.0, vNormal);

  393.         xs_vec_add(vTraceEnd, vNormal, vNewOrigin);

  394.  

  395.         engfunc(EngFunc_SetSize, i_Ent, Float:{ -4.0, -4.0, -4.0 }, Float:{ 4.0, 4.0, 4.0 });

  396.         engfunc(EngFunc_SetOrigin, i_Ent, vNewOrigin);

  397.  

  398.         // -- Rotate tripmine.

  399.         vector_to_angle(vNormal,vEntAngles);

  400.         set_pev(i_Ent,pev_angles,vEntAngles);

  401.  

  402.         // -- Calculate laser end origin.

  403.         new Float:vBeamEnd[3], Float:vTracedBeamEnd[3];

  404.                  

  405.         xs_vec_mul_scalar(vNormal, 8192.0, vNormal);

  406.         xs_vec_add(vNewOrigin, vNormal, vBeamEnd);

  407.  

  408.         engfunc(EngFunc_TraceLine, vNewOrigin, vBeamEnd, IGNORE_MONSTERS, -1, 0);

  409.  

  410.         get_tr2(0, TR_vecPlaneNormal, vNormal);

  411.         get_tr2(0, TR_vecEndPos, vTracedBeamEnd);

  412.  

  413.         // -- Save results to be used later.

  414.         set_pev(i_Ent, LASERMINE_OWNER, id);

  415.         set_pev(i_Ent,LASERMINE_BEAMENDPOINT,vTracedBeamEnd);

  416.         set_pev(i_Ent,LASERMINE_TEAM,int:cs_get_user_team(id));

  417.         new Float:fCurrTime = get_gametime();

  418.  

  419.         set_pev(i_Ent,LASERMINE_POWERUP, fCurrTime + 2.5);

  420.         set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK);

  421.         set_pev(i_Ent,pev_nextthink, fCurrTime + 0.2);

  422.  

  423.         PlaySound(i_Ent,POWERUP_SOUND);

  424.         g_deployed[id]++;

  425.         g_havemine[id]--;

  426.         DeleteTask(id);

  427.         ShowAmmo(id);

  428.         return 1;

  429. }

  430.  

  431. stock TeamDeployedCount(id)

  432. {

  433.         static i;

  434.         static CsTeams:t;t = cs_get_user_team(id);

  435.         static cnt;cnt=0;

  436.  

  437.         for(i = 1;i <= g_MaxPL;i++)

  438.         {

  439.                 if(is_user_connected(i))

  440.                         if(t == cs_get_user_team(i))

  441.                                 cnt += g_deployed[i];

  442.         }

  443.  

  444.         return cnt;

  445. }

  446.  

  447. bool:CheckCanTeam(id)

  448. {

  449.         new arg[5],CsTeam:num;

  450.         get_pcvar_string(g_LCBT,arg,3);

  451.         if(equali(arg,"Z"))

  452.         {

  453.                 num = CsTeam:CS_TEAM_T;

  454.         }

  455.         else if(equali(arg,"H"))

  456.         {

  457.                 num = CsTeam:CS_TEAM_CT;

  458.         }

  459.         else if(equali(arg,"ALL") || equali(arg,"HZ") || equali(arg,"ZH"))

  460.         {

  461.                 num = CsTeam:CS_TEAM_UNASSIGNED;

  462.         }

  463.         else

  464.         {

  465.                 num = CsTeam:CS_TEAM_UNASSIGNED;

  466.         }

  467.         if(num != CsTeam:CS_TEAM_UNASSIGNED && num != CsTeam:cs_get_user_team(id))

  468.                 return false;

  469.         return true;

  470. }

  471.  

  472. bool:CanCheck(id,mode)  // Проверки: когда можно ставить мины

  473. {

  474.         if(!get_pcvar_num(g_LENABLE))

  475.         {

  476.                 client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOTACTIVE")

  477.  

  478.                 return false;

  479.         }

  480.         if(get_pcvar_num(g_LACCESS) != 0)

  481.                 if(!(get_user_flags(id) & ADMIN_IMMUNITY))

  482.                 {

  483.                         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOACCESS")

  484.                         return false;

  485.                 }

  486.         if(!pev_user_alive(id)) return false;

  487.         if(!CheckCanTeam(id))

  488.         {

  489.                 client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_CBT")

  490.                 return false;

  491.         }

  492.         if(mode == 0)

  493.         {

  494.                 if(g_havemine[id] <= 0)

  495.                 {

  496.                         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_DONTHAVEMINE")

  497.                         return false;

  498.                 }

  499.         }

  500.         if(mode == 1)

  501.         {

  502.                 if(get_pcvar_num(g_LBUYMODE) == 0)

  503.                 {

  504.                         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_CANTBUY")

  505.                         return false;

  506.                 }

  507.                 if(g_havemine[id] >= get_pcvar_num(g_LAMMO))

  508.                 {

  509.                         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_HAVEMAX")

  510.                         return false;

  511.                 }

  512.                 if(zp_get_user_ammo_packs(id) < get_pcvar_num(g_LCOST))

  513.                 {

  514.                         client_print(id, print_chat, "%L %L%d %L", id, "CHATTAG",id, "STR_NOMONEY",get_pcvar_num(g_LCOST),id, "STR_NEEDED")

  515.                         return false;

  516.                 }

  517.         }

  518.         if(!CheckTime(id))

  519.         {

  520.                 client_print(id, print_chat, "%L %L %d %L", id, "CHATTAG",id, "STR_DELAY",get_pcvar_num(g_LDELAY)-g_nowtime,id, "STR_SECONDS")

  521.                 return false;

  522.         }

  523.  

  524.         return true;

  525. }

  526.  

  527. bool:ReturnCheck(id)

  528. {

  529.         if(!CanCheck(id,-1)) return false;

  530.         if(g_havemine[id] + 1 > get_pcvar_num(g_LAMMO)) return false;

  531.         new tgt,body,Float:vo[3],Float:to[3];

  532.         get_user_aiming(id,tgt,body);

  533.         if(!pev_valid(tgt)) return false;

  534.         pev(id,pev_origin,vo);

  535.         pev(tgt,pev_origin,to);

  536.         if(get_distance_f(vo,to) > 70.0) return false;

  537.         new EntityName[32];

  538.         pev(tgt, pev_classname, EntityName, 31);

  539.         if(!equal(EntityName, ENT_CLASS_NAME)) return false;

  540.         if(pev(tgt,LASERMINE_OWNER) != id) return false;

  541.         return true;

  542. }

  543.  

  544. bool:CreateCheck(id)

  545. {

  546.         if(!CanCheck(id,0)) return false;

  547.  

  548.         // Проверка на разрешение

  549.         if(!zp_has_round_started() && get_pcvar_num(g_NOROUND))

  550.         {

  551.                 client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOROUND")

  552.                 return false;

  553.         }

  554.  

  555.         if(zp_is_nemesis_round() && get_pcvar_num(g_NEMROUND))

  556.         {

  557.                 client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NEMROUND")

  558.                 return false;

  559.         }

  560.  

  561.         if(zp_is_survivor_round() && get_pcvar_num(g_SURVROUND))

  562.         {

  563.                 client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_SURVROUND")

  564.                 return false;

  565.         }

  566.  

  567.         if(g_deployed[id] >= get_pcvar_num(g_LAMMO))

  568.         {

  569.                 client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_MAXDEPLOY")

  570.                 return false;

  571.         }

  572.  

  573.         if(TeamDeployedCount(id) >= get_pcvar_num(g_LTMAX))

  574.         {

  575.                 client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_MANYPPL")

  576.                 return false;

  577.         }

  578.         new Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3];

  579.         pev(id, pev_origin, vOrigin);

  580.         velocity_by_aim(id, 128, vTraceDirection);

  581.         xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);

  582.         engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);

  583.         new Float:fFraction,Float:vTraceNormal[3];

  584.         get_tr2(0, TR_flFraction, fFraction);

  585.         // -- We hit something!

  586.         if(fFraction < 1.0)

  587.         {

  588.                 // -- Save results to be used later.

  589.                 get_tr2(0, TR_vecEndPos, vTraceEnd);

  590.                 get_tr2(0, TR_vecPlaneNormal, vTraceNormal);

  591.  

  592.                 return true;

  593.         }

  594.  

  595.         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_PLANTWALL")

  596.         DeleteTask(id);

  597.         // -- Did not touched something. (not solid)

  598.         return false;

  599. }

  600.  

  601. public ltm_Think(i_Ent)

  602. {

  603.         if(!pev_valid(i_Ent))

  604.                 return FMRES_IGNORED;

  605.         new EntityName[32];

  606.         pev(i_Ent, pev_classname, EntityName, 31);

  607.         if(!get_pcvar_num(g_LENABLE)) return FMRES_IGNORED;

  608.         // -- Entity is not a tripmine, ignoring the next...

  609.         if(!equal(EntityName, ENT_CLASS_NAME))

  610.                 return FMRES_IGNORED;

  611.  

  612.         static Float:fCurrTime;

  613.         fCurrTime = get_gametime();

  614.  

  615.         switch(pev(i_Ent, LASERMINE_STEP))

  616.         {

  617.                 case POWERUP_THINK :

  618.                 {

  619.                         new Float:fPowerupTime;

  620.                         pev(i_Ent, LASERMINE_POWERUP, fPowerupTime);

  621.  

  622.                         if(fCurrTime > fPowerupTime)

  623.                         {

  624.                                 set_pev(i_Ent, pev_solid, SOLID_BBOX);

  625.                                 set_pev(i_Ent, LASERMINE_STEP, BEAMBREAK_THINK);

  626.  

  627.                                 PlaySound(i_Ent, ACTIVATE_SOUND);

  628.                         }

  629.                         if(get_pcvar_num(g_LGLOW)!=0)

  630.                         {

  631.                                 if(get_pcvar_num(g_LCLMODE)==0)

  632.                                 {

  633.                                         switch (pev(i_Ent,LASERMINE_TEAM))

  634.                                         {

  635.                                                 // цвет лазера Зомби

  636.                                                 case CS_TEAM_T: set_rendering(i_Ent,kRenderFxGlowShell,Red_Zomb,Green_Zomb,Blue_Zomb,kRenderNormal,5);

  637.                                                 // цвет лазера Человека

  638.                                                 case CS_TEAM_CT:set_rendering(i_Ent,kRenderFxGlowShell,Red_Hum,Green_Hum,Blue_Hum,kRenderNormal,5);

  639.                                         }

  640.                                 }else

  641.                                 {

  642.                                         // цвет лазера, если стоит "одинаковый для всех" цвет

  643.                                         set_rendering(i_Ent,kRenderFxGlowShell,random_num(50 , 200),random_num(50 , 200),random_num(50 , 200),kRenderNormal,5);

  644.                                 }

  645.                         }

  646.                         set_pev(i_Ent, pev_nextthink, fCurrTime + 0.1);

  647.                 }

  648.                 case BEAMBREAK_THINK :

  649.                 {

  650.                         static Float:vEnd[3],Float:vOrigin[3];

  651.                         pev(i_Ent, pev_origin, vOrigin);

  652.                         pev(i_Ent, LASERMINE_BEAMENDPOINT, vEnd);

  653.  

  654.                         static iHit, Float:fFraction;

  655.                         engfunc(EngFunc_TraceLine, vOrigin, vEnd, DONT_IGNORE_MONSTERS, i_Ent, 0);

  656.  

  657.                         get_tr2(0, TR_flFraction, fFraction);

  658.                         iHit = get_tr2(0, TR_pHit);

  659.  

  660.                         // -- Something has passed the laser.

  661.                         if(fFraction < 1.0)

  662.                         {

  663.                                 // -- Ignoring others tripmines entity.

  664.                                 if(pev_valid(iHit))

  665.                                 {

  666.                                         pev(iHit, pev_classname, EntityName, 31);

  667.                                         // Игнорим всякую хрень

  668.                                         if(!equal(EntityName, ENT_CLASS_NAME) && !equal(EntityName, gSnarkClassName) && !equal(EntityName, barnacle_class) && !equal(EntityName, weapon_box))

  669.                                         {

  670.                                                 set_pev(i_Ent, pev_enemy, iHit);

  671.  

  672.                                                 if(get_pcvar_num(g_LMODE) == MODE_LASERMINE)

  673.                                                         CreateLaserDamage(i_Ent,iHit);

  674.                                                 else

  675.                                                         if(get_pcvar_num(g_LFF) || CsTeams:pev(i_Ent,LASERMINE_TEAM) != cs_get_user_team(iHit))

  676.                                                                 set_pev(i_Ent, LASERMINE_STEP, EXPLOSE_THINK);

  677.  

  678.                                                 if (!pev_valid(i_Ent))  // если не верный объект - ничего не делаем. Спасибо DJ_WEST

  679.                                                         return FMRES_IGNORED;

  680.  

  681.                                                 set_pev(i_Ent, pev_nextthink, fCurrTime + random_float(0.1, 0.3));

  682.                                         }

  683.                                 }

  684.                         }

  685.                         if(get_pcvar_num(g_LDMGMODE)!=0)

  686.                                 if(pev(i_Ent,LASERMINE_HITING) != iHit)

  687.                                         set_pev(i_Ent,LASERMINE_HITING,iHit);

  688.  

  689.                         // -- Tripmine is still there.

  690.                         if(pev_valid(i_Ent))

  691.                         {

  692.                                 static Float:fHealth;

  693.                                 pev(i_Ent, pev_health, fHealth);

  694.  

  695.                                 if(fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME))

  696.                                 {

  697.                                 set_pev(i_Ent, LASERMINE_STEP, EXPLOSE_THINK);

  698.                                 set_pev(i_Ent, pev_nextthink, fCurrTime + random_float(0.1, 0.3));

  699.                                 }

  700.                                                                                  

  701.                                 static Float:fBeamthink;

  702.                                 pev(i_Ent, LASERMINE_BEAMTHINK, fBeamthink);

  703.                                                  

  704.                                 if(fBeamthink < fCurrTime && get_pcvar_num(g_LVISIBLE))

  705.                                 {

  706.                                         DrawLaser(i_Ent, vOrigin, vEnd);

  707.                                         set_pev(i_Ent, LASERMINE_BEAMTHINK, fCurrTime + 0.1);

  708.                                 }

  709.                                 set_pev(i_Ent, pev_nextthink, fCurrTime + 0.01);

  710.                         }

  711.                 }

  712.                 case EXPLOSE_THINK :

  713.                 {

  714.                         // -- Stopping entity to think

  715.                         set_pev(i_Ent, pev_nextthink, 0.0);

  716.                         PlaySound(i_Ent, STOP_SOUND);

  717.                         g_deployed[pev(i_Ent,LASERMINE_OWNER)]--;

  718.                         CreateExplosion(i_Ent);

  719.                         CreateDamage(i_Ent,get_pcvar_float(g_LRDMG),get_pcvar_float(g_LRADIUS))

  720.                         RemoveEntity    (i_Ent);

  721.                 }

  722.         }

  723.  

  724.         return FMRES_IGNORED;

  725. }

  726.  

  727. PlaySound(i_Ent, i_SoundType)

  728. {

  729.         switch (i_SoundType)

  730.         {

  731.                 case POWERUP_SOUND :

  732.                 {

  733.                         emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND1, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

  734.                         emit_sound(i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, 0, PITCH_NORM);

  735.                 }

  736.                 case ACTIVATE_SOUND :

  737.                 {

  738.                         emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, 1, 75);

  739.                 }

  740.                 case STOP_SOUND :

  741.                 {

  742.                         emit_sound(i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, SND_STOP, PITCH_NORM);

  743.                         emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, SND_STOP, 75);

  744.                 }

  745.         }

  746. }

  747.  

  748. DrawLaser(i_Ent, const Float:v_Origin[3], const Float:v_EndOrigin[3])

  749. {

  750.         new tcolor[3];

  751.         new teamid = pev(i_Ent, LASERMINE_TEAM);

  752.         if(get_pcvar_num(g_LCLMODE) == 0)

  753.         {

  754.                 switch(teamid){

  755.                         case 1:{

  756.                                 // Цвет луча для Зомби

  757.                                 tcolor[0] = Red_Zomb;

  758.                                 tcolor[1] = Green_Zomb;

  759.                                 tcolor[2] = Blue_Zomb;

  760.                         }

  761.                         case 2:{

  762.                                 // Цвет луча для Человека

  763.                                 tcolor[0] = Red_Hum;

  764.                                 tcolor[1] = Green_Hum;

  765.                                 tcolor[2] = Blue_Hum;

  766.                         }

  767.                 }

  768.         }else

  769.         {

  770.                 // Цвет луча для всез при режиме 1-н луч для всех

  771.                 tcolor[0] = random_num(50 , 200);

  772.                 tcolor[1] = random_num(50 , 200);

  773.                 tcolor[2] = random_num(50 , 200);

  774.         }

  775.         message_begin(MSG_BROADCAST,SVC_TEMPENTITY);

  776.         write_byte(TE_BEAMPOINTS);

  777.         engfunc(EngFunc_WriteCoord,v_Origin[0]);

  778.         engfunc(EngFunc_WriteCoord,v_Origin[1]);

  779.         engfunc(EngFunc_WriteCoord,v_Origin[2]);

  780.         engfunc(EngFunc_WriteCoord,v_EndOrigin[0]); //Random

  781.         engfunc(EngFunc_WriteCoord,v_EndOrigin[1]); //Random

  782.         engfunc(EngFunc_WriteCoord,v_EndOrigin[2]); //Random

  783.         write_short(beam);

  784.         write_byte(0);

  785.         write_byte(0);

  786.         write_byte(1);  //Life

  787.         write_byte(5);  //Width

  788.         write_byte(0);  //wave

  789.         write_byte(tcolor[0]); // r

  790.         write_byte(tcolor[1]); // g

  791.         write_byte(tcolor[2]); // b

  792.         write_byte(get_pcvar_num(g_LCBRIGHT));

  793.         write_byte(255);

  794.         message_end();

  795. }

  796.  

  797. CreateDamage(iCurrent,Float:DmgMAX,Float:Radius)

  798. {

  799.         // Get given parameters

  800.         new Float:vecSrc[3];

  801.         pev(iCurrent, pev_origin, vecSrc);

  802.  

  803.         new AtkID =pev(iCurrent,LASERMINE_OWNER);

  804.         new TeamID=pev(iCurrent,LASERMINE_TEAM);

  805.  

  806.         new ent = -1;

  807.         new Float:tmpdmg = DmgMAX;

  808.  

  809.         new Float:kickback = 0.0;

  810.         // Needed for doing some nice calculations :P

  811.         new Float:Tabsmin[3], Float:Tabsmax[3];

  812.         new Float:vecSpot[3];

  813.         new Float:Aabsmin[3], Float:Aabsmax[3];

  814.         new Float:vecSee[3];

  815.         new trRes;

  816.         new Float:flFraction;

  817.         new Float:vecEndPos[3];

  818.         new Float:distance;

  819.         new Float:origin[3], Float:vecPush[3];

  820.         new Float:invlen;

  821.         new Float:velocity[3];

  822.         new iHitHP,iHitTeam;

  823.         // Calculate falloff

  824.         new Float:falloff;

  825.         if(Radius > 0.0)

  826.         {

  827.                 falloff = DmgMAX / Radius;

  828.         } else {

  829.                 falloff = 1.0;

  830.         }

  831.         // Find monsters and players inside a specifiec radius

  832.         while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0)

  833.         {

  834.                 if(!pev_valid(ent)) continue;

  835.                 if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))

  836.                 {

  837.                         // Entity is not a player or monster, ignore it

  838.                         continue;

  839.                 }

  840.                 if(!pev_user_alive(ent)) continue;

  841.                 // Reset data

  842.                 kickback = 1.0;

  843.                 tmpdmg = DmgMAX;

  844.                 // The following calculations are provided by Orangutanz, THANKS!

  845.                 // We use absmin and absmax for the most accurate information

  846.                 pev(ent, pev_absmin, Tabsmin);

  847.                 pev(ent, pev_absmax, Tabsmax);

  848.                 xs_vec_add(Tabsmin,Tabsmax,Tabsmin);

  849.                 xs_vec_mul_scalar(Tabsmin,0.5,vecSpot);

  850.                 pev(iCurrent, pev_absmin, Aabsmin);

  851.                 pev(iCurrent, pev_absmax, Aabsmax);

  852.                 xs_vec_add(Aabsmin,Aabsmax,Aabsmin);

  853.                 xs_vec_mul_scalar(Aabsmin,0.5,vecSee);

  854.                 engfunc(EngFunc_TraceLine, vecSee, vecSpot, 0, iCurrent, trRes);

  855.                 get_tr2(trRes, TR_flFraction, flFraction);

  856.                 // Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD)

  857.                 if(flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent)

  858.                 {

  859.                         // Work out the distance between impact and entity

  860.                         get_tr2(trRes, TR_vecEndPos, vecEndPos);

  861.                         distance = get_distance_f(vecSrc, vecEndPos) * falloff;

  862.                         tmpdmg -= distance;

  863.                         if(tmpdmg < 0.0)

  864.                                 tmpdmg = 0.0;

  865.                         // Kickback Effect

  866.                         if(kickback != 0.0)

  867.                         {

  868.                                 xs_vec_sub(vecSpot,vecSee,origin);

  869.                                 invlen = 1.0/get_distance_f(vecSpot, vecSee);

  870.  

  871.                                 xs_vec_mul_scalar(origin,invlen,vecPush);

  872.                                 pev(ent, pev_velocity, velocity)

  873.                                 xs_vec_mul_scalar(vecPush,tmpdmg,vecPush);

  874.                                 xs_vec_mul_scalar(vecPush,kickback,vecPush);

  875.                                 xs_vec_add(velocity,vecPush,velocity);

  876.                                 if(tmpdmg < 60.0)

  877.                                 {

  878.                                         xs_vec_mul_scalar(velocity,12.0,velocity);

  879.                                 } else {

  880.                                         xs_vec_mul_scalar(velocity,4.0,velocity);

  881.                                 }

  882.                                 if(velocity[0] != 0.0 || velocity[1] != 0.0 || velocity[2] != 0.0)

  883.                                 {

  884.                                         // There's some movement todo :)

  885.                                         set_pev(ent, pev_velocity, velocity)

  886.                                 }

  887.                         }

  888.  

  889.                         iHitHP = pev_user_health(ent) - floatround(tmpdmg)

  890.                         iHitTeam = int:cs_get_user_team(ent)

  891.                         if(iHitHP <= 0)

  892.                         {

  893.                                 if(iHitTeam != TeamID)

  894.                                 {

  895.                                         zp_set_user_ammo_packs(AtkID,zp_get_user_ammo_packs(AtkID) + get_pcvar_num(g_LFMONEY))

  896.                                         set_score(AtkID,ent,1,iHitHP)

  897.                                 }else

  898.                                 {

  899.                                         if(get_pcvar_num(g_LFF))

  900.                                         {

  901.                                                 zp_set_user_ammo_packs(AtkID,zp_get_user_ammo_packs(AtkID) - get_pcvar_num(g_LFMONEY))

  902.                                                 set_score(AtkID,ent,-1,iHitHP)

  903.                                         }

  904.                                 }

  905.                         }else

  906.                         {

  907.                                 if(iHitTeam != TeamID || get_pcvar_num(g_LFF))

  908.                                 {

  909.                                         //set_pev(Player,pev_health,iHitHP)

  910.                                         set_user_health(ent, iHitHP)

  911.                                         engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},ent);

  912.                                         write_byte(floatround(tmpdmg))

  913.                                         write_byte(floatround(tmpdmg))

  914.                                         write_long(DMG_BULLET)

  915.                                         engfunc(EngFunc_WriteCoord,vecSrc[0])

  916.                                         engfunc(EngFunc_WriteCoord,vecSrc[1])

  917.                                         engfunc(EngFunc_WriteCoord,vecSrc[2])

  918.                                         message_end()

  919.                                 }

  920.                         }

  921.                 }

  922.         }

  923.         return

  924. }

  925.  

  926. bool:pev_user_alive(ent)

  927. {

  928.         new deadflag = pev(ent,pev_deadflag);

  929.         if(deadflag != DEAD_NO)

  930.                 return false;

  931.         return true;

  932. }

  933.  

  934. CreateExplosion(iCurrent)

  935. {

  936.         new Float:vOrigin[3];

  937.         pev(iCurrent,pev_origin,vOrigin);

  938.  

  939.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY);

  940.         write_byte(99); //99 = KillBeam

  941.         write_short(iCurrent);

  942.         message_end();

  943.  

  944.         engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin, 0);

  945.         write_byte(TE_EXPLOSION);

  946.         engfunc(EngFunc_WriteCoord,vOrigin[0]);

  947.         engfunc(EngFunc_WriteCoord,vOrigin[1]);

  948.         engfunc(EngFunc_WriteCoord,vOrigin[2]);

  949.         write_short(boom);

  950.         write_byte(30);

  951.         write_byte(15);

  952.         write_byte(0);

  953.         message_end();

  954. }

  955.  

  956. CreateLaserDamage(iCurrent,isHit)

  957. {

  958.         if(isHit < 0) return PLUGIN_CONTINUE

  959.         switch(get_pcvar_num(g_LDMGMODE))

  960.         {

  961.                 case 1:

  962.                 {

  963.                         if(pev(iCurrent,LASERMINE_HITING) == isHit)

  964.                                 return PLUGIN_CONTINUE

  965.                 }

  966.                 case 2:

  967.                 {

  968.                         if(pev(iCurrent,LASERMINE_HITING) == isHit)

  969.                         {

  970.                                 static Float:cnt

  971.                                 static now,htime;now = floatround(get_gametime())

  972.  

  973.                                 pev(iCurrent,LASERMINE_COUNT,cnt)

  974.                                 htime = floatround(cnt)

  975.                                 if(now - htime < get_pcvar_num(g_LDSEC))

  976.                                 {

  977.                                         return PLUGIN_CONTINUE;

  978.                                 }else{

  979.                                         set_pev(iCurrent,LASERMINE_COUNT,get_gametime())

  980.                                 }

  981.                         }else

  982.                         {

  983.                                 set_pev(iCurrent,LASERMINE_COUNT,get_gametime())

  984.                         }

  985.                 }

  986.         }

  987.  

  988.         new Float:vOrigin[3],Float:vEnd[3]

  989.         pev(iCurrent,pev_origin,vOrigin)

  990.         pev(iCurrent,pev_vuser1,vEnd)

  991.  

  992.         new teamid = pev(iCurrent, LASERMINE_TEAM)

  993.  

  994.         new szClassName[32]

  995.         new Alive,God

  996.         new iHitTeam,iHitHP,id

  997.         new hitscore

  998.  

  999.         szClassName[0] = '^0'

  1000.         pev(isHit,pev_classname,szClassName,32)

  1001.         if((pev(isHit, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))

  1002.         {

  1003.                 Alive = pev_user_alive(isHit)

  1004.                 God = get_user_godmode(isHit)

  1005.                 if(!Alive || God) return PLUGIN_CONTINUE

  1006.                 iHitTeam = int:cs_get_user_team(isHit)

  1007.                 iHitHP = pev_user_health(isHit) - get_pcvar_num(g_LDMG)

  1008.                 id = pev(iCurrent,LASERMINE_OWNER)//, szNetName[32]

  1009.                 if(iHitHP <= 0)

  1010.                 {

  1011.                         if(iHitTeam != teamid)

  1012.                         {

  1013.                                 emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)

  1014.                                 hitscore = 1

  1015.                                 zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) + get_pcvar_num(g_LFMONEY))

  1016.                                 set_score(id,isHit,hitscore,iHitHP)

  1017.                         }else

  1018.                         {

  1019.                                 if(get_pcvar_num(g_LFF))

  1020.                                 {

  1021.                                         emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)

  1022.                                         hitscore = -1

  1023.                                         zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) - get_pcvar_num(g_LFMONEY))

  1024.                                         set_score(id,isHit,hitscore,iHitHP)

  1025.                                 }

  1026.                         }

  1027.                 }else if(iHitTeam != teamid || get_pcvar_num(g_LFF))

  1028.                 {

  1029.                         emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)

  1030.                         set_user_health(isHit,iHitHP)

  1031.                         set_pev(iCurrent,LASERMINE_HITING,isHit);

  1032.                         engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},isHit);

  1033.                         write_byte(get_pcvar_num(g_LDMG))

  1034.                         write_byte(get_pcvar_num(g_LDMG))

  1035.                         write_long(DMG_BULLET)

  1036.                         engfunc(EngFunc_WriteCoord,vOrigin[0])

  1037.                         engfunc(EngFunc_WriteCoord,vOrigin[1])

  1038.                         engfunc(EngFunc_WriteCoord,vOrigin[2])

  1039.                         message_end()

  1040.                 }

  1041.         }else if(equal(szClassName, ENT_CLASS_NAME3))

  1042.         {

  1043.                 new hl;

  1044.                 hl = pev_user_health(isHit);

  1045.                 set_user_health(isHit,hl-get_pcvar_num(g_LDMG));

  1046.         }

  1047.         return PLUGIN_CONTINUE

  1048. }

  1049.  

  1050. stock pev_user_health(id)

  1051. {

  1052.         new Float:health

  1053.         pev(id,pev_health,health)

  1054.         return floatround(health)

  1055. }

  1056.  

  1057. stock set_user_health(id,health)

  1058. {

  1059.         health > 0 ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id);

  1060. }

  1061.  

  1062. stock get_user_godmode(index) {

  1063.         new Float:val

  1064.         pev(index, pev_takedamage, val)

  1065.  

  1066.         return (val == DAMAGE_NO)

  1067. }

  1068.  

  1069. stock set_user_frags(index, frags)

  1070. {

  1071.         set_pev(index, pev_frags, float(frags))

  1072.  

  1073.         return 1

  1074. }

  1075.  

  1076. stock pev_user_frags(index)

  1077. {

  1078.         new Float:frags;

  1079.         pev(index,pev_frags,frags);

  1080.         return floatround(frags);

  1081. }

  1082.  

  1083. set_score(id,target,hitscore,HP){

  1084.  

  1085.         new idfrags = pev_user_frags(id) + hitscore// get_user_frags(id) + hitscore

  1086.         set_user_frags(id,idfrags)

  1087.         new tarfrags = pev_user_frags(target) + 1 //get_user_frags(target) + 1

  1088.         set_user_frags(target,tarfrags)

  1089.         new idteam = int:cs_get_user_team(id)

  1090.         new iddeaths = cs_get_user_deaths(id)

  1091.  

  1092.  

  1093.         message_begin(MSG_ALL, g_msgDeathMsg, {0, 0, 0} ,0)

  1094.         write_byte(id)

  1095.         write_byte(target)

  1096.         write_byte(0)

  1097.         write_string(ENT_CLASS_NAME)

  1098.         message_end()

  1099.  

  1100.         message_begin(MSG_ALL, g_msgScoreInfo)

  1101.         write_byte(id)

  1102.         write_short(idfrags)

  1103.         write_short(iddeaths)

  1104.         write_short(0)

  1105.         write_short(idteam)

  1106.         message_end()

  1107.  

  1108.         set_msg_block(g_msgDeathMsg, BLOCK_ONCE)

  1109.  

  1110.         set_user_health(target, HP)

  1111.  

  1112. }

  1113.  

  1114. public BuyLasermine(id)

  1115. {

  1116.         if(!CanCheck(id,1)) return PLUGIN_CONTINUE

  1117.  

  1118.         zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) - get_pcvar_num(g_LCOST))

  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 zp_extra_item_selected(id, itemid)

  1129. {

  1130.         if(itemid == g_LME)

  1131.                 {

  1132.                 zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + LMCost)

  1133.                 BuyLasermine(id)

  1134.                 }

  1135.         return PLUGIN_CONTINUE

  1136. }

  1137.  

  1138. ShowAmmo(id)

  1139. {

  1140.         new ammo[51]

  1141.         new PlugStat[ 555 char ];

  1142.         formatex(PlugStat, charsmax(PlugStat), "%L", LANG_PLAYER, "STR_STATE")

  1143.         formatex(ammo, 50, "%s %i/%i",PlugStat, g_havemine[id],get_pcvar_num(g_LAMMO))

  1144.  

  1145.         message_begin(MSG_ONE, g_msgStatusText, {0,0,0}, id)

  1146.         write_byte(0)

  1147.         write_string(ammo)

  1148.         message_end()

  1149. }

  1150.  

  1151. public showInfo(id)

  1152. {

  1153.         client_print(id, print_chat, "%L", id, "STR_REF")

  1154. }

  1155.  

  1156. public say_lasermine(id){

  1157.         new said[32]

  1158.         read_argv(1,said,31);

  1159.         if(!get_pcvar_num(g_LENABLE))

  1160.         {

  1161.                 return PLUGIN_CONTINUE

  1162.         }

  1163.         if(equali(said,"/buy lasermine")||equali(said,"/lm")||equali(said,"buy_lasermine")){

  1164.                 BuyLasermine(id)

  1165.         }else if(equali(said, "lasermine") || equali(said, "/lasermine")){

  1166.                 const SIZE = 1024

  1167.                 new msg[SIZE+1],len = 0;

  1168.                 len += formatex(msg[len], SIZE - len, "<html><body>")

  1169.                 len += formatex(msg[len], SIZE - len, "<p><b>LaserMine</b></p><br/><br/>")

  1170.                 len += formatex(msg[len], SIZE - len, "<p>You can be setting the mine on the wall.</p><br/>")

  1171.                 len += formatex(msg[len], SIZE - len, "<p>That laser will give what touched it damage.</p><br/><br/>")

  1172.                 len += formatex(msg[len], SIZE - len, "<p><b>LaserMine Commands</b></p><br/><br/>")

  1173.                 len += formatex(msg[len], SIZE - len, "<p><b>Say /buy lasermine</b> or <b>Say /lm</b> //buying lasermine<br/>")

  1174.                 len += formatex(msg[len], SIZE - len, "<b>buy_lasermine</b> //bind ^"F2^" buy_lasermine : using F2 buying lasermine<br/>")

  1175.                 len += formatex(msg[len], SIZE - len, "<b>+setlaser</b> //bind mouse3 +setlaser : using mouse3 set lasermine on wall<br/>")

  1176.                 len += formatex(msg[len], SIZE - len, "</body></html>")

  1177.                 show_motd(id, msg, "Lasermine Entity help")

  1178.                 return PLUGIN_CONTINUE

  1179.         }

  1180.         else if(containi(said, "laser") != -1) {

  1181.                 showInfo(id)

  1182.                 return PLUGIN_CONTINUE

  1183.         }

  1184.         return PLUGIN_CONTINUE

  1185. }

  1186.  

  1187. public standing(id)

  1188. {

  1189.         if(!g_settinglaser[id])

  1190.                 return PLUGIN_CONTINUE

  1191.  

  1192.         set_pev(id, pev_maxspeed, 1.0)

  1193.  

  1194.         return PLUGIN_CONTINUE

  1195. }

  1196.  

  1197. public ltm_PostThink(id)

  1198. {

  1199.         if(!g_settinglaser[id] && plsetting[id]){

  1200.                 resetspeed(id)

  1201.         }

  1202.         else if(g_settinglaser[id] && !plsetting[id]) {

  1203.                 pev(id, pev_maxspeed,plspeed[id])

  1204.                 set_pev(id, pev_maxspeed, 1.0)

  1205.         }

  1206.         plsetting[id] = g_settinglaser[id]

  1207.         return FMRES_IGNORED

  1208. }

  1209.  

  1210. public ltm_PreThink(id)

  1211. {

  1212.         if(!pev_user_alive(id) || g_settinglaser[id] == true || is_user_bot(id) || get_pcvar_num(g_LCMDMODE) == 1)

  1213.                 return FMRES_IGNORED;

  1214.  

  1215.         if(pev(id, pev_button) & IN_USE && !(pev(id, pev_oldbuttons) & IN_USE))

  1216.                 CreateLaserMine_Progress(id)

  1217.         return FMRES_IGNORED;

  1218. }

  1219.  

  1220. resetspeed(id)

  1221. {

  1222.         set_pev(id, pev_maxspeed, plspeed[id])

  1223. }

  1224.  

  1225. public client_putinserver(id){

  1226.         g_deployed[id] = 0;

  1227.         g_havemine[id] = 0;

  1228.         DeleteTask(id);

  1229.         return PLUGIN_CONTINUE

  1230. }

  1231.  

  1232. public client_disconnect(id){

  1233.         if(!get_pcvar_num(g_LENABLE))

  1234.                 return PLUGIN_CONTINUE

  1235.         DeleteTask(id);

  1236.         RemoveAllTripmines(id);

  1237.         return PLUGIN_CONTINUE

  1238. }

  1239.  

  1240.  

  1241. public newround(id){

  1242.         if(!get_pcvar_num(g_LENABLE))

  1243.                 return PLUGIN_CONTINUE

  1244.         pev(id, pev_maxspeed,plspeed[id])

  1245.         DeleteTask(id);

  1246.         RemoveAllTripmines(id);

  1247.         //client_print(id, print_chat, "[ZP][LM][DeBug] All Mines removied!");

  1248.         delaycount(id);

  1249.         SetStartAmmo(id);

  1250.         return PLUGIN_CONTINUE

  1251. }

  1252.  

  1253. public endround(id)

  1254. {

  1255.         if(!get_pcvar_num(g_LENABLE))

  1256.                 return PLUGIN_CONTINUE

  1257.  

  1258.         // Удаление мин после конца раунда

  1259.         DeleteTask(id);

  1260.         RemoveAllTripmines(id);

  1261.  

  1262.         return PLUGIN_CONTINUE

  1263. }

  1264.  

  1265. public DeathEvent(){

  1266.         if(!get_pcvar_num(g_LENABLE))

  1267.                 return PLUGIN_CONTINUE

  1268.  

  1269.         new id = read_data(2)

  1270.         if(is_user_connected(id)) DeleteTask(id);

  1271.         return PLUGIN_CONTINUE

  1272. }

  1273.  

  1274. public RemoveAllTripmines(i_Owner)

  1275. {

  1276.         new iEnt = g_MaxPL + 1;

  1277.         new clsname[32];

  1278.         while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", ENT_CLASS_NAME)))

  1279.         {

  1280.                 if(i_Owner)

  1281.                 {

  1282.                         if(pev(iEnt, LASERMINE_OWNER) != i_Owner)

  1283.                                 continue;

  1284.                         clsname[0] = '^0'

  1285.                         pev(iEnt, pev_classname, clsname, sizeof(clsname)-1);

  1286.                         if(equali(clsname, ENT_CLASS_NAME))

  1287.                         {

  1288.                                 PlaySound(iEnt, STOP_SOUND);

  1289.                                 RemoveEntity(iEnt);

  1290.                         }

  1291.                 }

  1292.                 else

  1293.                         set_pev(iEnt, pev_flags, FL_KILLME);

  1294.         }

  1295.         g_deployed[i_Owner]=0;

  1296. }

  1297.  

  1298. SetStartAmmo(id)

  1299. {

  1300.         new stammo = get_pcvar_num(g_LSTAMMO);

  1301.         if(stammo <= 0) return PLUGIN_CONTINUE;

  1302.         g_havemine[id] = (g_havemine[id] <= stammo) ? stammo : g_havemine[id];

  1303.         return PLUGIN_CONTINUE;

  1304. }

  1305.  

  1306. public CutDeploy_onDamage(id)

  1307. {

  1308.         if(get_user_health(id) < 1)

  1309.                 DeleteTask(id);

  1310. }

  1311.  

  1312. DeleteTask(id)

  1313. {

  1314.         if(task_exists((TASK_PLANT + id)))

  1315.         {

  1316.                 remove_task((TASK_PLANT + id))

  1317.         }

  1318.         if(task_exists((TASK_RELEASE + id)))

  1319.         {

  1320.                 remove_task((TASK_RELEASE + id))

  1321.         }

  1322.         g_settinglaser[id] = false

  1323.         return PLUGIN_CONTINUE;

  1324. }

  1325.  

  1326. stock set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)

  1327. {

  1328.         static Float:RenderColor[3];

  1329.         RenderColor[0] = float(r);

  1330.         RenderColor[1] = float(g);

  1331.         RenderColor[2] = float(b);

  1332.  

  1333.         set_pev(entity, pev_renderfx, fx);

  1334.         set_pev(entity, pev_rendercolor, RenderColor);

  1335.         set_pev(entity, pev_rendermode, render);

  1336.         set_pev(entity, pev_renderamt, float(amount));

  1337.  

  1338.         return 1

  1339. }

  1340.  

  1341. // Gets offset data

  1342. get_offset_value(id, type)

  1343. {

  1344.         new key = -1;

  1345.         switch(type)

  1346.         {

  1347.                 case OFFSET_TEAM: key = OFFSET_TEAM;

  1348.                 case OFFSET_MONEY:

  1349.                 key = OFFSET_MONEY;

  1350.                 case OFFSET_DEATH: key = OFFSET_DEATH;

  1351.         }

  1352.         if(key != -1)

  1353.         {

  1354.                 if(is_amd64_server()) key += 25;

  1355.                 return get_pdata_int(id, key);

  1356.         }

  1357.         return -1;

  1358. }

  1359.  
[/pawn]
Аватара пользователя
razduw3
 
Сообщения: 1
Зарегистрирован: 20 ноя 2012, 14:21
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6