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

[ZP] [4.3/5.0] Sub Plugin: AWP Levelling 1.2

Утвержденные плагины для AMX Mod X администратором/модератором форума.

Модератор: Leonidddd

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

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

[ZP] [4.3/5.0] Sub Plugin: AWP Levelling 1.2

Сообщение GAARA54 » 15 май 2016, 19:11

Автор: GAARA54
Версия: 1.2
Описание: Плагин добавляет систему уровней для AWP на ZP сервере + эффекты
Вы когда-нибудь думали, что AWP на зомби моде медленное и ненужное оружие ?
И игроки его не любят ?
Этот плагин даёт стимул игрокам брать его
В плагине AWP имеет 3 уровня:
1lvl - стандарт
2lvl - больше урона
3lvl - ещё больше урона + эффекты


Cvars:
zp_awplvl2_frags 3 - как много убийств надо сделать, чтобы получить уровень 2

zp_awplvl3_frags 10 - как много убийств надо сделать, чтобы получить уровень 3

zp_dop_damage_awplvl2 2 - насколько умножается урон во время второго уровня

zp_dop_damage_awplvl3 4 - насколько умножается урон во время третьего уровня

zp_remove_lvl_newround 1 - убирать уровни на новом раунде или нет (1/0)

zp_awp_lvl3_gibslay_sound 1 - взрывать зомби и играть звук расчленения при уровне три или нет (1/0)

zp_awp_lvl3_tracers 1 - показывать трейсеры при уровне три или нет (1/0)


Меняем цвет трейсера в RGB:
zp_awp_lvl3_red_sprite 255
zp_awp_lvl3_green_sprite 0
zp_awp_lvl3_blue_sprite 0


Цвет ауры при поднятии нового уровня:
zp_lvl_effect_red 255
zp_lvl_effect_green 255
zp_lvl_effect_blue 255


Кустимизация:

Код: Выделить всё

new const gibsound
[] = "zombie_plague/zp_gibslay.wav"
new const awplvleffect[] = "zombie_plague/zp_awp_getlvl_effect.wav"
new AWPLEVEL2[] = "models/zombie_plague/zp_awp_lvl2.mdl"
new AWPLEVEL3[] = "models/zombie_plague/zp_awp_lvl3.mdl"
new P_AWPLEVEL2[] = "models/zombie_plague/zp_p_awp_lvl2.mdl"
new P_AWPLEVEL3[] = "models/zombie_plague/zp_p_awp_lvl3.mdl"


awplvl3sprite = precache_model("sprites/dot.spr") 


Совместимость с zp 5.0:

Код: Выделить всё
//#define ZP50        // <<--- Zombie Plague 5.0


Ченджлог:

Код: Выделить всё

 
- 1.0 - Выпуск :)
 - 1.1 
       
- пофикшены ргб квары
       
- добавлен квар удаления уровня на новом раунде
       
- добавлена мультиязычность
       
- изменено добавление урона на умножение (Идея: XINLEI)

-
1.2
       
-Добавлен квар zp_awp_lvl3_gibslay_sound
       
-Добавлен квар zp_awp_lvl3_tracers

       
-Оптимизирован код (Alexander.3)
       -Добавлена совместимость к zp 5.0 (Alexander.3)


Авторство:
GAARA54 - идея, выпуск, редактирование моделей (автор awp lvl3 model - неизвестен)
XxAvalanchexX - TE_DLIGHT из замораживающих гранат
AlejandroSk - TE_BEAMENTPOINTS из золотого ак
TurangaLeela - Код трейсеров
Alexander.3 - оптимизация кода, добавлена совместимость для ZP 5.0

Официальная тема на оленях: Вы должны зарегистрироваться, чтобы видеть ссылки.

Утверждено. //Leonidddd
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
GAARA54
 
Сообщения: 12
Зарегистрирован: 09 апр 2010, 14:28
Откуда: Санкт-Петербург
Благодарил (а): 6 раз.
Поблагодарили: 2 раз.
Опыт программирования: Меньше месяца
Языки программирования: Counter-Strike 1.6

Re: [ZP] [4.3/5.0] Sub Plugin: AWP Levelling 1.2

Сообщение Subb98 » 15 май 2016, 23:14

Хорошая идея! :thumbs_up
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: [ZP] [4.3/5.0] Sub Plugin: AWP Levelling 1.2

Сообщение GAARA54 » 16 май 2016, 13:29

Subb98 писал(а):Хорошая идея! :thumbs_up


Спасибо, можно сделать так например со всеми оружиями и например для паблика, ну или со всеми для зм, но это будет кропотливая работа =)

Если будут ошибки в консоли, то пробуйте код отсюда:

Код: Выделить всё
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>

//#define ZP50        // <<--- Zombie Plague 5.0

new bool:g_awplevel[33][3]
new g_kill[33]

new r_sprite, g_sprite, b_sprite, red_effect, green_effect, blue_effect
new cvar_frags_2lvl
, cvar_frags_3lvl, damagelvl2, damagelvl3, cvar_nr, cvar_gib_sound_slay, cvar_tracers

new awplvl3sprite

new const gibsound
[] = "zombie_plague/zp_gibslay.wav"
new const awplvleffect[] = "zombie_plague/zp_awp_getlvl_effect.wav"
new AWPLEVEL2[] = "models/zombie_plague/zp_awp_lvl2.mdl"
new AWPLEVEL3[] = "models/zombie_plague/zp_awp_lvl3.mdl"
new P_AWPLEVEL2[] = "models/zombie_plague/zp_p_awp_lvl2.mdl"
new P_AWPLEVEL3[] = "models/zombie_plague/zp_p_awp_lvl3.mdl"



#if defined ZP50
    #include <zp50_core>
#else
    #include <zombieplague>
#endif

public plugin_init()
{
    register_plugin("[ZP] Awp Levelling", "1.1", "GAARA54")
    register_dictionary("zp_awp_levelling.txt")

    cvar_frags_2lvl = register_cvar("zp_awplvl2_frags", "3")
    cvar_frags_3lvl = register_cvar("zp_awplvl3_frags", "10")
    damagelvl2 = register_cvar("zp_multiple_damage_awplvl2", "2")
    damagelvl3 = register_cvar("zp_multiple_damage_awplvl3", "4")
    r_sprite = register_cvar("zp_awp_lvl3_red_sprite", "255")
    g_sprite = register_cvar("zp_awp_lvl3_green_sprite", "0")
    b_sprite = register_cvar("zp_awp_lvl3_blue_sprite", "0")
    red_effect = register_cvar("zp_lvl_effect_red", "255")
    green_effect = register_cvar("zp_lvl_effect_green", "255")
    blue_effect = register_cvar("zp_lvl_effect_blue", "255")
    cvar_nr = register_cvar("zp_remove_lvl_newround", "1")
    cvar_gib_sound_slay = register_cvar("zp_awp_lvl3_gibslay_sound", "1")
    cvar_tracers = register_cvar("zp_awp_lvl3_tracers", "1")

    register_event("CurWeapon", "Event_CurWeapon", "be","1=1")
    register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
    RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
    RegisterHam(Ham_TraceAttack, "worldspawn", "Trace_Attack", 1)
}

public plugin_precache()
{
    awplvl3sprite = precache_model("sprites/dot.spr")
    
    precache_model
(AWPLEVEL2)
    precache_model(AWPLEVEL3)
    precache_model(P_AWPLEVEL2)
    precache_model(P_AWPLEVEL3)
    precache_sound(gibsound)
    precache_sound(awplvleffect)
}

public refresh() set_task(0.5, "event_round_start")

public event_round_start()
{
    for (new i = 1; i <= get_maxplayers(); i++)
    {
        if(!is_user_connected(i)) continue
        if
(get_pcvar_num(cvar_nr) > 0)
        {
            g_kill[i] = 0
            for
( new j = 0; j < 3; j++ ) g_awplevel[i][j] = false
        
}
    }
}

public Event_CurWeapon(id)
{
    new weaponID = read_data(2)
    
    if 
(weaponID != CSW_AWP) return PLUGIN_CONTINUE
    
    if
(g_awplevel[id][0] == true && g_awplevel[id][1] == false && g_awplevel[id][2] == false)
    {
        set_pev(id, pev_viewmodel2, "models/v_awp.mdl")
        set_pev(id, pev_weaponmodel2, "models/p_awp.mdl")
    }
  
    if
(g_awplevel[id][0] == false && g_awplevel[id][1] == true && g_awplevel[id][2] == false)
    {
        set_pev(id, pev_viewmodel2, AWPLEVEL2)
        set_pev(id, pev_weaponmodel2, P_AWPLEVEL2)
    }
    
    if
(g_awplevel[id][0] == false && g_awplevel[id][1] == false && g_awplevel[id][2] == true)
    {
        set_pev(id, pev_viewmodel2, AWPLEVEL3)
        set_pev(id, pev_weaponmodel2, P_AWPLEVEL3)
    }
    return PLUGIN_CONTINUE
}

public fw_PlayerKilled(victim, attacker, shouldgib)
{
    if (!is_user_connected(attacker))
        return
        
    
#if defined ZP50
    if(!zp_core_is_zombie(attacker) && zp_core_is_zombie(victim))
    #else
    if(!zp_get_user_zombie(attacker) && zp_get_user_zombie(victim))
    #endif
    {    
        if
(g_awplevel[attacker][1] == false && g_awplevel[attacker][2] == false)
        {
            g_awplevel[attacker][0] = true
        
}

        if(get_user_weapon(attacker) == CSW_AWP && g_awplevel[attacker][0] == true)
        {
            g_kill[attacker] ++
            client_printcolor(attacker, "^4[ZP]^1 %L ^4(%d / %d)",  LANG_PLAYER, "AWP_FRAGS_LVL2", g_kill[attacker],  get_pcvar_num(cvar_frags_2lvl))
        }
        
        if
(get_user_weapon(attacker) == CSW_AWP && g_awplevel[attacker][1] == true)
        {
            g_kill[attacker] ++
            client_printcolor(attacker, "^4[ZP]^1 %L ^4(%d / %d)",  LANG_PLAYER, "AWP_FRAGS_LVL3", g_kill[attacker],  get_pcvar_num(cvar_frags_3lvl))
        }
        
        if
(get_user_weapon(attacker) == CSW_AWP && g_awplevel[attacker][2] == true)
        {
            if (get_pcvar_num(cvar_gib_sound_slay) > 0)
            {
                SetHamParamInteger(3, 2)
                emit_sound(victim, CHAN_BODY, gibsound, 1.0, ATTN_NORM, 0, PITCH_NORM)
            }
        }
        
        if
(g_kill[attacker] == get_pcvar_num(cvar_frags_3lvl))
        {
            g_kill[attacker] ++
            g_awplevel[attacker][0] = false
            g_awplevel
[attacker][1] = false
            g_awplevel
[attacker][2] = true
            client_printcolor
(attacker, "^4[ZP]^1 %L", LANG_PLAYER, "GET_LVL3", get_pcvar_num(damagelvl3))
            effect(attacker)
        }
        else if(g_kill[attacker] == get_pcvar_num(cvar_frags_2lvl)  && g_kill[attacker] < get_pcvar_num(cvar_frags_3lvl))
        {
            g_awplevel[attacker][0] = false
            g_awplevel
[attacker][1] = true
            g_awplevel
[attacker][2] = false
            client_printcolor
(attacker, "^4[ZP]^1 %L", LANG_PLAYER, "GET_LVL2", get_pcvar_num(damagelvl2))
            effect(attacker)
        }    
    
}
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
    for(new i = 1; i <= get_maxplayers(); i++)
    {
        if (== attacker)
        {
            if((get_user_weapon(attacker) == CSW_AWP) &&  (g_awplevel[attacker][0] == true) && (g_awplevel[attacker][1] ==  false) && (g_awplevel[attacker][2] == false))
            {
                SetHamParamFloat(4, damage)
            }
            
            if
((get_user_weapon(attacker) == CSW_AWP)&&  (g_awplevel[attacker][0] == false) && (g_awplevel[attacker][1]  == true) && (g_awplevel[attacker][2] == false))
            {
                SetHamParamFloat(4, damage * get_pcvar_num(damagelvl2))
            }
    
            if
((get_user_weapon(attacker) == CSW_AWP)&&  (g_awplevel[attacker][0] == false) && (g_awplevel[attacker][1]  == false) && (g_awplevel[attacker][2] == true))
            {
                SetHamParamFloat(4, damage * get_pcvar_num(damagelvl3))
            }
        }
    }
}

