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

при убийстве лазером считается как убийство ножом

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

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

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

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

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

Re: при убийстве лазером считается как убийство ножом

Сообщение DeMNiX » 20 май 2018, 13:17

Достаточно бит изменить на TakeDamage
к тому же, в ExecuteHamB TakeDamage инфликтором может быть игрок, если задан след.код:
Код: Выделить всё
ExecuteHamB(Ham_TakeDamagevictimattackerattackerdamagedmgbits

и тут уж определи с какого оружия был убит игрок. Либо биты задавать особые, либо ставить верный инфликтор
Работа с моделями для кс 1.6
Telegram @DeMNiX
vk com/sbalburov
Аватара пользователя
DeMNiX
 
Сообщения: 177
Зарегистрирован: 24 сен 2011, 17:48
Благодарил (а): 25 раз.
Поблагодарили: 37 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: при убийстве лазером считается как убийство ножом

Сообщение Ternopil62000 » 20 май 2018, 14:31

DeMNiX писал(а):Весь код лазера дай для начала

Вот
Код: Выделить всё
#define Mine_Model "models/v_tripmine.mdl"
#define Mine_Sprite_Laser_CT "sprites/lasermine_ct.spr"
#define Mine_Sprite_Laser_T "sprites/lasermine_t.spr"
#define Mine_Sprite_Explo "sprites/zerogxplode.spr"
#define Mine_Sprite_Explo_Extra "sprites/nhth1.spr"

#define Mine_Sound_Placed "weapons/mine_deploy.wav"
#define Mine_Sound_Loading "weapons/mine_charge.wav"
#define Mine_Sound_Activate "weapons/mine_activate.wav"
#define Mine_Sound_Hit "items/suitchargeok1.wav"

#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <hamsandwich>
#include <xs>
#include <dhudmessage>
#include dm_chat

native dm_get_user_money(id)
native dm_set_user_money(id, set)
native get_user_hero(id)

new g_Entity_Mine
new g_iBeam_T
, g_iBeam_CT

new bool
:g_bSettingMine[33]
new g_iMine[33], g_iCountMines[33]
new g_iCvar[7]
new g_iSPR_Explo, g_iSPR_Explo2
new Float
:g_fOldSpeed[33]

public plugin_precache()
{
    precache_model(Mine_Model)
    g_iBeam_CT=precache_model(Mine_Sprite_Laser_CT)
    g_iBeam_T=precache_model(Mine_Sprite_Laser_T)
    g_iSPR_Explo=precache_model(Mine_Sprite_Explo)
    g_iSPR_Explo2=precache_model(Mine_Sprite_Explo_Extra)
    
    precache_sound
(Mine_Sound_Placed)
    precache_sound(Mine_Sound_Loading)
    precache_sound(Mine_Sound_Activate)
    precache_sound(Mine_Sound_Hit)
}

public plugin_natives()
{
    register_native("lm_start_placing", "native_start_placing")
    register_native("delete_lm", "delete_lm", 1)
}

public native_start_placing(plugin_id, num_params)
{
    new id = get_param(1)
    
    if 
(!((<= id <= 32)))
    {
        log_error(AMX_ERR_NATIVE, "[LM] Invalid Player (%d)", id)
        return
    
}
    
    clcmd_setlaser_plus
(id)
}

public plugin_init()
{
    register_clcmd("+setlaser","clcmd_setlaser_plus")
    register_clcmd("-setlaser","clcmd_setlaser_minus")
    
    RegisterHam
(Ham_TakeDamage, "func_breakable", "Laser_TakeDamage")
    
    RegisterHam
(Ham_Killed, "player", "ham_killed_post", 1)
    
    register_forward
(FM_PlayerPreThink, "fm_playerprethink")
    
    register_think
("Laser_Mine", "think_laser_mine")
    
    g_iCvar
[0]=register_cvar("lm_damage","1")
    g_iCvar[1]=register_cvar("lm_health","1000")
    g_iCvar[2]=register_cvar("lm_reward", "0")
    g_iCvar[3]=register_cvar("lm_max", "4")
    g_iCvar[4]=register_cvar("lm_explo_effect","0")
    g_iCvar[5]=register_cvar("lm_glow","0")
}

public plugin_cfg()
{
    g_Entity_Mine = engfunc(EngFunc_AllocString, "func_breakable")
    
    new file
[128]; get_localinfo("amxx_configsdir",file,63)
    format(file, 127, "%s/test_cvars/lasermines.cfg", file)
    if(file_exists(file)) server_cmd("exec %s", file), server_exec()
}

public clcmd_setlaser_plus(id)
{
    if(!is_user_alive(id)) return PLUGIN_HANDLED
    
    if
(get_user_hero(id))
    {
        colored_print(id, "!tНедоступно для героя")
        return PLUGIN_HANDLED
    
}
    
    if
(dm_get_user_money(id)<800)
    {
        colored_print(id, "!tНедостаточно денег !g(нужно 800$)")
        return PLUGIN_HANDLED
    
}
    
    if
(g_iCountMines[id]>=get_pcvar_num(g_iCvar[3]))
    {
        colored_print(id, "!tУстановлено максимум лазеров!")
        return PLUGIN_HANDLED
    
}
    
    if
(!create(id)) return PLUGIN_HANDLED
    pev
(id, pev_maxspeed, g_fOldSpeed[id])
    set_pev(id, pev_maxspeed, 1.0)
    g_bSettingMine[id]=true
    
    message_begin
(MSG_ONE, 108, _, id)
    write_byte(1)
    write_byte(0)
    message_end()
    
    set_task
(1.05, "Task_Spawn_Mine", id+777)
    
    return PLUGIN_HANDLED
}

public Task_Spawn_Mine(taskid)
{
    new id=taskid-777
    
    new i_Ent
=g_iMine[id]
    
    if
(get_pcvar_num(g_iCvar[5]))
    {
        switch(pev(i_Ent, pev_iuser1))
        {
            case 1: fm_set_rendering(i_Ent,kRenderFxGlowShell,200,50,50,kRenderNormal,5)
            case 2: fm_set_rendering(i_Ent,kRenderFxGlowShell,50,50,200,kRenderNormal,5)
        }
    } else{
        fm_set_rendering(i_Ent)
    }
    
    emit_sound
(i_Ent, CHAN_VOICE, Mine_Sound_Placed, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
    emit_sound(i_Ent, CHAN_BODY , Mine_Sound_Loading, 0.2, ATTN_NORM, 0, PITCH_NORM)
    
    g_bSettingMine
[id]=false
    set_pev
(id, pev_maxspeed, g_fOldSpeed[id])
    
    g_iCountMines
[id]++
    
    dm_set_user_money
(id, dm_get_user_money(id)-70)
    
    set_pev
(i_Ent, pev_nextthink, get_gametime()+1.0)
}

public clcmd_setlaser_minus(id)
{
    if(!g_bSettingMine[id]) return PLUGIN_HANDLED
    
    g_bSettingMine
[id]=false
    
    set_pev
(id, pev_maxspeed, g_fOldSpeed[id])
    
    remove_task
(id+777)
    
    new i_Ent
=g_iMine[id]
    
    if
(pev_valid(i_Ent)) engfunc(EngFunc_RemoveEntity, i_Ent)
    
    message_begin
(MSG_ONE, 108, _, id)
    write_byte(0)
    write_byte(0)
    message_end()
    
    return PLUGIN_HANDLED
}

public client_putinserver(id)
{
    set_task(1.0, "Task_Informer", id+666)
}

public Task_Informer(taskid)
{
    new id=taskid-666
    
    set_task
(1.0, "Task_Informer", taskid)
    
    if
(!is_user_alive(id))return
    
    new target
, body
    get_user_aiming
(id, target, body, 9999)
    
    static ClassName
[32]
    pev(target, pev_classname, ClassName, charsmax(ClassName))
    if (equal(ClassName, "Laser_Mine")) 
    
{
        if(fm_cs_get_user_team(id)!=pev(target, pev_iuser1)) return
        
        new Float
:Health
        pev
(target, pev_health, Health)
        new Name[32]
        get_user_name(pev(target, pev_iuser2),Name,31)
        
        set_dhudmessage
(200, 50, 52, -1.0, 0.60, 0, 0.0, 1.0, 0.01, 0.01)
        show_dhudmessage(id, "Установил: %s^nУбийств: %d^nЖизни: %d", Name, pev(target, pev_iuser3), floatround(Health))
    }
}


public ham_killed_post(id)
{
    if(g_iCountMines[id]>0)
    {
        Cycle_delete_mines(id)
    }
}

public client_disconnect(id)
{
    if(g_iCountMines[id]>0)
    {
        Cycle_delete_mines(id)
    }
}

public delete_lm(id)
{
    if(g_iCountMines[id]>0)
    {
        Cycle_delete_mines(id)
    }
}

public fm_playerprethink(id)
{
    if(g_bSettingMine[id])
    {
        if(setting(id)) set_pev(id, pev_maxspeed, 1.0)
    }
}

stock setting(id)
{
    new i_Ent=g_iMine[id]
    
    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)
    vOrigin[2]+=16.0
    
    velocity_by_aim
(id, 76, vTraceDirection)
    
    xs_vec_add
(vTraceDirection, vOrigin, vTraceEnd)
    new ptr = create_tr2()
    engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, ptr)
    
    new Float
:fFraction
    get_tr2
(ptr, TR_flFraction, fFraction)
    new iHit = get_tr2(ptr, TR_pHit);

    if(fFraction < 1.0) {
        if(is_user_connected(iHit)&&is_user_alive(iHit)) {
            clcmd_setlaser_minus(id)
            return false
        
}
        
        if
(pev_valid(iHit)) {
            static ClassName[32]
            pev(iHit, pev_classname, ClassName, charsmax(ClassName))
            if (equal(ClassName, "Laser_Mine")) {
                //clcmd_setlaser_minus(id)
                return false
            
}
        }

        get_tr2(ptr, TR_vecEndPos, vTraceEnd)
        get_tr2(ptr, TR_vecPlaneNormal, vNormal)
    } else {
        clcmd_setlaser_minus(id)
        return false
    
}

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

    engfunc(EngFunc_SetOrigin, i_Ent, vNewOrigin)

    vector_to_angle(vNormal,vEntAngles)
    set_pev(i_Ent,pev_angles,vEntAngles)
    
    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)
    
    set_pev
(i_Ent,pev_vuser1,vTracedBeamEnd)
    
    return true
}

public create(id)
{
    new i_Ent = engfunc(EngFunc_CreateNamedEntity,g_Entity_Mine)
    
    if
(!i_Ent) return 0
    
    g_iMine
[id]=i_Ent

    set_pev
(i_Ent, pev_classname, "Laser_Mine")
    engfunc(EngFunc_SetModel, i_Ent, Mine_Model)
    
    set_pev
(i_Ent, pev_solid, SOLID_TRIGGER)
    set_pev(i_Ent, pev_movetype, MOVETYPE_FLY)
    
    engfunc
(EngFunc_SetSize, i_Ent, Float:{ -4.0, -4.0, -4.0 }, Float:{ 4.0, 4.0, 4.0 })
    
    fm_set_rendering
(i_Ent, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 200)

    set_pev(i_Ent, pev_frame, 0)
    set_pev(i_Ent, pev_body, 3)
    set_pev(i_Ent, pev_sequence, 7)
    set_pev(i_Ent, pev_framerate, 0)
    set_pev(i_Ent, pev_takedamage, DAMAGE_NO)
    
    set_pdata_int
(i_Ent, 36, 6, 4)
    
    set_pev
(i_Ent, pev_iuser1, fm_cs_get_user_team(id))
    
    set_pev
(i_Ent, pev_health, get_pcvar_float(g_iCvar[1]))
    
    set_pev
(i_Ent, pev_iuser2, id)
    
    if
(!setting(id)){
        engfunc(EngFunc_RemoveEntity, i_Ent)
        return 0
    
}
    return 1
}

stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
    static Float:color[3]
    color[0] = float(r)
    color[1] = float(g)
    color[2] = float(b)
    
    set_pev
(entity, pev_renderfx, fx)
    set_pev(entity, pev_rendercolor, color)
    set_pev(entity, pev_rendermode, render)
    set_pev(entity, pev_renderamt, float(amount))
}

public think_laser_mine(i_Ent)
{
    if(!pev_valid(i_Ent)) return
    
    static Float
:vOrigin[3]
    pev(i_Ent, pev_origin, vOrigin)
    
    if
(pev(i_Ent, pev_takedamage)== DAMAGE_NO)
    {
        new victim = -1, g_counts = 0
        while 
((victim = engfunc(EngFunc_FindEntityInSphere, victim, vOrigin, 4.0)) != 0)
        {
            if(!is_user_connected(victim)||!is_user_alive(victim))continue
            g_counts++
        }
        if(g_counts)
        {
            set_pev(i_Ent, pev_nextthink, get_gametime()+0.3)
            return
        
}
        emit_sound(i_Ent, CHAN_VOICE, Mine_Sound_Activate, 0.5, ATTN_NORM, 1, 75);
        set_pev(i_Ent, pev_solid, SOLID_BBOX)
        set_pev(i_Ent, pev_takedamage, DAMAGE_YES)
        set_pev(i_Ent, pev_nextthink, get_gametime()+0.1)
        return
    
}
    
    static Float
:vTracedBeamEnd[3], Float:vTracedBeamEnd1[3]
    pev(i_Ent,pev_vuser1,vTracedBeamEnd)
    
    new ptr 
= create_tr2()
    engfunc(EngFunc_TraceLine, vOrigin, vTracedBeamEnd, DONT_IGNORE_MONSTERS , i_Ent, ptr)
    get_tr2(ptr, TR_vecEndPos, vTracedBeamEnd1)
    
    static iHit
, Float:fFraction;
    get_tr2(ptr, TR_flFraction, fFraction);
    iHit = get_tr2(ptr, TR_pHit);
    
    if
(fFraction < 1.0)
    {
        if(pev_valid(iHit)&&is_user_alive(iHit)&&fm_cs_get_user_team(iHit)!=pev(i_Ent, pev_iuser1) && pev(iHit, pev_takedamage)!=DAMAGE_NO&&pev(iHit, pev_solid)!=SOLID_NOT)
        {
            emit_sound(iHit, CHAN_WEAPON, Mine_Sound_Hit, 1.0, ATTN_NORM, 0, PITCH_NORM)
            new Float:Health
            pev
(iHit, pev_health, Health)
            if(Health>get_pcvar_float(g_iCvar[0])) {
                ExecuteHamB(Ham_TakeDamage, iHit, i_Ent, pev(i_Ent, pev_iuser2), get_pcvar_float(g_iCvar[0]), DMG_BLAST)
            }else {
                ExecuteHamB(Ham_TakeDamage, iHit, i_Ent, pev(i_Ent, pev_iuser2), get_pcvar_float(g_iCvar[0]), DMG_BULLET)
                set_pev(i_Ent, pev_iuser3, pev(i_Ent, pev_iuser3)+1)
            }
        }
    }
    
    DrawLaser
(i_Ent, vOrigin, vTracedBeamEnd1)
    
    set_pev
(i_Ent, pev_nextthink, get_gametime()+0.1)
}

DrawLaser(i_Ent, const Float:v_Origin[3], const Float:v_EndOrigin[3])
{
    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])
    engfunc(EngFunc_WriteCoord,v_EndOrigin[1])
    engfunc(EngFunc_WriteCoord,v_EndOrigin[2])
    switch(pev(i_Ent, pev_iuser1))
    {
        case 1: write_short(g_iBeam_T)
        case 2: write_short(g_iBeam_CT)
    }
    write_byte(0);
    write_byte(0);
    write_byte(1)
    write_byte(20)
    write_byte(0)
    write_byte(255)
    write_byte(255)
    write_byte(255)
    write_byte(255)
    write_byte(255)
    message_end()
    
    message_begin
(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(TE_SPARKS)
    engfunc(EngFunc_WriteCoord,v_EndOrigin[0])
    engfunc(EngFunc_WriteCoord,v_EndOrigin[1])
    engfunc(EngFunc_WriteCoord,v_EndOrigin[2])
    message_end()
}

stock fm_cs_get_user_team(id)
{
    if (pev_valid(id) != 2) return 0
    
    return get_pdata_int
(id, 114, 5)
}

stock Cycle_delete_mines(i_Owner)
{
    new iEnt = 33
    while
((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "Laser_Mine")))
    {
        if(pev(iEnt, pev_iuser2) != i_Owner) continue

        engfunc
(EngFunc_RemoveEntity, iEnt)
    }
    g_iCountMines[i_Owner]=0
}

public Laser_TakeDamage(victim, inflictor, attacker, Float:damage, bit_Damage)
{
    
    if
(!pev_valid(victim)) return HAM_IGNORED
    
    static ClassName
[32]
    pev(victim, pev_classname, ClassName, charsmax(ClassName))
    if (equal(ClassName, "Laser_Mine")) 
    
{
        if(!is_user_connected(attacker)||(fm_cs_get_user_team(attacker)==pev(victim, pev_iuser1)&&attacker!=pev(victim, pev_iuser2))) 
            return HAM_SUPERCEDE
        
        new Float
:g_Health
        pev
(victim, pev_health, g_Health)
        if (g_Health <= damage)
        {
            if(pev(victim, pev_iuser2)!=attacker&&get_pcvar_num(g_iCvar[2])&&!get_user_hero(attacker)){
                colored_print(attacker, "!tВы разрушили лазер и получаете!g %d$", get_pcvar_num(g_iCvar[2]))
                dm_set_user_money(attacker, dm_get_user_money(attacker)+get_pcvar_num(g_iCvar[2]))
            }
            colored_print(pev(victim, pev_iuser2), "!tВаш лазер разрушен")
            
            g_iCountMines
[pev(victim, pev_iuser2)]--
            
            CreateExplosion
(victim)
            
            engfunc
(EngFunc_RemoveEntity, victim)
            
            return HAM_SUPERCEDE
        
}
    }
    return HAM_IGNORED
}

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

    message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
    write_byte(99)
    write_short(iCurrent)
    message_end()
    if(get_pcvar_num(g_iCvar[4])==2){
        message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
        write_byte(TE_SPRITETRAIL) // Throws a shower of sprites or models
        engfunc(EngFunc_WriteCoord, vOrigin[ 0 ]) // start pos
        engfunc(EngFunc_WriteCoord, vOrigin[ 1 ])
        engfunc(EngFunc_WriteCoord, vOrigin[ 2 ])
        engfunc(EngFunc_WriteCoord, vOrigin[ 0 ]) // velocity
        engfunc(EngFunc_WriteCoord, vOrigin[ 1 ])
        engfunc(EngFunc_WriteCoord, vOrigin[ 2 ]+6.0)
        write_short(g_iSPR_Explo2) // spr
        write_byte(random_num(20,30)) // (count)
        write_byte(10) // (life in 0.1's)
        write_byte(1) // byte (scale in 0.1's)
        write_byte(30) // (velocity along vector in 10's)
        write_byte(20) // (randomness of velocity in 10's)
        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(g_iSPR_Explo)
        write_byte(30)
        write_byte(15)
        write_byte(0)
        message_end()
    }else if(get_pcvar_num(g_iCvar[4])==1){
        message_begin (MSG_BROADCAST,SVC_TEMPENTITY)
        write_byte(TE_SPRITETRAIL) // Throws a shower of sprites or models
        engfunc(EngFunc_WriteCoord, vOrigin[ 0 ]) // start pos
        engfunc(EngFunc_WriteCoord, vOrigin[ 1 ])
        engfunc(EngFunc_WriteCoord, vOrigin[ 2 ])
        engfunc(EngFunc_WriteCoord, vOrigin[ 0 ]) // velocity
        engfunc(EngFunc_WriteCoord, vOrigin[ 1 ])
        engfunc(EngFunc_WriteCoord, vOrigin[ 2 ]+6.0)
        write_short(g_iSPR_Explo2) // spr
        write_byte(random_num(20,30)) // (count)
        write_byte(10) // (life in 0.1's)
        write_byte(1) // byte (scale in 0.1's)
        write_byte(30) // (velocity along vector in 10's)
        write_byte(20) // (randomness of velocity in 10's)
        message_end() 
    
}else{
        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(g_iSPR_Explo)
        write_byte(30)
        write_byte(15)
        write_byte(0)
        message_end()
    }

:boast:

Добавлено спустя 1 минуту 58 секунд:
DeMNiX писал(а):Достаточно бит изменить на TakeDamage
к тому же, в ExecuteHamB TakeDamage инфликтором может быть игрок, если задан след.код:
Код: Выделить всё
ExecuteHamB(Ham_TakeDamage, victim, attacker, attacker, damage, dmgbits

и тут уж определи с какого оружия был убит игрок. Либо биты задавать особые, либо ставить верный инфликтор


Ну вот сам код плагина убийство с ножа
Код: Выделить всё
#include <amxmodx> 
#include <cstrike>
#include <hamsandwich>
 
native dm_get_user_money
(id)
native dm_set_user_money(id, set)

 
public plugin_init
()
{
 
    register_plugin
("Give money victim", "1.0", "Stimul")

    RegisterHam(Ham_Killed, "player", "fwdKilled")

}

public fwdKilled(victim, attacker)
{

    if(!is_user_connected(victim) || !is_user_connected(attacker)) return HAM_IGNORED

    if
(attacker == victim || !attacker) return HAM_IGNORED

    if
(get_user_weapon(attacker) != CSW_KNIFE) return HAM_IGNORED

    if
(dm_get_user_money(victim)<1) return HAM_IGNORED

 
     
    new name_victim
[32],name_attacker[32]
    
    new random_money 
= random_num(1,dm_get_user_money(victim))

    get_user_name(victim, name_victim, 31)

    get_user_name(attacker, name_attacker, 31)
    
    dm_set_user_money
(attacker, dm_get_user_money(attacker) + random_money)
    
    dm_set_user_money
(victim, dm_get_user_money(victim) - random_money)
    
    ChatColor
(0, "^4[^3CSDM^4] ^1игрок^4%s ^1убил ^4%s ^1и украл у него ^4%d$", name_attacker, name_victim, random_money)

    return HAM_IGNORED
 
}

stock ChatColor(const id, const input[], any:...)
{
        new count = 1, players[32]
        static msg[191]
        vformat(msg, 190, input, 3)
       
        replace_all
(msg, 190, "!g", "^4") // Green Color
        replace_all(msg, 190, "!y", "^1") // Default Color
        replace_all(msg, 190, "!team", "^3") // Team Color
        replace_all(msg, 190, "!team2", "^0") // Team2 Color
       
        if 
(id) players[0] = id; else get_players(players, count, "ch")
        {
                for (new i = 0; i < count; i++)
                {
                        if (is_user_connected(players[i]))
                        {
                                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                                write_byte(players[i]);
                                write_string(msg);
                                message_end();
                        }
                }
        }
}
«А сегодня в завтрашний день не все могут смотреть. Вернее, смотреть могут не только лишь все. Мало кто может это делать»

Виталий Кличко :-D
Аватара пользователя
Ternopil62000
 
Сообщения: 36
Зарегистрирован: 05 апр 2018, 23:25
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Опыт программирования: Меньше месяца

Re: при убийстве лазером считается как убийство ножом

Сообщение DeMNiX » 21 май 2018, 12:04

Код: Выделить всё
#include <amxmodx> 
#include <cstrike>
#include <hamsandwich>
 
native dm_get_user_money(id)
native dm_set_user_money(idset)

 
public 
plugin_init()
{
 
    
register_plugin("Give money victim""1.0""Stimul")

    
RegisterHam(Ham_Killed"player""fwdKilled")

}

public 
fwdKilled(victimattacker)
{

    if(!
is_user_connected(victim) || !is_user_connected(attacker)) return HAM_IGNORED

    
if(attacker == victim || !attacker) return HAM_IGNORED

    
if(get_user_weapon(attacker) != CSW_KNIFE) return HAM_IGNORED

    
if(dm_get_user_money(victim)<1) return HAM_IGNORED

    
new iInflictoriInflictor pev(victimpev_dmg_inflictor);
    if (
iInflictor != attacker) return HAM_IGNORED;

    new 
name_victim[32],name_attacker[32]
    
    new 
random_money random_num(1,dm_get_user_money(victim))

    
get_user_name(victimname_victim31)

    
get_user_name(attackername_attacker31)
    
    
dm_set_user_money(attackerdm_get_user_money(attacker) + random_money)
    
    
dm_set_user_money(victimdm_get_user_money(victim) - random_money)
    
    
ChatColor(0"^4[^3CSDM^4] ^1игрок^4%s ^1убил ^4%s ^1и украл у него ^4%d$"name_attackername_victimrandom_money)

    return 
HAM_IGNORED
 
}

stock ChatColor(const id, const input[], any:...)
{
        new 
count 1players[32]
        static 
msg[191]
        
vformat(msg190input3)
       
        
replace_all(msg190"!g""^4"// Green Color
        
replace_all(msg190"!y""^1"// Default Color
        
replace_all(msg190"!team""^3"// Team Color
        
replace_all(msg190"!team2""^0"// Team2 Color
       
        
if (idplayers[0] = id; else get_players(playerscount"ch")
        {
                for (new 
0counti++)
                {
                        if (
is_user_connected(players[i]))
                        {
                                
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _players[i])
                                
write_byte(players[i]);
                                
write_string(msg);
                                
message_end();
                        }
                }
        }
Работа с моделями для кс 1.6
Telegram @DeMNiX
vk com/sbalburov
Аватара пользователя
DeMNiX
 
Сообщения: 177
Зарегистрирован: 24 сен 2011, 17:48
Благодарил (а): 25 раз.
Поблагодарили: 37 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: при убийстве лазером считается как убийство ножом

Сообщение Ternopil62000 » 21 май 2018, 12:35

DeMNiX писал(а):
Код: Выделить всё
#include <amxmodx> 
#include <cstrike>
#include <hamsandwich>
 
native dm_get_user_money
(id)
native dm_set_user_money(id, set)

 
public plugin_init
()
{
 
    register_plugin
("Give money victim", "1.0", "Stimul")

    RegisterHam(Ham_Killed, "player", "fwdKilled")

}

public fwdKilled(victim, attacker)
{

    if(!is_user_connected(victim) || !is_user_connected(attacker)) return HAM_IGNORED

    if
(attacker == victim || !attacker) return HAM_IGNORED

    if
(get_user_weapon(attacker) != CSW_KNIFE) return HAM_IGNORED

    if
(dm_get_user_money(victim)<1) return HAM_IGNORED

    new iInflictor
; iInflictor = pev(victim, pev_dmg_inflictor);
    if (iInflictor != attacker) return HAM_IGNORED;

    new name_victim[32],name_attacker[32]
    
    new random_money 
= random_num(1,dm_get_user_money(victim))

    get_user_name(victim, name_victim, 31)

    get_user_name(attacker, name_attacker, 31)
    
    dm_set_user_money
(attacker, dm_get_user_money(attacker) + random_money)
    
    dm_set_user_money
(victim, dm_get_user_money(victim) - random_money)
    
    ChatColor
(0, "^4[^3CSDM^4] ^1игрок^4%s ^1убил ^4%s ^1и украл у него ^4%d$", name_attacker, name_victim, random_money)

    return HAM_IGNORED
 
}

stock ChatColor(const id, const input[], any:...)
{
        new count = 1, players[32]
        static msg[191]
        vformat(msg, 190, input, 3)
       
        replace_all
(msg, 190, "!g", "^4") // Green Color
        replace_all(msg, 190, "!y", "^1") // Default Color
        replace_all(msg, 190, "!team", "^3") // Team Color
        replace_all(msg, 190, "!team2", "^0") // Team2 Color
       
        if 
(id) players[0] = id; else get_players(players, count, "ch")
        {
                for (new i = 0; i < count; i++)
                {
                        if (is_user_connected(players[i]))
                        {
                                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                                write_byte(players[i]);
                                write_string(msg);
                                message_end();
                        }
                }
        }
}


Выдает ошибку \get_money.sma[29]
error 017: undefined symbol "pev"
«А сегодня в завтрашний день не все могут смотреть. Вернее, смотреть могут не только лишь все. Мало кто может это делать»

Виталий Кличко :-D
Аватара пользователя
Ternopil62000
 
Сообщения: 36
Зарегистрирован: 05 апр 2018, 23:25
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Опыт программирования: Меньше месяца

Re: при убийстве лазером считается как убийство ножом

Сообщение DeMNiX » 21 май 2018, 14:30

#include <fakemeta> в самое начало
Работа с моделями для кс 1.6
Telegram @DeMNiX
vk com/sbalburov
Аватара пользователя
DeMNiX
 
Сообщения: 177
Зарегистрирован: 24 сен 2011, 17:48
Благодарил (а): 25 раз.
Поблагодарили: 37 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Пред.

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

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

Сейчас этот форум просматривают: Bing [Bot] и гости: 10

cron