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

He Grenade Multiper | Добавить радиус

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

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

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

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

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

He Grenade Multiper | Добавить радиус

Сообщение Ternopil62000 » 17 июн 2018, 10:51

Прошу помощи, как сделать для гранаты радиус побольше?

Хотелось, чтобы она по взрослому взрывалась >:o

Плагин умножает урон Взрывной гранаты!

Код: Выделить всё
/*
==========================================================================================
*** He Damage Multiplier ***
==========================================================================================
### Квары ###
amx_hemulti    1.0(Стандартный урон)    Квар отвечающий за урон гранаты
==========================================================================================
### Модули ###
Engine Необходим
Fun Необходим
==========================================================================================
### Changelog ###
1.0 Release
1.1 Kill message fixed
1.2 Little suicide fix
*/

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <engine>
#include <csx>
#include <cstrike>

#define PLUGINNAME    "He damage Multiplier"
#define VERSION        "1.2"
#define AUTHOR        "Nightscream & edit : yas17sin"

#define MAX_CZ_LENGHT    32

#define MSG_TYPE_ALONE MSG_ONE // default: (uncommented)

//new g_iMsgScoreInfo, g_iMsgDeathMsg

#define SetPlayerBit(%1,%2)    ( %1 |=  ( 1 << ( %2 & 31 ) ) )
#define ClearPlayerBit(%1,%2)  ( %1 &= ~( 1 << ( %2 & 31 ) ) )
#define CheckPlayerBit(%1,%2)  ( %1 &   ( 1 << ( %2 & 31 ) ) )

new g_iCvar_ColorHe;
new g_iCvar_TrailStatus;

new g_iSpriteLine;
new g_iSpriteArrow;

new g_iConnectedUsers;
new g_iDeadUsers;
new g_iMaxPlayers;

public plugin_precache()
{
    g_iSpriteArrow = precache_model("sprites/arrow1.spr");
    g_iSpriteLine  = precache_model("sprites/smoke.spr");
}

public plugin_init() {
    register_plugin( PLUGINNAME, VERSION, AUTHOR );
    
    g_iCvar_TrailStatus 
= register_cvar("amx_grentrail_status", "1");
    
    g_iCvar_ColorHe 
= register_cvar("amx_grentrail_color_he", "255063000");
    
    register_cvar
( "amx_hemulti", "6.00" );
    register_event( "Damage", "hedmg", "be" );
//    register_clcmd("say /he", "give_hegrnade")
    
    
//g_iMsgScoreInfo = get_user_msgid( "ScoreInfo" )
    //g_iMsgDeathMsg = get_user_msgid( "DeathMsg" )
    
    register_event
("ResetHUD", "Event_ResetHUD", "be");
    register_event("Health",   "Event_Health",   "bd");
    
    g_iMaxPlayers 
= clamp(get_maxplayers(), 1, 32);
}
public hedmg( id ) {
    
    new victim_id 
= id;
    if( !is_user_connected( victim_id ) ) return PLUGIN_CONTINUE
    new dmg_take 
= read_data( 2 );
    new dmgtype = read_data( 3 );
    new Float:multiplier = get_cvar_float( "amx_hemulti" );
    new Float:damage = dmg_take * multiplier;
    new health = get_user_health( victim_id );
    
    new iWeapID
, attacker_id = get_user_attacker( victim_id, iWeapID );
    
    if
( !is_user_connected( attacker_id ) || !is_user_alive( victim_id ) ) {
        return PLUGIN_HANDLED
    
}
    
    if
( iWeapID == CSW_HEGRENADE ) {
                    
        if
( floatround(damage) >= health ) {
            if( victim_id == attacker_id ) {
                return PLUGIN_CONTINUE
            
}else{
                log_kill( attacker_id, victim_id, "grenade", 0 );
            }
            
            return PLUGIN_CONTINUE
        
}else {
            if( victim_id == attacker_id ) return PLUGIN_CONTINUE
            
            fakedamage
( victim_id, "weapon_grenade", damage, dmgtype );
        }
    }
    
    return PLUGIN_CONTINUE
}

stock log_kill(killer, victim, weapon[],headshot) {
    user_silentkill( victim );
    
    message_begin
( MSG_ALL, get_user_msgid( "DeathMsg" ), {0,0,0}, 0 );
    write_byte( killer );
    write_byte( victim );
    write_byte( headshot );
    write_string( weapon );
    message_end();
    
    new kfrags 
= get_user_frags( killer );
    set_user_frags( killer, kfrags++ );
    new vfrags = get_user_frags( victim );
    set_user_frags( victim, vfrags++ );
    
    return  PLUGIN_CONTINUE
}

/*
public give_hegrnade(id)
{
    if(!is_user_alive(id) )
    return;
    
    give_item(id, "weapon_hegrenade");
}

*/

public client_connect(iPlrId)
{
    ClearPlayerBit(g_iConnectedUsers, iPlrId);
    ClearPlayerBit(g_iDeadUsers, iPlrId);
}

public client_putinserver(iPlrId)
{
    if( !is_user_bot(iPlrId) )
    {
        SetPlayerBit(g_iConnectedUsers, iPlrId);
        if( is_user_alive(iPlrId) )
            ClearPlayerBit(g_iDeadUsers, iPlrId);
        else
            SetPlayerBit
(g_iDeadUsers, iPlrId);
    }
}

public client_disconnect(iPlrId)
{
    ClearPlayerBit(g_iConnectedUsers, iPlrId);
    ClearPlayerBit(g_iDeadUsers, iPlrId);
}

public Event_ResetHUD(iPlrId)
{
    if( CheckPlayerBit(g_iConnectedUsers, iPlrId) )
    {
        if( is_user_alive(iPlrId) )
            ClearPlayerBit(g_iDeadUsers, iPlrId);
        else
            SetPlayerBit
(g_iDeadUsers, iPlrId);
    }
}

public Event_Health(iPlrId)
{
    if( CheckPlayerBit(g_iConnectedUsers, iPlrId) )
    {
        if( is_user_alive(iPlrId) )
            ClearPlayerBit(g_iDeadUsers, iPlrId);
        else
            SetPlayerBit
(g_iDeadUsers, iPlrId);
    }
}
public plugin_unpause()
{
    g_iConnectedUsers = 0;
    g_iDeadUsers = 0;
    
    for
( new iPlrId=1; iPlrId<=g_iMaxPlayers; iPlrId++ )
    {
        if( is_user_connected(iPlrId) )
        {
            if( !is_user_bot(iPlrId) )
            {
                SetPlayerBit(g_iConnectedUsers, iPlrId);
                if( !is_user_alive(iPlrId) )
                    SetPlayerBit(g_iDeadUsers, iPlrId);
            }
        }
    }
}
public grenade_throw(iPlrId, iGrenId, iWeaponType)
{
    new iTemp;
    switch( iWeaponType )
    {
        case CSW_HEGRENADE:        iTemp = get_pcvar_num(g_iCvar_ColorHe);
        default: return;
    }
    
    new iRed 
= iTemp/1000000;
    iTemp %= 1000000;
    new iGreen = iTemp/1000;
    new iBlue = iTemp%1000;
    
    switch
( clamp(get_pcvar_num(g_iCvar_TrailStatus), 0, 3) )
    {
        case 1:
        {
            new CsTeams:iOwnerTeam = cs_get_user_team(iPlrId);
            
            for
( new iPlayer=1; iPlayer<=g_iMaxPlayers; iPlayer++ )
            {
                if( CheckPlayerBit(g_iConnectedUsers, iPlayer) )
                {
                    if( CheckPlayerBit(g_iDeadUsers, iPlayer) || cs_get_user_team(iPlayer)==iOwnerTeam )
                    {
                        message_begin(MSG_TYPE_ALONE, SVC_TEMPENTITY, _, iPlayer);
                        write_byte(TE_BEAMFOLLOW);
                        write_short(iGrenId);
                        write_short(g_iSpriteArrow);
                        write_byte(15);
                        write_byte(7);
                        write_byte(iRed);
                        write_byte(iGreen);
                        write_byte(iBlue);
                        write_byte(191);
                        message_end();
                        
                        if
( iTemp )
                        {
                            message_begin(MSG_TYPE_ALONE, SVC_TEMPENTITY, _, iPlayer);
                            write_byte(TE_BEAMFOLLOW);
                            write_short(iGrenId);
                            write_short(g_iSpriteLine);
                            write_byte(15);
                            write_byte(1);
                            switch( iOwnerTeam )
                            {
                                case CS_TEAM_T:
                                {
                                    write_byte(255);
                                    write_byte(0);
                                    write_byte(0);
                                }
                                case CS_TEAM_CT:
                                {
                                    write_byte(0);
                                    write_byte(0);
                                    write_byte(255);
                                }
                                default:
                                {
                                    write_byte(127);
                                    write_byte(127);
                                    write_byte(127);
                                }
                            }
                            write_byte(191);
                            message_end();
                        }
                    }
                }
            }
        }
    }
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang2067\\ f0\\ fs16 \n\\ par }
*/ 
«А сегодня в завтрашний день не все могут смотреть. Вернее, смотреть могут не только лишь все. Мало кто может это делать»

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

Re: He Grenade Multiper | Добавить радиус

Сообщение Xelson » 27 июн 2018, 12:46

Можно изменить pev_dmg у летящей гранаты, что и обозначает радиус будущего взрыва. По умолчанию это 100 юнитов:
Вы должны зарегистрироваться, чтобы видеть ссылки. ... e.cpp#L905
Вы должны зарегистрироваться, чтобы видеть ссылки. ... e.cpp#L276
И надо учесть, что максимальный урон от гранаты будет всегда в 3.5 раза больше радиуса взрыва (pev_dmg * 3.5):
Вы должны зарегистрироваться, чтобы видеть ссылки. ... r.cpp#L583
Аватара пользователя
Xelson
 
Сообщения: 365
Зарегистрирован: 06 мар 2016, 14:41
Откуда: Беларусь
Благодарил (а): 16 раз.
Поблагодарили: 46 раз.
Опыт программирования: Больше трех лет


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

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

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