public Trace_Attack(this, id, Float:damage, Float:direction[3], tracehandle, damagebits)
{
    if (get_pcvar_num(cvar_tracers) > 0)
    {
        if (!is_user_connected(id))
            return HAM_SUPERCEDE;
        
        if 
(get_user_weapon(id) == CSW_KNIFE || g_awplevel[id][0] == true || g_awplevel[id][1] == true)
        {
            return HAM_SUPERCEDE;
        }
        else if(get_user_weapon(id) == CSW_AWP && (g_awplevel[id][2] == true))
        {
            static origin[3], Float:end[3]
            get_user_origin(id, origin, 1)
            get_tr2(tracehandle, TR_vecEndPos, end)
        
            message_begin
( MSG_BROADCAST,SVC_TEMPENTITY)
            write_byte (0)     //TE_BEAMENTPOINTS 0
            write_coord(origin[0])
            write_coord(origin[1])
            write_coord(origin[2])
            engfunc(EngFunc_WriteCoord, end[0])
            engfunc(EngFunc_WriteCoord, end[1])
            engfunc(EngFunc_WriteCoord, end[2])
            write_short( awplvl3sprite )
            write_byte(1)
            write_byte(5)
            write_byte(2)
            write_byte(10)
            write_byte(0)
            write_byte(get_pcvar_num(r_sprite))
            write_byte(get_pcvar_num(g_sprite))
            write_byte(get_pcvar_num(b_sprite))
            write_byte(200)
            write_byte(150)
            message_end()
        }
    }
    return FMRES_IGNORED
}

public effect(attacker)
{
    static Float:originF[3]
    pev(attacker, pev_origin, originF)

    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(TE_DLIGHT);
    engfunc(EngFunc_WriteCoord, originF[0]); // x
    engfunc(EngFunc_WriteCoord, originF[1]); // y
    engfunc(EngFunc_WriteCoord, originF[2]); // z
    write_byte(25); // radius
    write_byte(get_pcvar_num(red_effect)); // r
    write_byte(get_pcvar_num(green_effect)); // g
    write_byte(get_pcvar_num(blue_effect)); // b
    write_byte(8); // life
    write_byte(60); // decay rate
    message_end()
    
    emit_sound
(attacker, CHAN_BODY, awplvleffect, 1.0, ATTN_NORM, 0, PITCH_NORM)
}

stock client_printcolor(const id, const input[], any:...)
{
    new iCount = 1, iPlayers[32]
    static szMsg[191]

    vformat(szMsg, charsmax(szMsg), input, 3)
    replace_all(szMsg, 190, "/g", "^4")
    replace_all(szMsg, 190, "/y", "^1")
    replace_all(szMsg, 190, "/ctr", "^1")
    replace_all(szMsg, 190, "/w", "^0")

    if(id) iPlayers[0] = id
    else get_players
(iPlayers, iCount, "ch")
    for (new i = 0; i < iCount; i++)
    {
        if(is_user_connected(iPlayers[i]))
        {
            message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i])
            write_byte(iPlayers[i])
            write_string(szMsg)
            message_end()
        }
    }
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/
Аватара пользователя
GAARA54
 
Сообщения: 12
Зарегистрирован: 09 апр 2010, 14:28
Откуда: Санкт-Петербург
Благодарил (а): 6 раз.
Поблагодарили: 2 раз.
Опыт программирования: Меньше месяца
Языки программирования: Counter-Strike 1.6


Вернуться в Утвержденные плагины

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5