Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Переделать плагин lasermine

Статус пользователя -=pypsic=-
сообщение 4.1.2011, 20:39
Сообщение #1


Стаж: 15 лет

Сообщений: 185
Благодарностей: 21
Полезность: < 0

Можно сделать так, чтоб не было комманд: /lasermine и /buy_lasermine
+ сделать чтоб лазерь можно было снять...
Также сделать так: Всем игрокам всегда давало 1/3 лазерей когда комманда победила с 1 по 3 место в комманде давало по 2/3 лазерей) а Админам 3/3... можно так сделать ?

lasermine.sma
Код
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <xs>
#include <cstrike>
//#include <fakemeta_util>
#define PLUGIN "Laser/TripMine Entity"
#define VERSION "2.0"
#define AUTHOR "SandStriker"

#define RemoveEntity(%1)    engfunc(EngFunc_RemoveEntity,%1)
//#define ACCESSLEVEL        ADMIN_LEVEL_H
#define TASK_PLANT        15100
#define TASK_RESET        15500

#define LASERMINE_INT_TEAM    pev_iuser1 //EV_INT_iuser1
#define LASERMINE_STEP        pev_iuser2
#define LASERMINE_OWNER        pev_iuser3 //EV_INT_iuser3
#define LASERMINE_POWERUP    pev_fuser1
#define LASERMINE_BEAMTHINK    pev_fuser2

#define LASERMINE_BEAMENDPOINT    pev_vuser1
//#define MAX_MINES        10
#define MODE_LASERMINE        0

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/v_tripmine.mdl",
    ENT_SOUND1[]    = "weapons/mine_deploy.wav",
    ENT_SOUND2[]    = "weapons/mine_charge.wav",
    ENT_SOUND3[]    = "weapons/mine_activate.wav",
    ENT_SOUND4[]    = "debris/beamstart9.wav",
    ENT_SOUND5[]    = "items/gunpickup2.wav",
    //ENT_SOUND6[]    = "weapons/mine_activate.wav",
    ENT_SPRITE1[]         = "sprites/laserbeam.spr",
    ENT_SPRITE2[]         = "sprites/zerogxplode.spr";

new const
    ENT_CLASS_NAME[]    = "lasermine",
    //ENT_CLASS_NAME2[]    = "info_target",
    ENT_CLASS_NAME3[]    = "func_breakable";

new const
    CHATTAG[]         = "",
    //STR_MINEDETNATED[]     = "Your mine has detonated.",
    //STR_MINEDETNATED2[]    = "взорвал твою мину",
    STR_NOTACTIVE[]     = "Мины не работают",
    STR_DONTHAVEMINE[]    = "У тебя нет мин",
    STR_CANTDEPLOY[]    = "Ты неможешь поставить мины",
    STR_MAXDEPLOY[]        = "Поставлено максимум мин",
    STR_MANYPPL[]        = "Много людей в твоей команде",
    STR_PLANTWALL[]        = "Устанавливать мину надо на стене, полу",
    STR_REF[]        = "Чтобы открыть помощь по минам напиши в чате lasermine",
    STR_CBT[]        = "твоя команда неможет покупать мины",
    STR_HAVEMAX[]        = "У тебя максимальное кол-во мин",
    STR_NOMONEY[]        = "У тебя нехватает денег, чтоб купить мину, надо ($",
    STR_NEEDED[]        = "Надо)",
    STR_DELAY[]        = "Ты неможешь покупать мины сейчас",
    STR_SECONDS[]        = "секунд",
    STR_BOUGHT[]        = "Ты купил мину",
    STR_STATE[]        = "Мины:";

new g_EntMine;
new beam, boom
new
    g_LENABLE,g_LFMONEY,g_LAMMO,g_LDMG,
    g_LTMAX,g_LCOST,g_LHEALTH,g_LMODE,g_LRADIUS,g_LRDMG,g_LFF,g_LCBT,
    g_LDELAY,/*g_LTHINK,*/g_LVISIBLE;

