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

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

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

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

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

[ZP] Лимит для силового поля

, Внутри
Статус пользователя alexx
сообщение 19.5.2014, 11:35
Сообщение #1


Стаж: 12 лет

Сообщений: 147
Благодарностей: 145
Полезность: 397

Хочу сделать лимит для покупки zp_extra_shield_force, например, 2 раза на раунд или 10 раз на карту.
Есть острые люди?


Скрытый текст
Код
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <cstrike>
#include <zombieplague>
#include <hamsandwich>
#include <fakemeta_util>
#include <fun>


#define PLUGIN "[ZP] Extra Item: Force Field Grenade"
#define VERSION "v1.6"
#define AUTHOR "lucas_7_94" // Thanks To Users in credits too!.

/*=============================[Plugin Customization]=============================*/
#define CAMPO_TASK
//#define CAMPO_ROUND

new const NADE_TYPE_CAMPO = 7000

new const model_grenade[] = "models/zombie_plague/v_auragren.mdl"
new g_bomb[33]
new g_itemID
new const model[] = "models/zombie_plague/auranew.mdl"

new const entclas[] = "campo_grenade_forze"
new cvar_flaregrenades
new g_trailSpr
const m_pPlayer = 41;

new cvar_push

new g_SayText
new const sprite_grenade_trail[] = "sprites/laserbeam.spr"

/*=============================[End Customization]=============================*/

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade")
    
    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
    
    cvar_flaregrenades = get_cvar_pointer("zp_flare_grenades")
    
    register_forward(FM_SetModel, "fw_SetModel")
    
    RegisterHam( Ham_Item_Deploy, "weapon_smokegrenade", "FwdHamSmokeDeploy", 1 );
    
    register_touch(entclas, "player", "entity_touch")
    
    register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
    
    g_SayText = get_user_msgid("SayText")
    
    // cvar to push!!.
    register_cvar("zp_shield_creator", AUTHOR, FCVAR_SERVER)
    
    #if defined CAMPO_ROUND
    g_itemID = zp_register_extra_item( "Force Shield (One Round)", 30 , ZP_TEAM_HUMAN)
    #else
    g_itemID = zp_register_extra_item( "Force Shield (Short-acting)", 15 , ZP_TEAM_HUMAN)
    #endif
    
    cvar_push = register_cvar("zp_forze_push", "7.5")
}
public event_round_start()
{
    #if defined CAMPO_ROUND
    remove_entity_name(entclas)
    #endif
    
    arrayset( g_bomb, false, 33 );
}

public plugin_precache()
{
    g_trailSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_trail)
    
    engfunc(EngFunc_PrecacheModel, model_grenade)
    engfunc(EngFunc_PrecacheModel, model)
}

public client_disconnect(id)
{
    g_bomb[id] = false
}

public zp_extra_item_selected(player, itemid)
{
    if(itemid == g_itemID)
    {
        if(g_bomb[player])
        {
            Color(player, "!g[Силовое поле]!y У вас уже есть силовое поле!")
        }
        else
        {
            g_bomb[player] = true
            give_item(player,"weapon_smokegrenade")
            
            
            #if defined CAMPO_ROUND
            Color(player, "!g[Силовое поле]!y Вы купили силовое поле на 1 раунд!")
            #else
            Color(player, "!g[Силовое поле]!y Вы купили силовое поле на 30 секунд!")
            #endif
        }
        
        
    }
    
}

public fw_PlayerKilled(victim, attacker, shouldgib) g_bomb[victim] = false


public fw_ThinkGrenade(entity)
{  
    if(!pev_valid(entity))
        return HAM_IGNORED
    
    static Float:dmgtime  
    pev(entity, pev_dmgtime, dmgtime)
    
    if (dmgtime > get_gametime())
        return HAM_IGNORED  
    
    if(pev(entity, pev_flTimeStepSound) == NADE_TYPE_CAMPO)
        crear_ent(entity)
    
    
    return HAM_SUPERCEDE
}

public FwdHamSmokeDeploy(const iEntity) {
    if(pev_valid(iEntity) != 2 )
        return HAM_IGNORED
    
    new id = get_pdata_cbase(iEntity, m_pPlayer, 4)
    
    if(g_bomb[id] && !zp_get_user_zombie(id))
    {
        set_pev( id, pev_viewmodel2, model_grenade )
    }
    
    return HAM_IGNORED;
}

