搜索
查看: 2880|回复: 6

激光镭射源码怎么改成只有敌人触碰才爆炸哪位大婶能看看

[复制链接]
发表于 2015-3-1 12:03:10 | 显示全部楼层 |阅读模式 来自 中国–山西–长治
本帖最后由 k1nader 于 2015-3-1 21:09 编辑

这个激光拌雷sma 自己人触碰到也会爆炸,哪位大婶能给看一下呢,怎么改成只有敌人触发才会爆炸,谢谢大家
[mw_shl_code=pawn,true]
/* Plugin generated by AMXX-Studio */

#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[]                 = "[Zhu Yi]",
        //STR_MINEDETNATED[]         = "Your mine has detonated.",
        //STR_MINEDETNATED2[]        = "detonated your mine.",
        STR_NOTACTIVE[]         = "NO",
        STR_DONTHAVEMINE[]        = "Qing An 'Z' Jian Gou Mai.",
        STR_CANTDEPLOY[]        = "Zhi you CT neng yong!",
        STR_MAXDEPLOY[]                = "Yi da xian zhi!.",
        STR_MANYPPL[]                = "Yi da xian zhi!...",
        STR_PLANTWALL[]                = "Bi xu an zhuang dao qiang shang.",
        STR_REF[]                = "NO",
        STR_CBT[]                = "Zhi you CT neng yong!",
        STR_HAVEMAX[]                = "Yi da xian zhi!",
        STR_NOMONEY[]                = "NI mei qian le! ($",
        STR_NEEDED[]                = "Jin Qian)",
        STR_DELAY[]                = "NO",
        STR_SECONDS[]                = "s",
        STR_BOUGHT[]                = "OK...Qing An 'C' an zhuang!",
        STR_STATE[]                = "Ji Guang Lei:";

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","1")
        g_LAMMO = register_cvar("amx_ltm_ammo","2")
        g_LDMG = register_cvar("amx_ltm_dmg","500")
        g_LCOST = register_cvar("amx_ltm_cost","50")
        g_LFMONEY = register_cvar("amx_ltm_fragmoney","1000")
        g_LHEALTH = register_cvar("amx_ltm_health","200")
        g_LTMAX = register_cvar("amx_ltm_teammax","12")
        g_LRADIUS = register_cvar("amx_ltm_radius","1000")
        g_LRDMG = register_cvar("amx_ltm_rdmg","600")
        g_LFF = register_cvar("amx_ltm_ff","0")
        g_LCBT = register_cvar("amx_ltm_cbt","CT")
        g_LDELAY = register_cvar("amx_ltm_delay","15")
        //g_LTHINK = register_cvar("amx_ltm_think","0.1")
        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;
}[/mw_shl_code]
 楼主| 发表于 2015-3-1 12:04:07 | 显示全部楼层 来自 中国–山西–长治
本帖最后由 k1nader 于 2015-3-1 21:08 编辑

[mw_shl_code=pawn,true]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;
        }

        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,"[Lasermine] 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;
}

[/mw_shl_code]
回复

使用道具 举报

 楼主| 发表于 2015-3-1 12:04:58 | 显示全部楼层 来自 中国–山西–长治
本帖最后由 k1nader 于 2015-3-1 21:08 编辑

[mw_shl_code=pawn,true]
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, "[Zhu Yi] %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, "[Zhu Yi] %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)

}[/mw_shl_code]
回复

使用道具 举报

 楼主| 发表于 2015-3-1 12:05:49 | 显示全部楼层 来自 中国–山西–长治
本帖最后由 k1nader 于 2015-3-1 21:07 编辑

[mw_shl_code=pawn,true]

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,"dafeiji")){
                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 dafeiji</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)
//        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;
}
[/mw_shl_code]
回复

使用道具 举报

发表于 2015-3-3 08:13:47 | 显示全部楼层 来自 中国–山东–淄博
额..插件设置的是只有CT能用,也就是说只要判定是CT队伍中的一员便可以了

在触发激光镭射爆炸的代码下添加判定语句
new userTeam = cs_get_user_team(id)
if(userTeam ==CS_TEAM_CT)
{
//这里填写不爆炸的语句
}else if{userTeam == CS_TEAM_T
//这里填写爆炸的语句
}
return PLUGIN_CONTINUE
回复

使用道具 举报

 楼主| 发表于 2015-3-4 11:55:34 | 显示全部楼层 来自 中国–山西–长治
FireRose 发表于 2015-3-3 08:13
额..插件设置的是只有CT能用,也就是说只要判定是CT队伍中的一员便可以了

在触发激光镭射爆炸的代码下添加 ...

你好,我是个菜鸟,请问可以可以帮我填进去吗,我填了一下都生成不了amxx呀,不会弄
回复

使用道具 举报

发表于 2015-3-5 07:42:23 | 显示全部楼层 来自 中国–山东–淄博
cz001aa 发表于 2015-3-4 11:55
你好,我是个菜鸟,请问可以可以帮我填进去吗,我填了一下都生成不了amxx呀,不会弄 ...

好的,我的QQ1452934560,把源码发给我我帮你改吧,不过我只有周六日有空
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表