new g_dcount,g_nowtime,g_MaxPL
new bool:g_settinglaser[33]
new g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText;
new Float:plspeed[33]
new plsetting[33]
new g_havemine[33];
new g_deployed[33];

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    // Add your code here...
    register_clcmd("+setlaser","CreateLaserMine_Progress");
       register_clcmd("-setlaser","StopCreateLaserMine");
    register_clcmd("say","say_lasermine");
    register_clcmd("buy_lasermine","BuyLasermine");
    g_LENABLE = register_cvar("amx_ltm","1")

    g_LMODE = register_cvar("amx_ltm_mode","0")
    g_LAMMO = register_cvar("amx_ltm_ammo","2")
    g_LDMG = register_cvar("amx_ltm_dmg","10000")
    g_LCOST = register_cvar("amx_ltm_cost","0")
    g_LFMONEY = register_cvar("amx_ltm_fragmoney","300")
    g_LHEALTH = register_cvar("amx_ltm_health","500")
    g_LTMAX = register_cvar("amx_ltm_teammax","10")
    g_LRADIUS = register_cvar("amx_ltm_radius","200.0")
    g_LRDMG = register_cvar("amx_ltm_rdmg","1000")
    g_LFF = register_cvar("amx_ltm_ff","0")
    g_LCBT = register_cvar("amx_ltm_cbt","ALL")
    g_LDELAY = register_cvar("amx_ltm_delay","15")
    //g_LTHINK = register_cvar("amx_ltm_think","0.01")
    g_LVISIBLE = register_cvar("amx_ltm_line","1")
    
    register_event("DeathMsg", "DeathEvent", "a")
    register_event("CurWeapon", "standing", "be", "1=1")
    register_event("ResetHUD", "delaycount", "a")
    register_event("ResetHUD", "newround", "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" );
}

public plugin_precache()
{
    precache_sound(ENT_SOUND1);
    precache_sound(ENT_SOUND2);
    precache_sound(ENT_SOUND3);
    precache_sound(ENT_SOUND4);
    precache_sound(ENT_SOUND5);
    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")
    //require_module("fun")
}

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();
}

public delaycount()
{
    g_dcount = floatround(get_gametime())
}

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

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();


    new PID[1];
    PID[0] = id;
    set_task(1.2, "Spawn", (TASK_PLANT + id), PID, 1);

    return PLUGIN_HANDLED;
}

public StopCreateLaserMine(id)
{
    if (task_exists((TASK_PLANT + id)))
    {
        remove_task((TASK_PLANT + id));
    }
    g_settinglaser[id] = false

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

    return PLUGIN_HANDLED;
}

public Spawn( ids[] )
{
    new id = ids[0];
    // 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_pev(i_Ent,pev_health, float(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:{ -8.0, -8.0, -8.0 }, Float:{ 8.0, 8.0, 8.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_INT_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]--;
    g_settinglaser[id] = false
    ShowAmmo(id);
    return 1;
}

stock TeamDeployedCount(id)
{
    //new tid[32];
    
    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,"T")){
        num = CsTeam:CS_TEAM_T
    }
    else if(equali(arg,"CT")){
        num = CsTeam:CS_TEAM_CT
    }
    else if(equali(arg,"ALL")){
        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:CreateCheck( id )
{
    if( !get_pcvar_num( g_LENABLE ) )
    {
        client_print(id, print_chat, "%s %s",CHATTAG,STR_NOTACTIVE)
        return false
    }
    if(g_settinglaser[id] || task_exists((TASK_PLANT + id))) return false
    if(!is_user_alive(id)) return false
    if(!CheckTime()){
        client_print(id,print_chat, "%s %s %d %s",CHATTAG,STR_DELAY,get_pcvar_num(g_LDELAY)-g_nowtime,STR_SECONDS)
        return false
    }
    if(g_havemine[id] <= 0){
        client_print(id, print_chat, "%s %s",CHATTAG,STR_DONTHAVEMINE)
        return false
    }
    
    if (!CheckCanTeam(id))
    {
        client_print(id, print_chat, "%s %s",CHATTAG,STR_CANTDEPLOY)    
        return false
    }
    if (g_deployed[id] >= get_pcvar_num(g_LAMMO))  //unhandled error
    {
        client_print(id, print_chat, "%s %s",CHATTAG,STR_MAXDEPLOY)
        return false
    }
    //client_print(id,print_chat,"your team deployed %d",TeamDeployedCount(id))
    if(TeamDeployedCount(id) >= get_pcvar_num(g_LTMAX))
    {
        client_print(id, print_chat, "%s %s",CHATTAG,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 );

        //get_tr2( 0, TR_pHit );

        return true;
    }
    client_print(id, print_chat, "%s %s",CHATTAG,STR_PLANTWALL)
    g_settinglaser[id] = false
    // -- Did not touched something. (not solid)
    return false;
}

public ltm_Think( i_Ent )
{
    if ( !pev_valid( i_Ent ) )
        return FMRES_IGNORED;
    new EntityName[sizeof(ENT_CLASS_NAME)+1];
    static const size = sizeof(ENT_CLASS_NAME);
    pev( i_Ent, pev_classname, EntityName, size);
    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 );
            }

            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.
                pev( iHit, pev_classname, EntityName, size );

                if( !equal( EntityName, ENT_CLASS_NAME ) )
                {
                    set_pev( i_Ent, pev_enemy, iHit );
                    if(get_pcvar_num(g_LMODE) == MODE_LASERMINE)
                        CreateLaserDamage(i_Ent,iHit);
                    else
                        set_pev( i_Ent, LASERMINE_STEP, EXPLOSE_THINK );
                        
                    set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) );
                }
            }
                
            // -- Tripmine is still there.
            if ( pev_valid( i_Ent ) )
            {
                static Float:fHealth;
                pev( i_Ent, pev_health, fHealth );

                if( fHealth < 0 )
                {
                    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) && pev(i_Ent, LASERMINE_STEP) != EXPLOSE_THINK)
                {
                    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_num(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_INT_TEAM);
    switch(teamid){
        case 1:{
            tcolor[0] = 255
            tcolor[1] = 0
            tcolor[2] = 0
        }
        case 2:{
            tcolor[0] = 0
            tcolor[1] = 0
            tcolor[2] = 255
        }
    }
    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(11) //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(255)
    write_byte(255)
    message_end()
}

CreateDamage(iCurrent,DmgMAX,Float:Radius)
{
    new AtkID = pev(iCurrent,LASERMINE_OWNER)// entity_get_int(iCurrent,LASERMINE_OWNER)
    new TeamID= pev(iCurrent,LASERMINE_INT_TEAM) //entity_get_int(iCurrent,LASERMINE_INT_TEAM)
    new Player = -1;
    new Float:distance,dmg;
    new Float:tOrigin[3];
    new Float:vOrigin[3];
    new iHitHP,iHitTeam;
    pev(iCurrent,pev_origin,vOrigin);
    Player = engfunc(EngFunc_FindEntityInSphere,Player,vOrigin,Radius);
    while(Player != 0)
    {
        if(is_user_alive(Player))
        {
            pev(Player,pev_origin,tOrigin)
            distance = get_distance_f(vOrigin, tOrigin)
            dmg = floatround(DmgMAX - ((DmgMAX / Radius) * distance))
            iHitHP = pev_user_health(Player) - dmg
            iHitTeam = int:cs_get_user_team(Player)
            if(iHitHP <= 0)
            {
                if(iHitTeam != TeamID)
                {
                    cs_set_user_money(AtkID,cs_get_user_money(AtkID) + get_pcvar_num(g_LFMONEY))
                    set_score(AtkID,Player,1,iHitHP)
                }else
                {
                    if(get_pcvar_num(g_LFF))
                    {
                        cs_set_user_money(AtkID,cs_get_user_money(AtkID) - get_pcvar_num(g_LFMONEY))
                        set_score(AtkID,Player,-1,iHitHP)
                    }
                }
            }else
            {
                if(iHitTeam != TeamID || get_pcvar_num(g_LFF))
                {
                    //set_pev(Player,pev_health,iHitHP)
                    set_user_health(Player, iHitHP)
                    message_begin(MSG_ONE_UNRELIABLE, g_msgDamage, {0,0,0}, Player)
                    write_byte(dmg)
                    write_byte(dmg)
                    write_long(DMG_BULLET)
                    engfunc(EngFunc_WriteCoord,vOrigin[0])
                    engfunc(EngFunc_WriteCoord,vOrigin[1])
                    engfunc(EngFunc_WriteCoord,vOrigin[2])
                    message_end()
                }
            }
        }
        Player =  engfunc(EngFunc_FindEntityInSphere,Player,vOrigin,Radius)
    }
    return PLUGIN_CONTINUE
}

CreateExplosion(iCurrent)
{
    
    new Float:vOrigin[3]
    pev(iCurrent,pev_origin,vOrigin)
    //entity_get_vector(iCurrent, EV_VEC_origin, vOrigin)

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

    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    write_byte(3)
    engfunc(EngFunc_WriteCoord,vOrigin[0])
    engfunc(EngFunc_WriteCoord,vOrigin[1])
    engfunc(EngFunc_WriteCoord,vOrigin[2])
    write_short(boom)
    write_byte(50)
    write_byte(15)
    write_byte(0)
    message_end()
    /*
    if (iHit == -1)
    {
        client_print(id, print_chat, "%s %s",CHATTAG,STR_MINEDETNATED)
    } else
    {
        szNetName[0] = '^0'
        engfunc(EngFunc_AllocString,iHit,szNetName)
        //entity_get_string(iHit, EV_SZ_netname, szNetName, 32)
        client_print(id, print_chat, "%s %s %s",CHATTAG,szNetName,STR_MINEDETNATED2)
    }
    */
}

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

    //new isHit = fm_trace_line(iCurrent, vOrigin, vEnd, vTrace)
    new teamid = pev(iCurrent, LASERMINE_INT_TEAM)

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

    if(isHit < 0 ) return PLUGIN_CONTINUE
    
    szClassName[0] = '^0'
    pev(isHit,pev_classname,szClassName,32)
    
    if(equal(szClassName, "player"))
    {
        Alive = is_user_alive(isHit)
        God = get_user_godmode(isHit)
        if(!Alive || God) return PLUGIN_CONTINUE
            
        iHitTeam = int:cs_get_user_team(isHit)
        //iHitHP = entity_get_float(isHit,EV_FL_health) - float(LASER_HIT_DMG)
        iHitHP = pev_user_health(isHit) - get_pcvar_num(g_LDMG)
        id = pev(iCurrent,LASERMINE_OWNER)//, szNetName[32]
        if( get_pcvar_num(g_LMODE) == MODE_LASERMINE)
        {
            if(iHitHP <= 0)
            {
                if(iHitTeam != teamid)
                {
                    hitscore = 1
                    cs_set_user_money(id,cs_get_user_money(id) + get_pcvar_num(g_LFMONEY))
                    //set_user_health(iHit, 0)    
                    //entity_set_float(iHit, EV_FL_health,0.0)
                    emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM )
                    set_score(id,isHit,hitscore,iHitHP)
                    //entity_get_string(iHit, EV_SZ_netname, szNetName, 32)
                    //client_print(id, print_chat, "%s killed your mine.",szNetName)
                }else
                {
                    if(get_pcvar_num(g_LFF))
                    {
                        hitscore = -1                                    
                        cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(g_LFMONEY))
                        emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM )
                        set_score(id,isHit,hitscore,iHitHP)
                        //set_user_health(iHit, 0)
                        //entity_set_float(iHit, EV_FL_health, 0.0)
                        //entity_get_string(iHit, EV_SZ_netname, szNetName, 32)
                        //client_print(id, print_chat, "%s killed your mine.",szNetName)
                    }
                }
            }else if(iHitTeam != teamid || get_pcvar_num(g_LFF))
            {
                //entity_set_float(isHit,EV_FL_health,iHitHP)
                //set_user_health(isHit, iHitHP)
                set_user_health(isHit,iHitHP)
                message_begin(MSG_ONE_UNRELIABLE, g_msgDamage, {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
        {
            CreateExplosion(iCurrent)
            CreateDamage(iCurrent,get_pcvar_num(g_LRDMG),get_pcvar_float(g_LRADIUS))
            RemoveEntity(iCurrent);
        }
    }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)
    //set_user_frags(id, idfrags)
    //entity_set_float(id, EV_FL_frags, float(idfrags))
    
    new tarfrags = pev_user_frags(target) + 1 //get_user_frags(target) + 1
    set_user_frags(target,tarfrags)
    //set_user_frags(target,tarfrags)
    //entity_set_float(target, EV_FL_frags, float(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)

    //entity_set_float(target, EV_FL_health,float(HP))
    set_user_health(target, HP)
    //set_pev(target,pev_health,HP)

}

public BuyLasermine(id)
{    
    if( !get_pcvar_num( g_LENABLE )  ){
        client_print(id, print_chat, "%s %s",CHATTAG,STR_NOTACTIVE)
        return PLUGIN_CONTINUE
    }
    if (!CheckCanTeam(id))
    {
        client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT)    
        return PLUGIN_HANDLED
    }
    if (cs_get_user_money(id) < get_pcvar_num(g_LCOST)) {
        client_print(id, print_chat, "%s %s%d %s",CHATTAG, STR_NOMONEY,get_pcvar_num(g_LCOST),STR_NEEDED)    
        return PLUGIN_HANDLED
    }
    if (g_havemine[id] >= get_pcvar_num(g_LAMMO)){
        client_print(id, print_chat, "%s %s",CHATTAG,STR_HAVEMAX)    
        return PLUGIN_HANDLED
    }
    if(!CheckTime())
    {
        client_print(id,print_chat, "%s %s %d %s",CHATTAG,STR_DELAY,get_pcvar_num(g_LDELAY)-g_nowtime,STR_SECONDS)
        return PLUGIN_HANDLED
    }
    cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(g_LCOST))
    g_havemine[id]++;
    emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    client_print(id, print_chat, "%s %s",CHATTAG,STR_BOUGHT)
    ShowAmmo(id)
    return PLUGIN_HANDLED
}

ShowAmmo(id)
{
    new ammo[51]
    formatex(ammo, 50, "%s %i/%i",STR_STATE, 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, STR_REF)
}

public say_lasermine(id){
    new said[32]
    read_argv(1,said,31);
    if( !get_pcvar_num( g_LENABLE )  ){
//        client_print(id, print_chat, "%s Lasermines are not currently active.",CHATTAG)
        return PLUGIN_CONTINUE
    }
    
    if (equali(said,"/buy lasermine")||equali(said,"/lm")){
        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>Мины</b></p><br/><br/>")
        len += formatex(msg[len], SIZE - len, "<p>Ты можешь ставить мины на стены</p><br/>")
        len += formatex(msg[len], SIZE - len, "<p>Эти мины наносят повреждение врагам</p><br/><br/>")
        len += formatex(msg[len], SIZE - len, "<p><b>Команды мин</b></p><br/><br/>")
        len += formatex(msg[len], SIZE - len, "<p><b>Скажи /lm</b> чтобы купить мину</br>")
        len += formatex(msg[len], SIZE - len, "<b>lm</b> //bind ^"F2^" lm : нажми F2 для покупки мины<br/>")
        len += formatex(msg[len], SIZE - len, "<b>+setlaser</b> //bind v +setlaser : задержи v чтобы поставить мину<br/>")
        len += formatex(msg[len], SIZE - len, "</body></html>")
        show_motd(id, msg, "Помощь по минам")
        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)
//    ShowAmmo(id)

    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
}

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

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

public client_disconnect(id){
    if(!get_pcvar_num( g_LENABLE ))
        return PLUGIN_CONTINUE
    g_settinglaser[id] = false
    RemoveAllTripmines(id);
    return PLUGIN_CONTINUE
}


public newround(id){
    if(!get_pcvar_num( g_LENABLE ))
        return PLUGIN_CONTINUE
    pev(id, pev_maxspeed,plspeed[id])
    g_settinglaser[id] = false
    RemoveAllTripmines(id);
    return PLUGIN_CONTINUE
}

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

    new id = read_data(2)
    if (task_exists(TASK_PLANT+id))
        remove_task(TASK_PLANT+id)
    g_settinglaser[id] = false
    return PLUGIN_CONTINUE
}

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;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Rejiser
сообщение 4.1.2011, 22:53
Сообщение #2


Стаж: 15 лет

Сообщений: 2261
Благодарностей: 1068
Полезность: 870

Цитата
Переделать плагин lasermine

это приказ?
Деньги плати, переделаем
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя NickLesNick
сообщение 4.1.2011, 23:45
Сообщение #3


Стаж: 16 лет

Сообщений: 355
Благодарностей: 153
Полезность: 680

-=pypsic=-, ищи свободных волонтёров, которые за "спасибо" мб сделают...
Или ищи хорошего скриптера и "гони монету".
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя гога_95
сообщение 5.1.2011, 1:09
Сообщение #4
Стаж: 16 лет

Сообщений: 152
Благодарностей: 12
Полезность: 3

напиши сюда
http://amxmodx.su/forum/index.php
тут мне на одноератно ы плагинами помогали!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: