hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.05.23. 09:59



Jelenlévő felhasználók

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

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

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

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



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

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 10 hozzászólás ] 
Szerző Üzenet
 Hozzászólás témája: ZP_addon_dtcm
HozzászólásElküldve: 2010.06.11. 16:45 
Offline
Lelkes

Csatlakozott: 2010.03.12. 19:01
Hozzászólások: 21
Megköszönték neki: 1 alkalommal
HEllo!
Az amxmodx.org -on webcompiler Ezt írja ki egy sma ra.
"Your plugin failed to compile! Read the errors below:

Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team

/groups/amxmodx/tmp3/textd1IjV1.sma(36) : fatal error 100: cannot read from file: "zombieplague"

Compilation aborted.
1 Error.
"
Az sma -t is leírom és nemtudom miért nem egnedélyezi.
Lécci segítsetek!

Kód:
/*================================================================================

   [[ZP] Addon: Display the Current Mode
   Copyright (C) 2009 by meTaLiCroSS, Vińa del Mar, Chile
   
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
   
   In addition, as a special exception, the author gives permission to
   link the code of this program with the Half-Life Game Engine ("HL
   Engine") and Modified Game Libraries ("MODs") developed by Valve,
   L.L.C ("Valve"). You must obey the GNU General Public License in all
   respects for all of the code used other than the HL Engine and MODs
   from Valve. If you modify this file, you may extend this exception
   to your version of the file, but you are not obligated to do so. If
   you do not wish to do so, delete this exception statement from your
   version.
   
   ** Credits:
      
   - Exolent[jNr]: Big plugin optimization

=================================================================================*/

#include <amxmodx>
#include <zombieplague>

/*================================================================================
 [Customizations]
=================================================================================*/

// Hudmessage tag
new const hud_tag[] = "Jelenlegi mod: "

// Name for each Hudmessage Mode
new const mode_names[][] =
{
   "Varja kocsog!",      // No mode Started
   "H1N1 Mod",         // Normal Infection, single round
   "Nemesis mod",         // Nemesis Mode (zombie boss)
   "Tulelo mod",         // Survivor Mode (human boss)
   "Raj mod",         // Swarm round (no infections)
   "Tobbszoros H1N1 mod",      // Multiple Infection (like single round, but, more than 1 zombie)
   "Pestis mod",         // Plague round (nemesis & zombies vs. survivors & humans)
   "Ismeretlen mod"      // An unofficial mode (edited/created/modified by user)
}

// RGB Colors for each Hudmessage Mode
// See here some RGB Colors: http://web.njit.edu/~kevin/rgb.txt.html
new const rgb_hud_colors[sizeof(mode_names)][3] =
{
//   R   G   B
   {84,    84,    84},      // No mode Started
   {0,    191,    255},       // Normal Infection, single round
   {255,    0,    0},      // Nemesis Mode (zombie boss)
   {0,    0,    255},      // Survivor Mode (human boss)
   {255,    255,    0},      // Swarm round (no infections)
   {0,    255,    0},      // Multiple Infection (like single round, but, more than 1 zombie)
   {255,    0,    0},      // Plague round (nemesis & zombies vs. survivors & humans)
   {255,    255,    255}      // An unofficial mode (edited/created/modified by user)
}

// X Hudmessage Position ( --- )
const Float:HUD_MODE_X = 0.65

// Y Hudmessage Position ( ||| )
const Float:HUD_MODE_Y = 0.2

// Time at which the Hudmessage is displayed. (when user is puted into the Server)
const Float:START_TIME = 3.0

/*================================================================================
 Customization ends here! Yes, that's it. Editing anything beyond
 here is not officially supported. Proceed at your own risk...
=================================================================================*/

// Variables
new g_SyncHud, g_Mode

// Cvar pointers
new cvar_enable, cvar_central

public plugin_init()
{
   // Plugin Info
   register_plugin("[ZP] Addon: Display the Current Mode", "0.1.6", "meTaLiCroSS")
   
   // Round Start Event
   register_event("HLTV", "event_RoundStart", "a", "1=0", "2=0")
   
   // Enable Cvar
   cvar_enable = register_cvar("zp_display_mode", "1")
   
   // Server Cvar
   register_cvar("zp_addon_dtcm", "v0.1.6 by meTaLiCroSS", FCVAR_SERVER|FCVAR_SPONLY)
   
   // Variables
   g_SyncHud = CreateHudSyncObj()
   
   // Getting "zp_on" cvar
   if(cvar_exists("zp_on"))
      cvar_central = get_cvar_pointer("zp_on")
   
   // If Zombie Plague is not running (bugfix)
   if(!get_pcvar_num(cvar_central))
      pause("a")
}

public client_putinserver(id)
{
   // Setting Hud
   set_task(START_TIME, "mode_hud", id, _, _, "b")
}

public event_RoundStart()
{
   // Update var (no mode started / in delay)
   g_Mode = 0
}

public mode_hud(id)
{
   // If the Cvar isn't enabled
   if(!get_pcvar_num(cvar_enable))
      return;
   
   // Hud Options
   set_hudmessage(rgb_hud_colors[g_Mode][0], rgb_hud_colors[g_Mode][1], rgb_hud_colors[g_Mode][2], HUD_MODE_X, HUD_MODE_Y, 0, 6.0, 12.0)
   
   // Now the hud appears
   ShowSyncHudMsg(id, g_SyncHud, "%s%s", (g_Mode == 0 ? "" : hud_tag), mode_names[g_Mode])
}

public zp_round_started(mode, id)
{
   // Update var with Mode num
   g_Mode = mode
   
   // An unofficial mode
   if(!(1 <= mode < (sizeof(mode_names) - 1)))
      g_Mode = sizeof(mode_names) - 1
}

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{ rtf1 ansi deff0{ fonttbl{ f0 fnil Tahoma;}}n viewkind4 uc1 pard lang1034 f0 fs16 n par }
*/


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP_addon_dtcm
HozzászólásElküldve: 2010.06.11. 16:52 
Offline
Beavatott

Csatlakozott: 2010.04.25. 18:43
Hozzászólások: 85
Csak azért mert ott nem lehet megcsinálni a zombi pluginokat
próbáld meg ezzel:
http://www.amxmodx.crys.hu/site/downloa ... .b3nc3.rar
ha a programba kitallóztad az sma-t utána jöhet az include: "zombieplague.inc"
amit innen tudsz letölteni:
http://ddl2.data.hu/get/0/2643112/zombieplague.inc


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP_addon_dtcm
HozzászólásElküldve: 2010.06.11. 19:06 
Offline
Lelkes

Csatlakozott: 2010.03.12. 19:01
Hozzászólások: 21
Megköszönték neki: 1 alkalommal
Hello!
Csak ez az 1 inc file kell hozzá?
(most tanulom ki:D)


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP_addon_dtcm
HozzászólásElküldve: 2010.06.11. 19:25 
Offline
Beavatott

Csatlakozott: 2010.04.25. 18:43
Hozzászólások: 85
ehez a pluginhoz elég


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP_addon_dtcm
HozzászólásElküldve: 2010.06.11. 19:37 
Offline
Lelkes

Csatlakozott: 2010.03.12. 19:01
Hozzászólások: 21
Megköszönték neki: 1 alkalommal
Power!
Van egy bizonyos laser pluginom is és azt se tudom!
plugin:
Kód:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
#include <zombieplague>

#if AMXX_VERSION_NUM < 180
   #assert AMX Mod X v1.8.0 or greater library required!
#endif

#define PLUGIN "[ZP] LaserMine"
#define VERSION "2.8"
#define AUTHOR "SandStriker/Shidla/QuZ/DJ_WEST"

#define RemoveEntity(%1)   engfunc(EngFunc_RemoveEntity,%1)
#define TASK_PLANT         15100
#define TASK_RESET         15500
#define TASK_RELEASE      15900

#define LASERMINE_TEAM      pev_iuser1 //EV_INT_iuser1
#define LASERMINE_OWNER      pev_iuser2 //EV_INT_iuser3
#define LASERMINE_STEP      pev_iuser3
#define LASERMINE_HITING   pev_iuser4
#define LASERMINE_COUNT      pev_fuser1

#define LASERMINE_POWERUP   pev_fuser2
#define LASERMINE_BEAMTHINK   pev_fuser3

#define LASERMINE_BEAMENDPOINT   pev_vuser1
#define MAX_MINES         10
#define MODE_LASERMINE      0
#define OFFSET_TEAM         114
#define OFFSET_MONEY      115
#define OFFSET_DEATH      444

#define cs_get_user_team(%1)   CsTeams:get_offset_value(%1,OFFSET_TEAM)
#define cs_get_user_deaths(%1)   get_offset_value(%1,OFFSET_DEATH)

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


/*########### Цвета Мин и лазерных лучей ###########*/
// Цвет мины и лазера людей
new const
   Red_Hum      = 255,
   Green_Hum    = 255,
   Blue_Hum   = 255;

// Цвет мины и лазера зомби
new const
   Red_Zomb   = 0,
   Green_Zomb    = 255,
   Blue_Zomb   = 0;

// Цвет мины и лазера при режиме "zp_ltm_color 1"
new const
   Red_All      = 255,
   Green_All    = 0,
   Blue_All   = 0;
/*####### Цвета Мин и лазерных лучей (конец) #######*/

enum CsTeams {
CS_TEAM_UNASSIGNED = 0,
CS_TEAM_T = 1,
CS_TEAM_CT = 2,
CS_TEAM_SPECTATOR = 3
};

enum tripmine_e {
   TRIPMINE_IDLE1 = 0,
   TRIPMINE_IDLE2,
   TRIPMINE_ARM1,
   TRIPMINE_ARM2,
   TRIPMINE_FIDGET,
   TRIPMINE_HOLSTER,
   TRIPMINE_DRAW,
   TRIPMINE_WORLD,
   TRIPMINE_GROUND,
};

enum
{
   POWERUP_THINK,
   BEAMBREAK_THINK,
   EXPLOSE_THINK
};

enum
{
   POWERUP_SOUND,
   ACTIVATE_SOUND,
   STOP_SOUND
};

new const
   ENT_MODELS[]   = "models/zombie_plague/LaserMines/v_laser_mine.mdl",
   ENT_SOUND1[]   = "weapons/mine_deploy.wav",
   ENT_SOUND2[]   = "weapons/mine_charge.wav",
   ENT_SOUND3[]   = "weapons/mine_activate.wav",
   ENT_SOUND4[]   = "items/suitchargeok1.wav",
   ENT_SOUND5[]   = "items/gunpickup2.wav",
   ENT_SOUND6[]   = "debris/bustglass1.wav",
   ENT_SOUND7[]   = "debris/bustglass2.wav",
   ENT_SPRITE1[]   = "sprites/laserbeam.spr",
   ENT_SPRITE2[]   = "sprites/lm_explode.spr";

new const
   ENT_CLASS_NAME[]   =   "lasermine",
   ENT_CLASS_NAME3[]   =   "func_breakable",
   gSnarkClassName[]   =   "wpn_snark",   // Для совместимости с плагином "Snark"
   barnacle_class[]   =   "barnacle",      // Для совместимости с плагином "Barnacle"
   weapon_box[]      =   "weaponbox",
   item_thing[]      =   "item_thighpack",
   shield[]         =   "weapon_shield";

new g_EntMine, beam, boom
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
new g_LRDMG,g_LFF,g_LCBT, g_LDELAY, g_LVISIBLE, g_LSTAMMO, g_LACCESS, g_LGLOW, g_LDMGMODE, g_LCLMODE
new g_LCBRIGHT, g_LDSEC, g_LCMDMODE, g_LBUYMODE, g_LME;
new g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText;
new g_dcount[33],g_nowtime,g_MaxPL
new bool:g_settinglaser[33]
new Float:plspeed[33], plsetting[33], g_havemine[33], g_deployed[33];
//new CVAR_LMCost

public plugin_init()
{
   register_plugin(PLUGIN, VERSION, AUTHOR);

   // Регистрируем ExtraItem
   //CVAR_LMCost = get_cvar_pointer("zp_ltm_cost")
   //g_LME = zp_register_extra_item("Laser Mine", get_pcvar_num(CVAR_LMCost), ZP_TEAM_ANY)
   g_LME = zp_register_extra_item("Laser Mine", LMCost, ZP_TEAM_ANY)

   // Вызываем функцию Laser_TakeDamage при получении урона объектом ENT_CLASS_NAME3 (func_breakable)
   RegisterHam(Ham_TakeDamage, ENT_CLASS_NAME3, "Laser_TakeDamage")
   // Add your code here...
   register_clcmd("+setlaser","CreateLaserMine_Progress_b");
   register_clcmd("-setlaser","StopCreateLaserMine");
   register_clcmd("+dellaser","ReturnLaserMine_Progress");
   register_clcmd("-dellaser","StopReturnLaserMine");
   register_clcmd("say","say_lasermine");
   register_clcmd("buy_lasermine","BuyLasermine");

   g_LENABLE   = register_cvar("zp_ltm","1")
   g_LACCESS   = register_cvar("zp_ltm_acs","0") //0 all, 1 admin
   g_LMODE      = register_cvar("zp_ltm_mode","0") //0 lasermine, 1 tripmine
   g_LAMMO      = register_cvar("zp_ltm_ammo","5")
   g_LDMG      = register_cvar("zp_ltm_dmg","60") //laser hit dmg
   g_LCOST      = register_cvar("zp_ltm_cost","2")
   g_LFMONEY   = register_cvar("zp_ltm_fragmoney","1")
   g_LHEALTH   = register_cvar("zp_ltm_health","5")
   g_LTMAX      = register_cvar("zp_ltm_teammax","100")
   g_LRADIUS   = register_cvar("zp_ltm_radius","320.0")
   g_LRDMG      = register_cvar("zp_ltm_rdmg","100") //radius damage
   g_LFF      = register_cvar("zp_ltm_ff","0")
   g_LCBT      = register_cvar("zp_ltm_cbt","ALL")
   g_LDELAY   = register_cvar("zp_ltm_delay","0.1")
   g_LVISIBLE   = register_cvar("zp_ltm_line","1")
   g_LGLOW      = register_cvar("zp_ltm_glow","0")
   g_LCBRIGHT   = register_cvar("zp_ltm_bright","255")//laser line brightness.
   g_LCLMODE   = register_cvar("zp_ltm_color","0") //0 is team color,1 is green
   g_LDMGMODE   = register_cvar("zp_ltm_ldmgmode","0") //0 - frame dmg, 1 - once dmg, 2 - 1 second dmg
   g_LDSEC      = register_cvar("zp_ltm_ldmgseconds","1") //mode 2 only, damage / seconds. default 1 (sec)
   g_LSTAMMO   = register_cvar("zp_ltm_startammo","1")
   g_LBUYMODE   = register_cvar("zp_ltm_buymode","1");
   g_LCMDMODE   = register_cvar("zp_ltm_cmdmode","0");      //0 is +USE key, 1 is bind, 2 is each.
   g_LBEO      = register_cvar("zp_ltm_brokeenemy","1");
   g_NOROUND   = register_cvar("zp_ltm_noround","1");
   g_NEMROUND   = register_cvar("zp_ltm_nemround","1");
   g_SURVROUND   = register_cvar("zp_ltm_survround","1");

   register_event("DeathMsg", "DeathEvent", "a");
   register_event("CurWeapon", "standing", "be", "1=1");
   register_event("ResetHUD", "delaycount", "a");
   register_event("ResetHUD", "newround", "b");
   register_logevent("endround", 2, "0=World triggered", "1=Round_End");   // Регистрируем конец раунда
   register_event("Damage","CutDeploy_onDamage","b");
   g_msgDeathMsg   = get_user_msgid("DeathMsg");
   g_msgScoreInfo   = get_user_msgid("ScoreInfo");
   g_msgDamage      = get_user_msgid("Damage");
   g_msgStatusText = get_user_msgid("StatusText");

   // Forward.
   register_forward(FM_Think, "ltm_Think");
   register_forward(FM_PlayerPostThink, "ltm_PostThink");
   register_forward(FM_PlayerPreThink, "ltm_PreThink");

   // Регистируем файл языков
   register_dictionary("LaserMines.txt")
   register_cvar("Shidla", "[ZP] LaserMines v.2.8 Final", FCVAR_SERVER|FCVAR_SPONLY)
}

public plugin_precache()
{
   precache_sound(ENT_SOUND1);
   precache_sound(ENT_SOUND2);
   precache_sound(ENT_SOUND3);
   precache_sound(ENT_SOUND4);
   precache_sound(ENT_SOUND5);
   precache_sound(ENT_SOUND6);
   precache_sound(ENT_SOUND7);
   precache_model(ENT_MODELS);
   beam = precache_model(ENT_SPRITE1);
   boom = precache_model(ENT_SPRITE2);
   return PLUGIN_CONTINUE;
}

public plugin_modules()
{
   require_module("fakemeta");
   require_module("cstrike");
}

public plugin_cfg()
{
   g_EntMine = engfunc(EngFunc_AllocString,ENT_CLASS_NAME3);
   arrayset(g_havemine,0,sizeof(g_havemine));
   arrayset(g_deployed,0,sizeof(g_deployed));
   g_MaxPL = get_maxplayers();

   new file[64]; get_localinfo("amxx_configsdir",file,63);
   format(file, 63, "%s/zp_ltm_cvars_ap.cfg", file);
   if(file_exists(file)) server_cmd("exec %s", file), server_exec();
}

public Laser_TakeDamage(victim, inflictor, attacker, Float:f_Damage, bit_Damage)
{
   if(get_pcvar_num(g_LBEO))
   {
      new i_Owner

      // Получаем ID игрока, который поставил мину
      i_Owner = pev(victim, LASERMINE_OWNER)

      // Если команда того, кто поставил мину и того, кто атаковал совпадают
      if(CsTeams:pev(victim, LASERMINE_TEAM) == cs_get_user_team(attacker))
      // Если тот кто поставил мину, не совпадает с тем, кто ее атаковал, то прекращаем выполнение
      if(i_Owner != attacker)
         return HAM_SUPERCEDE
      return PLUGIN_CONTINUE
   }
   return PLUGIN_CONTINUE
}

public delaycount(id)
{
   g_dcount[id] = floatround(get_gametime());
}

bool:CheckTime(id)
{
   g_nowtime = floatround(get_gametime()) - g_dcount[id];
   if(g_nowtime >= get_pcvar_num(g_LDELAY))
      return true;
   return false;
}

public CreateLaserMine_Progress_b(id)
{
   if(get_pcvar_num(g_LCMDMODE) != 0)
      CreateLaserMine_Progress(id);
   return PLUGIN_HANDLED;
}

public CreateLaserMine_Progress(id)
{

   if(!CreateCheck(id))
      return PLUGIN_HANDLED;
   g_settinglaser[id] = true;

   message_begin(MSG_ONE, 108, {0,0,0}, id);
   write_byte(1);
   write_byte(0);
   message_end();

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

   return PLUGIN_HANDLED;
}

public ReturnLaserMine_Progress(id)
{

   if(!ReturnCheck(id))
      return PLUGIN_HANDLED;
   g_settinglaser[id] = true;

   message_begin(MSG_ONE, 108, {0,0,0}, id);
   write_byte(1);
   write_byte(0);
   message_end();

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

   return PLUGIN_HANDLED;
}

public StopCreateLaserMine(id)
{

   DeleteTask(id);
   message_begin(MSG_ONE, 108, {0,0,0}, id);
   write_byte(0);
   write_byte(0);
   message_end();

   return PLUGIN_HANDLED;
}

public StopReturnLaserMine(id)
{

   DeleteTask(id);
   message_begin(MSG_ONE, 108, {0,0,0}, id);
   write_byte(0);
   write_byte(0);
   message_end();

   return PLUGIN_HANDLED;
}

public ReturnMine(id)
{
   id -= TASK_RELEASE;
   new tgt,body,Float:vo[3],Float:to[3];
   get_user_aiming(id,tgt,body);
   if(!pev_valid(tgt)) return;
   pev(id,pev_origin,vo);
   pev(tgt,pev_origin,to);
   if(get_distance_f(vo,to) > 70.0) return;
   new EntityName[32];
   pev(tgt, pev_classname, EntityName, 31);
   if(!equal(EntityName, ENT_CLASS_NAME)) return;
   if(pev(tgt,LASERMINE_OWNER) != id) return;
   RemoveEntity(tgt);

   g_havemine[id] ++;
   g_deployed[id] --;
   emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
   ShowAmmo(id)

   return;
}

public Spawn(id)
{
   id -= TASK_PLANT
   // motor
   new i_Ent = engfunc(EngFunc_CreateNamedEntity,g_EntMine);
   if(!i_Ent)
   {
      client_print(id, print_chat,"[Laesrmine Debug] Can't Create Entity");
      return PLUGIN_HANDLED_MAIN;
   }
   set_pev(i_Ent,pev_classname,ENT_CLASS_NAME);

   engfunc(EngFunc_SetModel,i_Ent,ENT_MODELS);

   set_pev(i_Ent,pev_solid,SOLID_NOT);
   set_pev(i_Ent,pev_movetype,MOVETYPE_FLY);

   set_pev(i_Ent,pev_frame,0);
   set_pev(i_Ent,pev_body,3);
   set_pev(i_Ent,pev_sequence,TRIPMINE_WORLD);
   set_pev(i_Ent,pev_framerate,0);
   set_pev(i_Ent,pev_takedamage,DAMAGE_YES);
   set_pev(i_Ent,pev_dmg,100.0);
   set_user_health(i_Ent,get_pcvar_num(g_LHEALTH));
   new Float:vOrigin[3];
   new   Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
      Float:vTraceEnd[3],Float:vEntAngles[3];
   pev(id, pev_origin, vOrigin);
   velocity_by_aim(id, 128, vTraceDirection);
   xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
   engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
   new Float:fFraction;
   get_tr2(0, TR_flFraction, fFraction);

   // -- We hit something!
   if(fFraction < 1.0)
   {
      // -- Save results to be used later.
      get_tr2(0, TR_vecEndPos, vTraceEnd);
      get_tr2(0, TR_vecPlaneNormal, vNormal);
   }


   xs_vec_mul_scalar(vNormal, 8.0, vNormal);
   xs_vec_add(vTraceEnd, vNormal, vNewOrigin);

   engfunc(EngFunc_SetSize, i_Ent, Float:{ -4.0, -4.0, -4.0 }, Float:{ 4.0, 4.0, 4.0 });
   engfunc(EngFunc_SetOrigin, i_Ent, vNewOrigin);

   // -- Rotate tripmine.
   vector_to_angle(vNormal,vEntAngles);
   set_pev(i_Ent,pev_angles,vEntAngles);

   // -- Calculate laser end origin.
   new Float:vBeamEnd[3], Float:vTracedBeamEnd[3];
      
   xs_vec_mul_scalar(vNormal, 8192.0, vNormal);
   xs_vec_add(vNewOrigin, vNormal, vBeamEnd);

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

   get_tr2(0, TR_vecPlaneNormal, vNormal);
   get_tr2(0, TR_vecEndPos, vTracedBeamEnd);

   // -- Save results to be used later.
   set_pev(i_Ent, LASERMINE_OWNER, id);
   set_pev(i_Ent,LASERMINE_BEAMENDPOINT,vTracedBeamEnd);
   set_pev(i_Ent,LASERMINE_TEAM,int:cs_get_user_team(id));
   new Float:fCurrTime = get_gametime();

   set_pev(i_Ent,LASERMINE_POWERUP, fCurrTime + 2.5);
   set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK);
   set_pev(i_Ent,pev_nextthink, fCurrTime + 0.2);

   PlaySound(i_Ent,POWERUP_SOUND);
   g_deployed[id]++;
   g_havemine[id]--;
   DeleteTask(id);
   ShowAmmo(id);
   return 1;
}

stock TeamDeployedCount(id)
{
   static i;
   static CsTeams:t;t = cs_get_user_team(id);
   static cnt;cnt=0;

   for(i = 1;i <= g_MaxPL;i++)
   {
      if(is_user_connected(i))
         if(t == cs_get_user_team(i))
            cnt += g_deployed[i];
   }

   return cnt;
}

bool:CheckCanTeam(id)
{
   new arg[5],CsTeam:num;
   get_pcvar_string(g_LCBT,arg,3);
   if(equali(arg,"Z"))
   {
      num = CsTeam:CS_TEAM_T;
   }
   else if(equali(arg,"H"))
   {
      num = CsTeam:CS_TEAM_CT;
   }
   else if(equali(arg,"ALL") || equali(arg,"HZ") || equali(arg,"ZH"))
   {
      num = CsTeam:CS_TEAM_UNASSIGNED;
   }
   else
   {
      num = CsTeam:CS_TEAM_UNASSIGNED;
   }
   if(num != CsTeam:CS_TEAM_UNASSIGNED && num != CsTeam:cs_get_user_team(id))
      return false;
   return true;
}

bool:CanCheck(id,mode)   // Проверки: когда можно ставить мины
{
   if(!get_pcvar_num(g_LENABLE))
   {
      client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOTACTIVE")

      return false;
   }
   if(get_pcvar_num(g_LACCESS) != 0)
      if(!(get_user_flags(id) & ADMIN_IMMUNITY))
      {
         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOACCESS")
         return false;
      }
   if(!pev_user_alive(id)) return false;
   if(!CheckCanTeam(id))
   {
      client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_CBT")
      return false;
   }
   if(mode == 0)
   {
      if(g_havemine[id] <= 0)
      {
         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_DONTHAVEMINE")
         return false;
      }
   }
   if(mode == 1)
   {
      if(get_pcvar_num(g_LBUYMODE) == 0)
      {
         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_CANTBUY")
         return false;
      }
      if(g_havemine[id] >= get_pcvar_num(g_LAMMO))
      {
         client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_HAVEMAX")
         return false;
      }
      if(zp_get_user_ammo_packs(id) < get_pcvar_num(g_LCOST))
      {
         client_print(id, print_chat, "%L %L%d %L", id, "CHATTAG",id, "STR_NOMONEY",get_pcvar_num(g_LCOST),id, "STR_NEEDED")
         return false;
      }
   }
   if(!CheckTime(id))
   {
      client_print(id, print_chat, "%L %L %d %L", id, "CHATTAG",id, "STR_DELAY",get_pcvar_num(g_LDELAY)-g_nowtime,id, "STR_SECONDS")
      return false;
   }

   return true;
}

bool:ReturnCheck(id)
{
   if(!CanCheck(id,-1)) return false;
   if(g_havemine[id] + 1 > get_pcvar_num(g_LAMMO)) return false;
   new tgt,body,Float:vo[3],Float:to[3];
   get_user_aiming(id,tgt,body);
   if(!pev_valid(tgt)) return false;
   pev(id,pev_origin,vo);
   pev(tgt,pev_origin,to);
   if(get_distance_f(vo,to) > 70.0) return false;
   new EntityName[32];
   pev(tgt, pev_classname, EntityName, 31);
   if(!equal(EntityName, ENT_CLASS_NAME)) return false;
   if(pev(tgt,LASERMINE_OWNER) != id) return false;
   return true;
}

bool:CreateCheck(id)
{
   if(!CanCheck(id,0)) return false;

   // Проверка на разрешение
   if(!zp_has_round_started() && get_pcvar_num(g_NOROUND))
   {
      client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOROUND")
      return false;
   }

   if(zp_is_nemesis_round() && get_pcvar_num(g_NEMROUND))
   {
      client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NEMROUND")
      return false;
   }

   if(zp_is_survivor_round() && get_pcvar_num(g_SURVROUND))
   {
      client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_SURVROUND")
      return false;
   }

   if(g_deployed[id] >= get_pcvar_num(g_LAMMO))
   {
      client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_MAXDEPLOY")
      return false;
   }

   if(TeamDeployedCount(id) >= get_pcvar_num(g_LTMAX))
   {
      client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_MANYPPL")
      return false;
   }
   new Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3];
   pev(id, pev_origin, vOrigin);
   velocity_by_aim(id, 128, vTraceDirection);
   xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
   engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
   new Float:fFraction,Float:vTraceNormal[3];
   get_tr2(0, TR_flFraction, fFraction);
   // -- We hit something!
   if(fFraction < 1.0)
   {
      // -- Save results to be used later.
      get_tr2(0, TR_vecEndPos, vTraceEnd);
      get_tr2(0, TR_vecPlaneNormal, vTraceNormal);

      return true;
   }

   client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_PLANTWALL")
   DeleteTask(id);
   // -- Did not touched something. (not solid)
   return false;
}

public ltm_Think(i_Ent)
{
   if(!pev_valid(i_Ent))
      return FMRES_IGNORED;
   new EntityName[32];
   pev(i_Ent, pev_classname, EntityName, 31);
   if(!get_pcvar_num(g_LENABLE)) return FMRES_IGNORED;
   // -- Entity is not a tripmine, ignoring the next...
   if(!equal(EntityName, ENT_CLASS_NAME))
      return FMRES_IGNORED;

   static Float:fCurrTime;
   fCurrTime = get_gametime();

   switch(pev(i_Ent, LASERMINE_STEP))
   {
      case POWERUP_THINK :
      {
         new Float:fPowerupTime;
         pev(i_Ent, LASERMINE_POWERUP, fPowerupTime);

         if(fCurrTime > fPowerupTime)
         {
            set_pev(i_Ent, pev_solid, SOLID_BBOX);
            set_pev(i_Ent, LASERMINE_STEP, BEAMBREAK_THINK);

            PlaySound(i_Ent, ACTIVATE_SOUND);
         }
         if(get_pcvar_num(g_LGLOW)!=0)
         {
            if(get_pcvar_num(g_LCLMODE)==0)
            {
               switch (pev(i_Ent,LASERMINE_TEAM))
               {
                  // цвет лазера Зомби
                  case CS_TEAM_T: set_rendering(i_Ent,kRenderFxGlowShell,Red_Zomb,Green_Zomb,Blue_Zomb,kRenderNormal,5);
                  // цвет лазера Человека
                  case CS_TEAM_CT:set_rendering(i_Ent,kRenderFxGlowShell,Red_Hum,Green_Hum,Blue_Hum,kRenderNormal,5);
               }
            }else
            {
               // цвет лазера, если стоит "одинаковый для всех" цвет
               set_rendering(i_Ent,kRenderFxGlowShell,Red_All,Green_All,Blue_All,kRenderNormal,5);
            }
         }
         set_pev(i_Ent, pev_nextthink, fCurrTime + 0.1);
      }
      case BEAMBREAK_THINK :
      {
         static Float:vEnd[3],Float:vOrigin[3];
         pev(i_Ent, pev_origin, vOrigin);
         pev(i_Ent, LASERMINE_BEAMENDPOINT, vEnd);

         static iHit, Float:fFraction;
         engfunc(EngFunc_TraceLine, vOrigin, vEnd, DONT_IGNORE_MONSTERS, i_Ent, 0);

         get_tr2(0, TR_flFraction, fFraction);
         iHit = get_tr2(0, TR_pHit);

         // -- Something has passed the laser.
         if(fFraction < 1.0)
         {
            // -- Ignoring others tripmines entity.
            if(pev_valid(iHit))
            {
               pev(iHit, pev_classname, EntityName, 31);
               // Игнорим всякую хрень
               if(!equal(EntityName, ENT_CLASS_NAME) && !equal(EntityName, gSnarkClassName) && !equal(EntityName, barnacle_class) && !equal(EntityName, weapon_box) && !equal(EntityName, item_thing) && !equal(EntityName, shield))
               {
                  set_pev(i_Ent, pev_enemy, iHit);

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

                  if(get_pcvar_num(g_LMODE) == MODE_LASERMINE)
                     CreateLaserDamage(i_Ent,iHit);
                  else
                     if(get_pcvar_num(g_LFF) || CsTeams:pev(i_Ent,LASERMINE_TEAM) != cs_get_user_team(iHit))
                        set_pev(i_Ent, LASERMINE_STEP, EXPLOSE_THINK);

                  set_pev(i_Ent, pev_nextthink, fCurrTime + random_float(0.1, 0.3));
               }
            }
         }
         if(get_pcvar_num(g_LDMGMODE)!=0)
            if(pev(i_Ent,LASERMINE_HITING) != iHit)
               set_pev(i_Ent,LASERMINE_HITING,iHit);
 
         // -- Tripmine is still there.
         if(pev_valid(i_Ent))
         {
            static Float:fHealth;
            pev(i_Ent, pev_health, fHealth);

            if(fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME))
            {
            set_pev(i_Ent, LASERMINE_STEP, EXPLOSE_THINK);
            set_pev(i_Ent, pev_nextthink, fCurrTime + random_float(0.1, 0.3));
            }
                              
            static Float:fBeamthink;
            pev(i_Ent, LASERMINE_BEAMTHINK, fBeamthink);
                  
            if(fBeamthink < fCurrTime && get_pcvar_num(g_LVISIBLE))
            {
               DrawLaser(i_Ent, vOrigin, vEnd);
               set_pev(i_Ent, LASERMINE_BEAMTHINK, fCurrTime + 0.1);
            }
            set_pev(i_Ent, pev_nextthink, fCurrTime + 0.01);
         }
      }
      case EXPLOSE_THINK :
      {
         // -- Stopping entity to think
         set_pev(i_Ent, pev_nextthink, 0.0);
         PlaySound(i_Ent, STOP_SOUND);
         g_deployed[pev(i_Ent,LASERMINE_OWNER)]--;
         CreateExplosion(i_Ent);
         CreateDamage(i_Ent,get_pcvar_float(g_LRDMG),get_pcvar_float(g_LRADIUS))
         RemoveEntity   (i_Ent);
      }
   }

   return FMRES_IGNORED;
}

PlaySound(i_Ent, i_SoundType)
{
   switch (i_SoundType)
   {
      case POWERUP_SOUND :
      {
         emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND1, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
         emit_sound(i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, 0, PITCH_NORM);
      }
      case ACTIVATE_SOUND :
      {
         emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, 1, 75);
      }
      case STOP_SOUND :
      {
         emit_sound(i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, SND_STOP, PITCH_NORM);
         emit_sound(i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, SND_STOP, 75);
      }
   }
}

DrawLaser(i_Ent, const Float:v_Origin[3], const Float:v_EndOrigin[3])
{
   new tcolor[3];
   new teamid = pev(i_Ent, LASERMINE_TEAM);
   if(get_pcvar_num(g_LCLMODE) == 0)
   {
      switch(teamid){
         case 1:{
            // Цвет луча для Зомби
            tcolor[0] = Red_Zomb;
            tcolor[1] = Green_Zomb;
            tcolor[2] = Blue_Zomb;
         }
         case 2:{
            // Цвет луча для Человека
            tcolor[0] = Red_Hum;
            tcolor[1] = Green_Hum;
            tcolor[2] = Blue_Hum;
         }
      }
   }else
   {
      // Цвет луча для всез при режиме 1-н луч для всех
      tcolor[0] = Red_All;
      tcolor[1] = Green_All;
      tcolor[2] = Blue_All;
   }
   message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
   write_byte(TE_BEAMPOINTS);
   engfunc(EngFunc_WriteCoord,v_Origin[0]);
   engfunc(EngFunc_WriteCoord,v_Origin[1]);
   engfunc(EngFunc_WriteCoord,v_Origin[2]);
   engfunc(EngFunc_WriteCoord,v_EndOrigin[0]); //Random
   engfunc(EngFunc_WriteCoord,v_EndOrigin[1]); //Random
   engfunc(EngFunc_WriteCoord,v_EndOrigin[2]); //Random
   write_short(beam);
   write_byte(0);
   write_byte(0);
   write_byte(1);   //Life
   write_byte(5);   //Width
   write_byte(0);   //wave
   write_byte(tcolor[0]); // r
   write_byte(tcolor[1]); // g
   write_byte(tcolor[2]); // b
   write_byte(get_pcvar_num(g_LCBRIGHT));
   write_byte(255);
   message_end();
}

CreateDamage(iCurrent,Float:DmgMAX,Float:Radius)
{
   // Get given parameters
   new Float:vecSrc[3];
   pev(iCurrent, pev_origin, vecSrc);

   new AtkID =pev(iCurrent,LASERMINE_OWNER);
   new TeamID=pev(iCurrent,LASERMINE_TEAM);

   new ent = -1;
   new Float:tmpdmg = DmgMAX;

   new Float:kickback = 0.0;
   // Needed for doing some nice calculations :P
   new Float:Tabsmin[3], Float:Tabsmax[3];
   new Float:vecSpot[3];
   new Float:Aabsmin[3], Float:Aabsmax[3];
   new Float:vecSee[3];
   new trRes;
   new Float:flFraction;
   new Float:vecEndPos[3];
   new Float:distance;
   new Float:origin[3], Float:vecPush[3];
   new Float:invlen;
   new Float:velocity[3];
   new iHitHP,iHitTeam;
   // Calculate falloff
   new Float:falloff;
   if(Radius > 0.0)
   {
      falloff = DmgMAX / Radius;
   } else {
      falloff = 1.0;
   }
   // Find monsters and players inside a specifiec radius
   while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0)
   {
      if(!pev_valid(ent)) continue;
      if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
      {
         // Entity is not a player or monster, ignore it
         continue;
      }
      if(!pev_user_alive(ent)) continue;
      // Reset data
      kickback = 1.0;
      tmpdmg = DmgMAX;
      // The following calculations are provided by Orangutanz, THANKS!
      // We use absmin and absmax for the most accurate information
      pev(ent, pev_absmin, Tabsmin);
      pev(ent, pev_absmax, Tabsmax);
      xs_vec_add(Tabsmin,Tabsmax,Tabsmin);
      xs_vec_mul_scalar(Tabsmin,0.5,vecSpot);
      pev(iCurrent, pev_absmin, Aabsmin);
      pev(iCurrent, pev_absmax, Aabsmax);
      xs_vec_add(Aabsmin,Aabsmax,Aabsmin);
      xs_vec_mul_scalar(Aabsmin,0.5,vecSee);
      engfunc(EngFunc_TraceLine, vecSee, vecSpot, 0, iCurrent, trRes);
      get_tr2(trRes, TR_flFraction, flFraction);
      // Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD)
      if(flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent)
      {
         // Work out the distance between impact and entity
         get_tr2(trRes, TR_vecEndPos, vecEndPos);
         distance = get_distance_f(vecSrc, vecEndPos) * falloff;
         tmpdmg -= distance;
         if(tmpdmg < 0.0)
            tmpdmg = 0.0;
         // Kickback Effect
         if(kickback != 0.0)
         {
            xs_vec_sub(vecSpot,vecSee,origin);
            invlen = 1.0/get_distance_f(vecSpot, vecSee);

            xs_vec_mul_scalar(origin,invlen,vecPush);
            pev(ent, pev_velocity, velocity)
            xs_vec_mul_scalar(vecPush,tmpdmg,vecPush);
            xs_vec_mul_scalar(vecPush,kickback,vecPush);
            xs_vec_add(velocity,vecPush,velocity);
            if(tmpdmg < 60.0)
            {
               xs_vec_mul_scalar(velocity,12.0,velocity);
            } else {
               xs_vec_mul_scalar(velocity,4.0,velocity);
            }
            if(velocity[0] != 0.0 || velocity[1] != 0.0 || velocity[2] != 0.0)
            {
               // There's some movement todo :)
               set_pev(ent, pev_velocity, velocity)
            }
         }

         iHitHP = pev_user_health(ent) - floatround(tmpdmg)
         iHitTeam = int:cs_get_user_team(ent)
         if(iHitHP <= 0)
         {
            if(iHitTeam != TeamID)
            {
               zp_set_user_ammo_packs(AtkID,zp_get_user_ammo_packs(AtkID) + get_pcvar_num(g_LFMONEY))
               set_score(AtkID,ent,1,iHitHP)
            }else
            {
               if(get_pcvar_num(g_LFF))
               {
                  zp_set_user_ammo_packs(AtkID,zp_get_user_ammo_packs(AtkID) - get_pcvar_num(g_LFMONEY))
                  set_score(AtkID,ent,-1,iHitHP)
               }
            }
         }else
         {
            if(iHitTeam != TeamID || get_pcvar_num(g_LFF))
            {
               //set_pev(Player,pev_health,iHitHP)
               set_user_health(ent, iHitHP)
               engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},ent);
               write_byte(floatround(tmpdmg))
               write_byte(floatround(tmpdmg))
               write_long(DMG_BULLET)
               engfunc(EngFunc_WriteCoord,vecSrc[0])
               engfunc(EngFunc_WriteCoord,vecSrc[1])
               engfunc(EngFunc_WriteCoord,vecSrc[2])
               message_end()
            }
         }
      }
   }
   return
}

bool:pev_user_alive(ent)
{
   new deadflag = pev(ent,pev_deadflag);
   if(deadflag != DEAD_NO)
      return false;
   return true;
}

CreateExplosion(iCurrent)
{
   new Float:vOrigin[3];
   pev(iCurrent,pev_origin,vOrigin);

   message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
   write_byte(99); //99 = KillBeam
   write_short(iCurrent);
   message_end();

   engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin, 0);
   write_byte(TE_EXPLOSION);
   engfunc(EngFunc_WriteCoord,vOrigin[0]);
   engfunc(EngFunc_WriteCoord,vOrigin[1]);
   engfunc(EngFunc_WriteCoord,vOrigin[2]);
   write_short(boom);
   write_byte(30);
   write_byte(15);
   write_byte(0);
   message_end();
}

CreateLaserDamage(iCurrent,isHit)
{
   if(isHit < 0) return PLUGIN_CONTINUE
   switch(get_pcvar_num(g_LDMGMODE))
   {
      case 1:
      {
         if(pev(iCurrent,LASERMINE_HITING) == isHit)
            return PLUGIN_CONTINUE
      }
      case 2:
      {
         if(pev(iCurrent,LASERMINE_HITING) == isHit)
         {
            static Float:cnt
            static now,htime;now = floatround(get_gametime())

            pev(iCurrent,LASERMINE_COUNT,cnt)
            htime = floatround(cnt)
            if(now - htime < get_pcvar_num(g_LDSEC))
            {
               return PLUGIN_CONTINUE;
            }else{
               set_pev(iCurrent,LASERMINE_COUNT,get_gametime())
            }
         }else
         {
            set_pev(iCurrent,LASERMINE_COUNT,get_gametime())
         }
      }
   }

   new Float:vOrigin[3],Float:vEnd[3]
   pev(iCurrent,pev_origin,vOrigin)
   pev(iCurrent,pev_vuser1,vEnd)

   new teamid = pev(iCurrent, LASERMINE_TEAM)

   new szClassName[32]
   new Alive,God
   new iHitTeam,iHitHP,id
   new hitscore

   szClassName[0] = '^0'
   pev(isHit,pev_classname,szClassName,32)
   if((pev(isHit, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
   {
      Alive = pev_user_alive(isHit)
      God = get_user_godmode(isHit)
      if(!Alive || God) return PLUGIN_CONTINUE
      iHitTeam = int:cs_get_user_team(isHit)
      iHitHP = pev_user_health(isHit) - get_pcvar_num(g_LDMG)
      id = pev(iCurrent,LASERMINE_OWNER)//, szNetName[32]
      if(iHitHP <= 0)
      {
         if(iHitTeam != teamid)
         {
            emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
            hitscore = 1
            zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) + get_pcvar_num(g_LFMONEY))
            set_score(id,isHit,hitscore,iHitHP)
         }else
         {
            if(get_pcvar_num(g_LFF))
            {
               emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
               hitscore = -1
               zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) - get_pcvar_num(g_LFMONEY))
               set_score(id,isHit,hitscore,iHitHP)
            }
         }
      }else if(iHitTeam != teamid || get_pcvar_num(g_LFF))
      {
         emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
         set_user_health(isHit,iHitHP)
         set_pev(iCurrent,LASERMINE_HITING,isHit);
         engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},isHit);
         write_byte(get_pcvar_num(g_LDMG))
         write_byte(get_pcvar_num(g_LDMG))
         write_long(DMG_BULLET)
         engfunc(EngFunc_WriteCoord,vOrigin[0])
         engfunc(EngFunc_WriteCoord,vOrigin[1])
         engfunc(EngFunc_WriteCoord,vOrigin[2])
         message_end()
      }
   }else if(equal(szClassName, ENT_CLASS_NAME3))
   {
      new hl;
      hl = pev_user_health(isHit);
      set_user_health(isHit,hl-get_pcvar_num(g_LDMG));
   }
   return PLUGIN_CONTINUE
}

stock pev_user_health(id)
{
   new Float:health
   pev(id,pev_health,health)
   return floatround(health)
}

stock set_user_health(id,health)
{
   health > 0 ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id);
}

stock get_user_godmode(index) {
   new Float:val
   pev(index, pev_takedamage, val)

   return (val == DAMAGE_NO)
}

stock set_user_frags(index, frags)
{
   set_pev(index, pev_frags, float(frags))

   return 1
}

stock pev_user_frags(index)
{
   new Float:frags;
   pev(index,pev_frags,frags);
   return floatround(frags);
}

set_score(id,target,hitscore,HP){

   new idfrags = pev_user_frags(id) + hitscore// get_user_frags(id) + hitscore
   set_user_frags(id,idfrags)
   new tarfrags = pev_user_frags(target) + 1 //get_user_frags(target) + 1
   set_user_frags(target,tarfrags)
   new idteam = int:cs_get_user_team(id)
   new iddeaths = cs_get_user_deaths(id)


   message_begin(MSG_ALL, g_msgDeathMsg, {0, 0, 0} ,0)
   write_byte(id)
   write_byte(target)
   write_byte(0)
   write_string(ENT_CLASS_NAME)
   message_end()

   message_begin(MSG_ALL, g_msgScoreInfo)
   write_byte(id)
   write_short(idfrags)
   write_short(iddeaths)
   write_short(0)
   write_short(idteam)
   message_end()

   set_msg_block(g_msgDeathMsg, BLOCK_ONCE)

   set_user_health(target, HP)

}

public BuyLasermine(id)
{
   if(!CanCheck(id,1)) return PLUGIN_CONTINUE

   zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) - get_pcvar_num(g_LCOST))
   g_havemine[id]++;

   client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_BOUGHT")

   emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
   ShowAmmo(id)
   return PLUGIN_HANDLED
}

public zp_extra_item_selected(id, itemid)
{
   if(itemid == g_LME)
      {
      zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) + LMCost)
      BuyLasermine(id)
      }
   return PLUGIN_CONTINUE
}

ShowAmmo(id)
{
   new ammo[51]
   new PlugStat[ 555 char ];
   formatex(PlugStat, charsmax(PlugStat), "%L", LANG_PLAYER, "STR_STATE")
   formatex(ammo, 50, "%s %i/%i",PlugStat, g_havemine[id],get_pcvar_num(g_LAMMO))

   message_begin(MSG_ONE, g_msgStatusText, {0,0,0}, id)
   write_byte(0)
   write_string(ammo)
   message_end()
}

public showInfo(id)
{
   client_print(id, print_chat, "%L", id, "STR_REF")
}

public say_lasermine(id){
   new said[32]
   read_argv(1,said,31);
   if(!get_pcvar_num(g_LENABLE))
   {
      return PLUGIN_CONTINUE
   }
   if(equali(said,"/buy lasermine")||equali(said,"/lm")||equali(said,"buy_lasermine")){
      BuyLasermine(id)
   }else if(equali(said, "lasermine") || equali(said, "/lasermine")){
      const SIZE = 1024
      new msg[SIZE+1],len = 0;
      len += formatex(msg[len], SIZE - len, "<html><body>")
      len += formatex(msg[len], SIZE - len, "<p><b>LaserMine</b></p><br/><br/>")
      len += formatex(msg[len], SIZE - len, "<p>You can be setting the mine on the wall.</p><br/>")
      len += formatex(msg[len], SIZE - len, "<p>That laser will give what touched it damage.</p><br/><br/>")
      len += formatex(msg[len], SIZE - len, "<p><b>LaserMine Commands</b></p><br/><br/>")
      len += formatex(msg[len], SIZE - len, "<p><b>Say /buy lasermine</b> or <b>Say /lm</b> //buying lasermine<br/>")
      len += formatex(msg[len], SIZE - len, "<b>buy_lasermine</b> //bind ^"F2^" buy_lasermine : using F2 buying lasermine<br/>")
      len += formatex(msg[len], SIZE - len, "<b>+setlaser</b> //bind mouse3 +setlaser : using mouse3 set lasermine on wall<br/>")
      len += formatex(msg[len], SIZE - len, "</body></html>")
      show_motd(id, msg, "Lasermine Entity help")
      return PLUGIN_CONTINUE
   }
   else if(containi(said, "laser") != -1) {
      showInfo(id)
      return PLUGIN_CONTINUE
   }
   return PLUGIN_CONTINUE
}

public standing(id)
{
   if(!g_settinglaser[id])
      return PLUGIN_CONTINUE

   set_pev(id, pev_maxspeed, 1.0)

   return PLUGIN_CONTINUE
}

public ltm_PostThink(id)
{
   if(!g_settinglaser[id] && plsetting[id]){
      resetspeed(id)
   }
   else if(g_settinglaser[id] && !plsetting[id]) {
      pev(id, pev_maxspeed,plspeed[id])
      set_pev(id, pev_maxspeed, 1.0)
   }
   plsetting[id] = g_settinglaser[id]
   return FMRES_IGNORED
}

public ltm_PreThink(id)
{
   if(!pev_user_alive(id) || g_settinglaser[id] == true || is_user_bot(id) || get_pcvar_num(g_LCMDMODE) == 1)
      return FMRES_IGNORED;

   if(pev(id, pev_button) & IN_USE && !(pev(id, pev_oldbuttons) & IN_USE))
      CreateLaserMine_Progress(id)
   return FMRES_IGNORED;
}

resetspeed(id)
{
   set_pev(id, pev_maxspeed, plspeed[id])
}

public client_putinserver(id){
   g_deployed[id] = 0;
   g_havemine[id] = 0;
   DeleteTask(id);
   return PLUGIN_CONTINUE
}

public client_disconnect(id){
   if(!get_pcvar_num(g_LENABLE))
      return PLUGIN_CONTINUE
   DeleteTask(id);
   RemoveAllTripmines(id);
   return PLUGIN_CONTINUE
}


public newround(id){
   if(!get_pcvar_num(g_LENABLE))
      return PLUGIN_CONTINUE
   pev(id, pev_maxspeed,plspeed[id])
   DeleteTask(id);
   RemoveAllTripmines(id);
   //client_print(id, print_chat, "[ZP][LM][DeBug] All Mines removied!");
   delaycount(id);
   SetStartAmmo(id);
   return PLUGIN_CONTINUE
}

public endround(id)
{
   if(!get_pcvar_num(g_LENABLE))
      return PLUGIN_CONTINUE

   // Удаление мин после конца раунда
   DeleteTask(id);
   RemoveAllTripmines(id);

   return PLUGIN_CONTINUE
}

public DeathEvent(){
   if(!get_pcvar_num(g_LENABLE))
      return PLUGIN_CONTINUE

   new id = read_data(2)
   if(is_user_connected(id)) DeleteTask(id);
   return PLUGIN_CONTINUE
}

public RemoveAllTripmines(i_Owner)
{
   new iEnt = g_MaxPL + 1;
   new clsname[32];
   while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", ENT_CLASS_NAME)))
   {
      if(i_Owner)
      {
         if(pev(iEnt, LASERMINE_OWNER) != i_Owner)
            continue;
         clsname[0] = '^0'
         pev(iEnt, pev_classname, clsname, sizeof(clsname)-1);
         if(equali(clsname, ENT_CLASS_NAME))
         {
            PlaySound(iEnt, STOP_SOUND);
            RemoveEntity(iEnt);
         }
      }
      else
         set_pev(iEnt, pev_flags, FL_KILLME);
   }
   g_deployed[i_Owner]=0;
}

SetStartAmmo(id)
{
   new stammo = get_pcvar_num(g_LSTAMMO);
   if(stammo <= 0) return PLUGIN_CONTINUE;
   g_havemine[id] = (g_havemine[id] <= stammo) ? stammo : g_havemine[id];
   return PLUGIN_CONTINUE;
}

public CutDeploy_onDamage(id)
{
   if(get_user_health(id) < 1)
      DeleteTask(id);
}

DeleteTask(id)
{
   if(task_exists((TASK_PLANT + id)))
   {
      remove_task((TASK_PLANT + id))
   }
   if(task_exists((TASK_RELEASE + id)))
   {
      remove_task((TASK_RELEASE + id))
   }
   g_settinglaser[id] = false
   return PLUGIN_CONTINUE;
}

stock set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
   static Float:RenderColor[3];
   RenderColor[0] = float(r);
   RenderColor[1] = float(g);
   RenderColor[2] = float(b);

   set_pev(entity, pev_renderfx, fx);
   set_pev(entity, pev_rendercolor, RenderColor);
   set_pev(entity, pev_rendermode, render);
   set_pev(entity, pev_renderamt, float(amount));

   return 1
}

// Gets offset data
get_offset_value(id, type)
{
   new key = -1;
   switch(type)
   {
      case OFFSET_TEAM: key = OFFSET_TEAM;
      case OFFSET_MONEY:
      key = OFFSET_MONEY;
      case OFFSET_DEATH: key = OFFSET_DEATH;
   }
   if(key != -1)
   {
      if(is_amd64_server()) key += 25;
      return get_pdata_int(id, key);
   }
   return -1;
}



És ezt írja ki:
1 error
could not locate output file compiled\zp_lasermin_28.amx <compile faled>.
cstrike/addons/amxmodx/scripting/include/xs.inc
ez mi?


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP_addon_dtcm
HozzászólásElküldve: 2010.06.11. 19:57 
Offline
Beavatott

Csatlakozott: 2010.04.25. 18:43
Hozzászólások: 85
nekem nem ír ilyet de az xs include kell neki
ami nincs ebbe a mappába:
cstrike/addons/amxmodx/scripting/include/xs.inc

innen letöltheted:
http://ddl.data.hu/get/0/2643549/xs.inc

de nekem van ilyesmi lézer pluginom lefordítva magyarra ha kell írj és felrakom az oldalra


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP_addon_dtcm
HozzászólásElküldve: 2010.06.12. 13:13 
Offline
Lelkes

Csatlakozott: 2010.03.12. 19:01
Hozzászólások: 21
Megköszönték neki: 1 alkalommal
Figyelj felvennél skype-ra vagy msn-re?
most ezt irja ki:
1 error.
colud not locate output file compiled\zp_lasermine.amx<compile faled>.


Skype:buza.attila
Msn:atinka@windowlive.com

Előre is köszi!
U.I.:A laser-re


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP_addon_dtcm
HozzászólásElküldve: 2010.06.12. 13:17 
Offline
Lelkes

Csatlakozott: 2010.03.12. 19:01
Hozzászólások: 21
Megköszönték neki: 1 alkalommal
Lécci Rakd fel de Kerek és Fehéren meg zölden világít?
Ha igen pls rakd fel.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP_addon_dtcm
HozzászólásElküldve: 2010.06.13. 20:11 
Offline
Beavatott

Csatlakozott: 2010.04.25. 18:43
Hozzászólások: 85
Msn-re felvettelek.


Hozzászólás jelentése
Vissza a tetejére
   
 Hozzászólás témája: Re: ZP_addon_dtcm
HozzászólásElküldve: 2010.06.15. 19:33 
Offline
Lelkes

Csatlakozott: 2010.03.12. 19:01
Hozzászólások: 21
Megköszönték neki: 1 alkalommal
Oké köszi :)


TÉMA LEZÁRVA!


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


Ki van itt

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