public fw_SetModel(entity, const model[])
{    
    static Float:dmgtime
    pev(entity, pev_dmgtime, dmgtime)
    
    if (dmgtime == 0.0)
        return
    
    if (equal(model[7], "w_sm", 4))
    {        
        new owner = pev(entity, pev_owner)        
        
        if(!zp_get_user_zombie(owner) && g_bomb[owner])
        {
            set_pcvar_num(cvar_flaregrenades,0)            
            
            fm_set_rendering(entity, kRenderFxGlowShell, 000, 255, 255, kRenderNormal, 16)
            
            message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
            write_byte(TE_BEAMFOLLOW) // TE id
            write_short(entity) // entity
            write_short(g_trailSpr) // sprite
            write_byte(10) // life
            write_byte(10) // width
            write_byte(000) // r
            write_byte(255) // g
            write_byte(255) // b
            write_byte(500) // brightness
            message_end()
            
            set_pev(entity, pev_flTimeStepSound, NADE_TYPE_CAMPO)
            
            set_task(6.0, "DeleteEntityGrenade" ,entity)
        }
    }
    
}

public DeleteEntityGrenade(entity) remove_entity(entity)

public crear_ent(id)
{
    set_pcvar_num(cvar_flaregrenades,1)
    
    // Create entitity
    new iEntity = create_entity("info_target")
    
    if(!is_valid_ent(iEntity))
        return PLUGIN_HANDLED
    
    new Float: Origin[3]
    entity_get_vector(id, EV_VEC_origin, Origin)
    Origin[2] -= 0.00
    
    entity_set_string(iEntity, EV_SZ_classname, entclas)
    
    entity_set_vector(iEntity,EV_VEC_origin, Origin)
    entity_set_model(iEntity,model)
    entity_set_int(iEntity, EV_INT_solid, SOLID_TRIGGER)
    entity_set_size(iEntity, Float: {-100.0, -100.0, -100.0}, Float: {100.0, 100.0, 100.0})
    entity_set_int(iEntity, EV_INT_renderfx, kRenderFxGlowShell)
    entity_set_int(iEntity, EV_INT_rendermode, kRenderTransAlpha)
    entity_set_float(iEntity, EV_FL_renderamt, 50.0)
    
    
    if(is_valid_ent(iEntity))
    {
        new Float:vColor[3]
        
        for(new i; i < 3; i++)
            vColor[i] = random_float(0.0, 255.0)
        
        entity_set_vector(iEntity, EV_VEC_rendercolor, vColor)
    }
    
    
    #if defined CAMPO_TASK
    set_task(30.0, "DeleteEntity", iEntity)
    #endif
    
    static attacker
    attacker = pev(id, pev_owner)
    
    g_bomb[attacker] = false
    
    return PLUGIN_CONTINUE;
}

public zp_user_infected_post(infected, infector)
{
    if (g_bomb[infected])
    {
        g_bomb[infected] = false
    }
}

public entity_touch(touched, toucher)
{
    if(zp_get_user_zombie(toucher) || zp_get_user_nemesis(toucher))
    {
        new Float:pos_ptr[3], Float:pos_ptd[3], Float:push_power = get_pcvar_float(cvar_push)
        
        pev(touched, pev_origin, pos_ptr)
        pev(toucher, pev_origin, pos_ptd)
        
        for(new i = 0; i < 2; i++)
        {
            pos_ptd[i] -= pos_ptr[i]
            pos_ptd[i] *= push_power
        }
        set_pev(toucher, pev_velocity, pos_ptd)
        set_pev(toucher, pev_impulse, pos_ptd)
    }
}

public remove_ent()
{
    remove_entity_name(entclas)
}  

public DeleteEntity( entity )
    if( is_valid_ent( entity ) )
    remove_entity( entity );

stock Color(const id, const input[], any:...)
{
    static msg[191]
    vformat(msg, 190, input, 3)
    
    replace_all(msg, 190, "!g", "^4")
    replace_all(msg, 190, "!y", "^1")
    replace_all(msg, 190, "!t", "^3")
    
    message_begin(MSG_ONE_UNRELIABLE, g_SayText, _, id)
    write_byte(id)
    write_string(msg)
    message_end()
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя s0h
сообщение 19.5.2014, 11:54
Сообщение #2


Стаж: 17 лет

Сообщений: 670
Благодарностей: 897
Полезность: 1164

Код
#define MAX_COUNT 2
new g_count = 0;

//при покупке делаем ++ в extra items, но вначале сделаем проверку при той же покупки на лимит
if(g_count <= MAX_COUNT)
{
g_count++;
//тут покупка extra itema
}
//когда раунд кончается делаем обнуление
g_count = 0;


Отредактировал: s0h, - 19.5.2014, 11:54
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя alexx
сообщение 19.5.2014, 11:56
Сообщение #3


Стаж: 12 лет

Сообщений: 147
Благодарностей: 145
Полезность: 397

Сейчас опробую
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя kiryxapro
сообщение 19.5.2014, 12:12
Сообщение #4
Стаж: 12 лет

Сообщений: 53
Благодарностей: 5
Полезность: 74

У soha 1/4 часть нужного кода
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: