Raised This Month: $ Target: $400
 0% 

freezing Ability


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
MayroN
Senior Member
Join Date: Aug 2017
Location: Kyiv
Old 02-23-2019 , 10:32   freezing Ability
Reply With Quote #1

You can fix the freezing Ability in the plugin.
Ie,if a player is frozen he can immediately move to stab and, accordingly, the Freezing disappears.And if you come to the butt to the player Frozen - it also disappears

This is all there is similar in the first ability to Petrification, which works so as need to..

public Ability_TypeMainOne ( id, iTarget) - Petrification
public Ability_TypeMainFour (id, iTarget) - Freeze

Thanks.

PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <dhudmessage>
#include <ColorChat>
#include <xs>

#define PLUGIN "Elemental Knife"
#define VERSION "1.0"
#define AUTHOR "EpisCape"

#define MAX_KNIVES 4
#define MSG_LENGTH 255
#define TIME_THINK 1.0
#define TASK_TOSSGLOWREMOVE 0x653
#define TASK_FIRE 0x379

#define CLASSNAME_DEFAULT "info_null"
#define CLASSNAME_STANBLOCK "info_stanblock"
#define CLASSNAME_STANBLOCKCRASH "info_stanblockcrash"
#define CLASSNAME_ICECUBE "info_icebuce"
#define CLASSNAME_ICECUBECRASH "info_icecubecrash"

/* ==========================================
 ---------------- Настройки ----------------
 ========================================== */
#define PREFIX_INFO "[Нож Смерти]" // Префикс
#define RELOAD_ABILITY 10.0 // Перезарядка способности (сек)

// 1 нож
#define RELOAD_TIME_STANBLOCK 3.0 // Длительность окаменения (сек)
#define DAMAGE_HEALTH_STANBLOCK 35.0 // Наносимый урон от окаменения

// 2 нож
#define TOSS_POWER_SHIFT 4.0 // Сила смещения подброса
#define TOSS_POWER_FLIP 400.0 // Сила подкидывания подброса
#define TOSS_ZONE_DIST 300.0 // Зона поражения для рядом стоящих игроков (в юнитах)

// 3 нож
#define FIRE_TIME 3.0 // Длительность горения (сек)
#define FIRE_DAMAGE 20.0 // Наносимый урон от горения (в секунду)

// 4 нож
#define WATER_CUBE_LIFE_TIME 4.0 // Длительность наводнения (сек)
#define WATER_CUBE_DMG_HEALTH 10.0 // Наносимый урон от наводнения 

enum KNIVES_TYPE
{
    
KNIFE_ONE 0,
    
KNIFE_TWO,
    
KNIFE_THREE,
    
KNIFE_FOUR
};

new const 
KNIVES_LIST[MAX_KNIVES][] =
{
    
"Клинки",
    
"Кинджал",
    
"Телекинез",
    
"Смертельная Коса"
};

new const 
KNIVES_INFO_ABILITY[MAX_KNIVES][] =
{
    
"Окаменение",
    
"Подброс",
    
"Поджигание",
    
"Наводнение"
};

new const 
ELEMS_MODELS_VIEW[MAX_KNIVES][] =
{
    
"models/knife_dm/v_knife_ghost.mdl",
    
"models/knife_dm/v_knife_nexon.mdl",
    
"models/knife_dm/v_knife_telekinesis.mdl",
    
"models/knife_dm/v_knife_thanatos.mdl"
};

new const 
ELEMS_MODELS_WEAPON[MAX_KNIVES][] =
{
    
"models/knife_dm/p_knife_ghost.mdl",
    
"models/knife_dm/p_knife_nexon.mdl",
    
"models/knife_dm/p_knife_telekinesis.mdl",
    
"models/knife_dm/p_knife_thanatos.mdl"
};

new const 
ELEMS_MODELS[][] =
{
    
"models/knife_dm/earth_stone.mdl",
    
"models/knife_dm/earth_stone_crash.mdl",
    
"models/knife_dm/water_cube.mdl",
    
"models/knife_dm/water_cube_crash.mdl"    
};

new const 
ELEMS_SOUND_WORLD[][] =
{
    
"knife_dm/miss"
};

new const 
ELEMS_SOUND_AMBIENT[][] =
{
    
"knife_dm/earth_block.wav",
    
"knife_dm/earth_block_crash.wav",
    
"knife_dm/fire_scream.wav"
};

new const 
ELEMS_SPRITE[][] =
{
    
"sprites/knife_dm/fire_flame.spr"
};

new 
g_iKnife[33], g_iButton[33], g_iCurMaxSpeed[33], g_iFireAttacker[33], g_iWaterAttacker[33], g_iSpriteFirebool:g_bFirstTime[33];
new 
g_sMsgHudInfo[33][MSG_LENGTH+1];
new     
Floatg_fTimeMsg[33], Floatg_fCurTimeFloatg_fTimeAbility[33],
    
Floatg_fTimeStan[33], Floatg_fFireTime[33], Floatg_fTimeFrost[33];
new 
boolg_bStan[33], boolg_bToss[33], boolg_bFire[33], boolg_bFrost[33];

public 
plugin_precache()
{
    for(new 
iMAX_KNIVESi++)
    {
        
engfunc(EngFunc_PrecacheModelELEMS_MODELS_VIEW[i]);
        
engfunc(EngFunc_PrecacheModelELEMS_MODELS_WEAPON[i]);
    }

    for(new 
isizeof(ELEMS_MODELS); i++)
        
engfunc(EngFunc_PrecacheModelELEMS_MODELS[i]);

    new 
sBufferPath[256];

    for(new 
isizeof(ELEMS_SOUND_WORLD); i++)
    {
        
format(sBufferPathcharsmax(sBufferPath), "%s.wav"ELEMS_SOUND_WORLD[i]);    
        
engfunc(EngFunc_PrecacheSoundsBufferPath);
    }

    for(new 
isizeof(ELEMS_SOUND_AMBIENT); i++)    
        
engfunc(EngFunc_PrecacheSoundELEMS_SOUND_AMBIENT[i]);    

    
g_iSpriteFire engfunc(EngFunc_PrecacheModelELEMS_SPRITE[0]);
}

public 
client_connect(id)
{
        
client_cmd(id"bind ^"x^" ^"knife^""
    
g_iKnife[id] = random_num(0MAX_KNIVES-1); 
}

public 
client_disconnect(id)
{
    if(
task_exists(id TASK_TOSSGLOWREMOVE))
        
remove_task(id TASK_TOSSGLOWREMOVE);
        
    
g_iWaterAttacker[id] = -1;
}

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR);
    
    
register_clcmd("knife""Clcmd_KnifeChoose");
    
    
RegisterHam(Ham_Player_PreThink"player""fw_HamPlayerThinkPre");
    
RegisterHam(Ham_Player_PostThink"player""fw_HamPlayerThinkPost"true);
    
RegisterHam(Ham_Spawn"player""fw_HamPlayerSpawnPost"true);
    
RegisterHam(Ham_Killed"player""fw_HamPlayerKlliedPost"true);
    
RegisterHam(Ham_Touch"player""fw_HamPlayerTouchPost"true);
    
    
RegisterHam(Ham_Item_Deploy"weapon_knife""fw_HamKnifePostDeploy", .Post true);
    
    
RegisterHam(Ham_ThinkCLASSNAME_DEFAULT"fw_HamEntThinkPost"true);
}

public 
fw_HamPlayerThinkPre(id)
{
    if(!
is_user_alive(id))
        return;
    
    
g_iButton[id] = pev(idpev_button);
    
    if(
g_iButton[id] & IN_USE && g_fTimeAbility[id] <= 0)
        
Ability_Active_One(id);
        
    if(
g_bStan[id] || g_bFrost[id])
        
set_pev(idpev_velocity, {0.00.0, -100.0});
}

public 
fw_HamPlayerThinkPost(id)
{
    if(!
is_user_alive(id))
        return;
    
    
g_fCurTime get_gametime();
    
    if(
g_fTimeMsg[id] < g_fCurTime)
    {
        if(
g_fTimeAbility[id] > 0)
        {
            
set_dhudmessage(255000.010.9210.1TIME_THINK0.10.1);
            
            
g_fTimeAbility[id] -= TIME_THINK;
            
format(g_sMsgHudInfo[id], MSG_LENGTH"Нож • %s • Ярость • %s • %i секунд(ы) осталось"KNIVES_LIST[g_iKnife[id]], KNIVES_INFO_ABILITY[g_iKnife[id]], floatround(g_fTimeAbility[id]));
        }else{
            
set_dhudmessage(025500.010.9200.1TIME_THINK0.10.1);
            
            
format(g_sMsgHudInfo[id], MSG_LENGTH"Нож • %s • Ярость • %s • [E]"KNIVES_LIST[g_iKnife[id]], KNIVES_INFO_ABILITY[g_iKnife[id]]);
        }
    
        
        
show_dhudmessage(id"%s"g_sMsgHudInfo[id]);
        
        
g_fTimeMsg[id] = g_fCurTime TIME_THINK;
    }
}

public 
Ability_Active_One(id)
{
    new 
iTargetiBody;
    
get_user_aiming(idiTargetiBody1000);
    
    if(!
is_user_alive(iTarget))
    {
        
client_cmd(id"spk %s"ELEMS_SOUND_WORLD[0]);
        
g_fTimeAbility[id] = RELOAD_ABILITY 2;
        return;
    }
    
    if(
get_user_team(id) == get_user_team(iTarget))
    {
        
client_cmd(id"spk %s"ELEMS_SOUND_WORLD[0]);
        
g_fTimeAbility[id] = RELOAD_ABILITY 2;
        return;
    }
    
    if(
g_bStan[iTarget] || g_bToss[iTarget] || g_bFire[iTarget] || g_bFrost[iTarget])
    {
        
client_cmd(id"spk %s"ELEMS_SOUND_WORLD[0]);
        
g_fTimeAbility[id] = RELOAD_ABILITY 2;
        return;        
    }
    
    switch(
g_iKnife[id])
    {
        case 
KNIFE_ONEAbility_TypeMainOne(idiTarget);
        case 
KNIFE_TWOAbility_TypeMainTwo(idiTarget);
        case 
KNIFE_THREEAbility_TypeMainThree(idiTarget);
        case 
KNIFE_FOURAbility_TypeMainFour(idiTarget);
    }
    
    
g_fTimeAbility[id] = RELOAD_ABILITY;
}

public 
Ability_TypeMainOne(idiTarget)
{    
    new 
FloatfOrigin[3];
    
pev(iTargetpev_originfOrigin);
        
    
engfunc(EngFunc_DropToFlooriTarget);
    
g_iCurMaxSpeed[iTarget] = pev(iTargetpev_maxspeed);
    
set_pev(iTargetpev_maxspeed, -1.0);
        
    
g_fTimeStan[iTarget] = RELOAD_TIME_STANBLOCK;
    
g_bStan[iTarget] = true;

    new 
iEnt engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocStringCLASSNAME_DEFAULT));
                
    
set_pev(iEntpev_classnameCLASSNAME_STANBLOCK);
    
set_pev(iEntpev_originfOrigin);
    
set_pev(iEntpev_owneriTarget);
            
    
engfunc(EngFunc_DropToFlooriEnt);
    
engfunc(EngFunc_SetModeliEntELEMS_MODELS[0]);    
    
engfunc(EngFunc_EmitSoundiEnt0ELEMS_SOUND_AMBIENT[0], 1.01.00100);
        
    
set_ent_animation(iEnt01.01.0);
            
    
ExecuteHamB(Ham_TakeDamageiTargetiEntidDAMAGE_HEALTH_STANBLOCKDMG_GENERIC);
                
    
set_pev(iEntpev_nextthinkget_gametime() + 0.1);    
}

public 
Ability_TypeMainTwo(idiTarget)
{
    new 
iVictim FM_NULLENTFloatfOrigin[3], FloatfVelocity[3], FloatfData[3];
    
pev(iTargetpev_originfOrigin);
    
    while((
iVictim engfunc(EngFunc_FindEntityInSphereiVictimfOriginTOSS_ZONE_DIST)))
    {
        if(!
is_user_alive(iVictim))
            continue;
        
        if(
get_user_team(iTarget) != get_user_team(iVictim))
            continue;
        
        if(
g_bToss[iVictim])
            continue;
            
        
g_bToss[iVictim] = true;    
        
        switch(
random_num(02))
        {
            case 
0global_get(glb_v_forwardfData)
            case 
1global_get(glb_v_upfData);
            case 
2global_get(glb_v_rightfData);
        }
        
        if(
vector_length(fVelocity) < 100)
        {
            
fData[0] += random_float(100.0300.0);
            
fData[1] += random_float(100.0300.0);
            
fData[2] += random_float(100.0300.0);
        }
        
        
pev(iVictimpev_velocityfVelocity);
        
        
xs_vec_add(fVelocityfDatafVelocity);
        
xs_vec_mul_scalar(fVelocityTOSS_POWER_SHIFTfVelocity);
        
        
fVelocity[2] += TOSS_POWER_FLIP;
        
set_pev(iVictimpev_velocityfVelocity);
        
        
set_task(1.0"Toss_EffectRemove"iVictim TASK_TOSSGLOWREMOVE);
    }
}

public 
Ability_TypeMainThree(idiTarget)
{
    
    
g_bFire[iTarget] = true;
    
g_fFireTime[iTarget] = FIRE_TIME;    
    
    
g_iFireAttacker[iTarget] = id;
    
set_task(0.1"Fire_Think"iTarget TASK_FIRE, .flags "b");
}

public 
Ability_TypeMainFour(idiTarget)
{
    new 
FloatfOrigin[3];
    
pev(iTargetpev_originfOrigin);
        
    
engfunc(EngFunc_DropToFlooriTarget);
        
    
g_fTimeFrost[iTarget] = WATER_CUBE_LIFE_TIME;
    
g_bFrost[iTarget] = true;

    new 
iEnt engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocStringCLASSNAME_DEFAULT));
                
    
set_pev(iEntpev_classnameCLASSNAME_ICECUBE);
    
set_pev(iEntpev_originfOrigin);
    
set_pev(iEntpev_owneriTarget);
            
    
engfunc(EngFunc_DropToFlooriEnt);
    
engfunc(EngFunc_SetModeliEntELEMS_MODELS[2]);    
    
engfunc(EngFunc_EmitSoundiEnt0ELEMS_SOUND_AMBIENT[0], 1.01.00100);

    
set_ent_animation(iEnt01.01.0);
                
    
g_iWaterAttacker[iTarget] = id;
                
    
set_pev(iEntpev_nextthinkget_gametime() + 0.1);
}

public 
fw_HamPlayerSpawnPost(id)
{
    if(!
is_user_connected(id))
        return;    
    
g_bFirstTime[id] = false
    Clcmd_KnifeChoose
(id)

    
g_bStan[id] = false;
    
g_bToss[id] = false;
    
g_bFire[id] = false;
    
g_bFrost[id] = false;
}

public 
fw_HamPlayerKlliedPost(iVictimiAttackeriCorpse)
{
    if(!
is_user_connected(iVictim))
        return;
    
}

public 
fw_HamPlayerTouchPost(idiTarget)
{
    if(!
is_user_alive(id) || !is_user_alive(iTarget))
        return;
    
    if(
get_user_team(id) != get_user_team(iTarget))
        return;
    
    if(
g_bStan[id] && !g_bStan[iTarget])
        
Ability_TypeMainOne(idiTarget);
        
    if(
g_bFire[id] && !g_bFire[iTarget])
        
Ability_TypeMainFour(idiTarget);        
}

public 
fw_HamEntThinkPost(iEnt)
{
    if(!
pev_valid(iEnt))
        return;
    
    static 
sClassName[32];
    
pev(iEntpev_classnamesClassNamecharsmax(sClassName));
    
    if(
equal(CLASSNAME_STANBLOCKsClassName))
    {
        static 
iTargetiTarget pev(iEntpev_owner);
        
        if(!
is_user_alive(iTarget) && is_user_connected(iTarget))
        {
            
g_bStan[iTarget] = false;
            
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_KILLME);
            
            
engfunc(EngFunc_EmitSoundiEnt0ELEMS_SOUND_AMBIENT[1], 1.01.00100);
            return;
        }
        
        if(
g_fTimeStan[iTarget] > 0)
        {
            
g_fTimeStan[iTarget] -= 0.1;
            
            static 
FloatfOrigin[3];
            
pev(iTargetpev_originfOrigin);
            
set_pev(iEntpev_originfOrigin);
            
            
engfunc(EngFunc_DropToFlooriEnt);
            
            
set_pev(iEntpev_nextthinkget_gametime() + 0.1);
        }else{
            
g_bStan[iTarget] = false;
            
set_pev(iTargetpev_maxspeedfloat(g_iCurMaxSpeed[iTarget]));
            
            
set_ent_animation(iEnt04.01.0);
            
            
set_pev(iEntpev_classnameCLASSNAME_STANBLOCKCRASH);
            
engfunc(EngFunc_SetModeliEntELEMS_MODELS[1]);
            
            
set_pev(iEntpev_nextthinkget_gametime() + 4.0);
        }        
    }
    
    if(
equal(CLASSNAME_ICECUBEsClassName))
    {
        static 
iTargetiTarget pev(iEntpev_owner);

        static 
FloatfOrigin[3], FloatfOrigin2[3], iVictim;
        static 
FloatfFrostTime[33], iAttacker;
        
pev(iEntpev_originfOrigin);
        
iAttacker is_user_connected(g_iWaterAttacker[iTarget]) ? g_iWaterAttacker[iTarget] : iTarget;    
    
        
iVictim FM_NULLENT;
        while((
iVictim engfunc(EngFunc_FindEntityInSphereiVictimfOrigin50.0)))
        {
            if(!
is_user_alive(iVictim))
                continue;
            
            if(
get_user_team(iTarget) == get_user_team(iVictim))
            {
                if(
fFrostTime[iVictim] < g_fCurTime)
                {    
                    
ExecuteHamB(Ham_TakeDamageiTargetiAttackeriAttackerWATER_CUBE_DMG_HEALTHDMG_DROWN);
                    
fFrostTime[iTarget] = g_fCurTime 1.0;
                }
            }
            
            
pev(iVictimpev_originfOrigin2);
            
            if(
get_distance_f(fOriginfOrigin2) > 50.0)
            {
                
g_fTimeFrost[iTarget] = 0.0;
                break;
            }
        }
        
        if(
g_fTimeFrost[iTarget] > 0)
        {
            
g_fTimeFrost[iTarget] -= 0.1;
            
            
set_pev(iEntpev_nextthinkget_gametime() + 0.1);
        }else{
            
g_bFrost[iTarget] = false;
            
            
set_ent_animation(iEnt04.01.0);
            
            
set_pev(iEntpev_classnameCLASSNAME_STANBLOCKCRASH);
            
engfunc(EngFunc_SetModeliEntELEMS_MODELS[3]);
            
            
set_pev(iEntpev_nextthinkget_gametime() + 4.0);
        }        
    }
    
    if(
equal(CLASSNAME_STANBLOCKCRASHsClassName) || equal(CLASSNAME_ICECUBECRASHsClassName))
    {
        
engfunc(EngFunc_EmitSoundiEnt0ELEMS_SOUND_AMBIENT[1], 1.01.00100);
        
set_pev(iEntpev_flagspev(iEntpev_flags) | FL_KILLME);
    }    
}

public 
Toss_EffectRemove(task_id)
{
    new 
iTarget task_id TASK_TOSSGLOWREMOVE;
    
    if(!
is_user_alive(iTarget))
        return;    
    
    if(
g_bToss[iTarget])
    {
        
g_bToss[iTarget] = false;
    }
}

public 
Fire_Think(task_id)
{
    new 
iTarget task_id TASK_FIRE;
    
    if(!
is_user_alive(iTarget))
        
g_bFire[iTarget] = false;
    
    if(
g_bFire[iTarget])
    {
        if(
g_fFireTime[iTarget] > 0)
        {
            if(
pev(iTargetpev_flags) & FL_INWATER)
            {
                
remove_task(task_id);
                
g_bFire[iTarget] = false;
                return;
            }
            
            static 
iOrigin[3];
            
get_user_origin(iTargetiOrigin);
            
            
message_begin(MSG_ALLSVC_TEMPENTITYiOrigin)
            
write_byte(TE_SPRITE);
            
write_coord(iOrigin[0])
            
write_coord(iOrigin[1])
            
write_coord(iOrigin[2])
            
write_short(g_iSpriteFire
            
write_byte(10); 
            
write_byte(1000);
            
message_end();
            
            static 
FloatfFireTime[33];
            
            if(
fFireTime[iTarget] < g_fCurTime)
            {
                new 
iAttacker is_user_connected(g_iFireAttacker[iTarget]) ? g_iFireAttacker[iTarget] : iTarget;                
                
ExecuteHamB(Ham_TakeDamageiTargetiAttackeriAttackerFIRE_DAMAGEDMG_BURN);
                    
                
g_fFireTime[iTarget] -= 1.0;
                
fFireTime[iTarget] = g_fCurTime 1.0;
            }
        }else{
            
            
g_iFireAttacker[iTarget] = -1;
            
g_bFire[iTarget] = false;
        }
    }
    else
        
remove_task(task_id);
}

public 
Clcmd_KnifeChoose(id)
{
    new 
iMenusItem[64], sInfo[3];
    
    
iMenu menu_create("\rНож Смерти^n\yВыбор Ножа\w""KnifeChoose_Handler");
    
    for(new 
iMAX_KNIVESi++)
    {
        
format(sItemcharsmax(sItem), g_iKnife[id] == "\y%s" "\w%s"KNIVES_LIST[i], KNIVES_LIST[i]);
        
num_to_str(isInfocharsmax(sInfo));
        
menu_additem(iMenusItemsInfo);
    }
    
menu_setprop(iMenuMPROP_PERPAGE0);
    
menu_display(idiMenu);
}

public 
KnifeChoose_Handler(idiMenuiItem)
{
    if(
iItem == MENU_EXIT)
    return;
    
    if(
g_iKnife[id] == iItem)
    {
        
ColorChat(0RED"^4%s ^3У Вас уже есть этот Нож"PREFIX_INFO);
        return;
    }
    
    
g_iKnife[id] = iItem;
    
    if(
is_user_alive(id))
    {
        
ExecuteHamB(Ham_Item_Deployget_pdata_cbase(id373));
        
        
g_fTimeAbility[id] = RELOAD_ABILITY;
    }
    
    
ColorChat(0RED"^4%s ^3Нож ^4%s"PREFIX_INFOKNIVES_LIST[g_iKnife[id]]);
    
ColorChat(0RED"^4%s ^3Ярость ^4%s"PREFIX_INFOKNIVES_INFO_ABILITY[g_iKnife[id]]);
}

public 
fw_HamKnifePostDeploy(iWeapon)
{
    new 
id get_pdata_cbase(iWeapon414);

    if(!
is_user_alive(id))
        return;
    
    
set_pev(idpev_viewmodel2ELEMS_MODELS_VIEW[g_iKnife[id]]);
    
set_pev(idpev_weaponmodel2ELEMS_MODELS_WEAPON[g_iKnife[id]]);
}

stock set_ent_animation(iEntiAnimFloatfAnimTimeFloatfFrame)
{
    
set_pev(iEntpev_sequenceiAnim);
    
set_pev(iEntpev_animtimefAnimTime);
    
set_pev(iEntpev_frameratefFrame);
    
set_pev(iEntpev_frame0.0);    

MayroN is offline
Send a message via ICQ to MayroN Send a message via Skype™ to MayroN
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 14:13.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode