Congelar
#1
Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"

new g_frozen[33]
new 
g_fwUserUnfrozeng_fwDummyResult
new g_glassSprg_msgDamageg_msgScreenFadeFloat:oldGravity[33]
new 
g_ent_playermodel[33]
new 
Ham:Ham_Player_ResetMaxSpeed Ham_Item_PreFrame

const FFADE_STAYOUT 0x0004
const BREAK_GLASS 0x01
const UNIT_SECOND = (1<<12)
const 
FFADE_IN 0x0000

public plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage")
    
g_msgDamage get_user_msgid("Damage")
    
g_msgScreenFade get_user_msgid("ScreenFade")
    
    
g_fwUserUnfrozen CreateMultiForward("zp_user_unfrozen"ET_IGNOREFP_CELL)
    
}
public 
plugin_precache()
{
    
g_glassSpr precache_model("models/glassgibs.mdl")
}
public 
client_putinserver(id) {
    
g_frozen[id] = 0
}
public 
client_disconnect(id) {
    
g_frozen[id] = 0
}
public 
fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    
// Non-player damage or self damage
    
if (victim == attacker)
        return 
HAM_IGNORED;
    
    new 
weaponD read_data(2)
    
    if(
weaponID == CSW_KNIFE) {
        
frost_explode(victim)
        
//set_task(5, "remove_freeze", victim)
    
}
    return 
HAM_SUPERCEDE;
}
public 
fw_playerprethink(id)
{
    if(
g_frozen[id])
    {
        
set_pev(id,pev_velocity,Float:{0.0,0.0,0.0}); // stop motion
        
        
new Float:gravity;
        
pev(id,pev_gravity,gravity);
        
        
// remember any gravity changes
        
if(gravity != 0.000000001 && gravity != 999999999.9)
            
oldGravity[id] = gravity;

        
// if are on the ground and about to jump, set the gravity too high to really do so
        
if((pev(id,pev_button) & IN_JUMP) && !(pev(id,pev_oldbuttons) & IN_JUMP) && (pev(id,pev_flags) & FL_ONGROUND))
            
set_pev(id,pev_gravity,999999999.9);

        
// otherwise, set the gravity so low that they don't fall
        
else set_pev(id,pev_gravity,0.000000001);
    }
    
    return 
FMRES_IGNORED;
}
frost_explode(ent)
{
    
// Get origin
    
static Float:originF[3]
    
pev(entpev_originoriginF)
    
    
// Collisions
    
static victim
    victim 
= -1
    
    
// Only effect alive unfrozen zombies
    
if (!is_user_alive(victim) || g_frozen[victim])
    return
    
    
message_begin(MSG_ONE_UNRELIABLEg_msgDamage_victim)
    
write_byte(0// damage save
    
write_byte(0// damage take
    
write_long(DMG_DROWN// damage type - DMG_FREEZE
    
write_coord(0// x
    
write_coord(0// y
    
write_coord(0// z
    
message_end()
    
    
fm_set_rendering(victimkRenderFxGlowShell0100200kRenderNormal25)
    
    
    
// Add a blue tint to their screen
    
message_begin(MSG_ONEg_msgScreenFade_victim)
    
write_short(0// duration
    
write_short(0// hold time
    
write_short(FFADE_STAYOUT// fade type
    
write_byte(0// red
    
write_byte(50// green
    
write_byte(200// blue
    
write_byte(100// alpha
    
message_end()
    
    
// Set the frozen flag
    
g_frozen[victim] = true
    
    
// Save player's old gravity (bugfix)
    //pev(victim, pev_gravity, g_frozen_gravity[victim])
        
        // Prevent from jumping
        //if (pev(victim, pev_flags) & FL_ONGROUND)
        //    set_pev(victim, pev_gravity, 999999.9) // set really high
        //else
        //    set_pev(victim, pev_gravity, 0.000001) // no gravity
        
        // Prevent from moving
    
ExecuteHamB(Ham_Player_ResetMaxSpeedvictim)
    
// Set a task to remove the freeze
        
set_task(3"remove_freeze"victim)
    
    
// Get rid of the grenade
    
engfunc(EngFunc_RemoveEntityent)
}

// Remove freeze task
public remove_freeze(id)
{
    
// Not alive or not frozen anymore
    
if (!is_user_alive(id)|| !g_frozen[id])
        return;
    
    
// Unfreeze
    
g_frozen[id] = false;
    
    
fm_set_rendering(g_ent_playermodel[id])
    
    
// Gradually remove screen's blue tint
    
message_begin(MSG_ONEg_msgScreenFade_id)
    
write_short(UNIT_SECOND// duration
    
write_short(0// hold time
    
write_short(FFADE_IN// fade type
    
write_byte(0// red
    
write_byte(50// green
    
write_byte(200// blue
    
write_byte(100// alpha
    
message_end()
    
    
    
// Get player's origin
    
static origin2[3]
    
get_user_origin(idorigin2)
    
    
// Glass shatter
    
message_begin(MSG_PVSSVC_TEMPENTITYorigin2)
    
write_byte(TE_BREAKMODEL// TE id
    
write_coord(origin2[0]) // x
    
write_coord(origin2[1]) // y
    
write_coord(origin2[2]+24// z
    
write_coord(16// size x
    
write_coord(16// size y
    
write_coord(16// size z
    
write_coord(random_num(-5050)) // velocity x
    
write_coord(random_num(-5050)) // velocity y
    
write_coord(25// velocity z
    
write_byte(10// random velocity
    
write_short(g_glassSpr// model
    
write_byte(10// count
    
write_byte(25// life
    
write_byte(BREAK_GLASS// flags
    
message_end()
    
    
ExecuteForward(g_fwUserUnfrozeng_fwDummyResultid);
}
// Set entity's rendering type (from fakemeta_util)
stock fm_set_rendering(entityfx kRenderFxNone255255255render kRenderNormalamount 16)
{
    static 
Float:color[3]
    
color[0] = float(r)
    
color[1] = float(g)
    
color[2] = float(b)
    
    
set_pev(entitypev_renderfxfx)
    
set_pev(entitypev_rendercolorcolor)
    
set_pev(entitypev_rendermoderender)
    
set_pev(entitypev_renderamtfloat(amount))


Bueno pues resulta q quiero q cuando el ct le de una puñalada al terrorista se quede congelado por 5 segundos, y luego se descongele pasado los 5 segudo nose por que no funciona me copila bien y todo, si alguien me dice donde falla.
Sé humilde en tu enfoque.
Responder
#2
http://amxmodx-es.com/Thread-Cuchillo-se...HNS-Cs-1-6
[Imagen: 76561198008294440.png]
Responder
#3
has mirao el code o solo as leido lo q estoy intentando hacer?

si te das cuenta ya tengo hecho eso y aun asin no funciona
Sé humilde en tu enfoque.
Responder
#4
(28/07/2014, 08:23 AM)Lito escribió: has mirao el code o solo as leido lo q estoy intentando hacer?

si te das cuenta ya tengo hecho eso y aun asin no funciona

No das detalles de problema, respondes mal a quien quiere ayudarte. ¿Así esperas recibir ayuda?

Ni te tomas la molestia en detallar el problema con tu code...
Responder
#5
(28/07/2014, 01:29 PM)Mario AR. escribió:
(28/07/2014, 08:23 AM)Lito escribió: has mirao el code o solo as leido lo q estoy intentando hacer?

si te das cuenta ya tengo hecho eso y aun asin no funciona

No das detalles de problema, respondes mal a quien quiere ayudarte. ¿Así esperas recibir ayuda?

Ni te tomas la molestia en detallar el problema con tu code...

@Mario AR. lo que el quiere yo también lo busco y necesito lo que el quiere es que la knife congele con el segundo clic por ejemplo si un ct acuchilla a un tt, el ct quedara congelado por 3 segundos.

Aquí hay un thread pero no entiendo como hacerlo. Creo el takedamage todo pero no funciona.

http://amxmodx-es.com/Thread-Cuchillo-se...HNS-Cs-1-6
Nadie nace sabiendo, todos estamos para aprender, y bueno aquí estoy yo. Whatever
Responder
#6
Esta echo rapido y testeado y funciona bien!

Código PHP:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

new bool:g_bCongelado[33]

public 
plugin_init() {
    
    
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage")
    
register_forward(FM_PlayerPreThink"fw_PlayerPreThink")
}


public 
fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    if (
victim == attacker || !is_user_connected(attacker))
        return 
HAM_IGNORED;
    
    if (
get_user_weapon(attacker) != CSW_KNIFE)
        return 
HAM_IGNORED;
        
    if ( (
pev(attackerpev_button) & IN_ATTACK2) && get_user_team(victim) == 1)
        
Congelar(attacker)
    
    return 
HAM_SUPERCEDE;
}

public 
fw_PlayerPreThink(id)
{
    if (!
is_user_alive(id))
        return;
        
    if (
g_bCongelado[id])
    {
        
set_pev(idpev_velocityFloat:{0.0,0.0,0.0})
        
set_pev(idpev_maxspeed1.0)
    }
}

public 
Congelar(id)
{
    if (!
is_user_alive(id))
        return;
        
    if (
pev(idpev_flags) & FL_ONGROUND)
        
set_pev(idpev_gravity999999.9)
    else
        
set_pev(idpev_gravity0.000001)
    
    
g_bCongelado[id] = true
    
    set_task
(3.0"Descongelar"id)
}

public 
Descongelar(id)
{
    if (!
is_user_alive(id))
        return;
        
    
g_bCongelado[id] = false
    
    set_pev
(idpev_gravity1.0)
    
set_pev(idpev_maxspeed250.0// Puse esto por las dudas, xq el hns creo que los tt no tienen ningun arma.
}

public 
client_disconnect(idremove_task(id
Responder
#7
¿Prethink para eso?
No lo recomiendo usar.

Ni te molestes en enviarme un mensaje privado para pedirme ayuda porque NO lo voy a contestar.
Gracias por su atención.
Responder
#8
(01/08/2014, 12:37 AM)UnrealT escribió: Esta echo rapido y testeado y funciona bien!

Código PHP:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>

new bool:g_bCongelado[33]

public 
plugin_init() {
    
    
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage")
    
register_forward(FM_PlayerPreThink"fw_PlayerPreThink")
}


public 
fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    if (
victim == attacker || !is_user_connected(attacker))
        return 
HAM_IGNORED;
    
    if (
get_user_weapon(attacker) != CSW_KNIFE)
        return 
HAM_IGNORED;
        
    if ( (
pev(attackerpev_button) & IN_ATTACK2) && get_user_team(victim) == 1)
        
Congelar(attacker)
    
    return 
HAM_SUPERCEDE;
}

public 
fw_PlayerPreThink(id)
{
    if (!
is_user_alive(id))
        return;
        
    if (
g_bCongelado[id])
    {
        
set_pev(idpev_velocityFloat:{0.0,0.0,0.0})
        
set_pev(idpev_maxspeed1.0)
    }
}

public 
Congelar(id)
{
    if (!
is_user_alive(id))
        return;
        
    if (
pev(idpev_flags) & FL_ONGROUND)
        
set_pev(idpev_gravity999999.9)
    else
        
set_pev(idpev_gravity0.000001)
    
    
g_bCongelado[id] = true
    
    set_task
(3.0"Descongelar"id)
}

public 
Descongelar(id)
{
    if (!
is_user_alive(id))
        return;
        
    
g_bCongelado[id] = false
    
    set_pev
(idpev_gravity1.0)
    
set_pev(idpev_maxspeed250.0// Puse esto por las dudas, xq el hns creo que los tt no tienen ningun arma.
}

public 
client_disconnect(idremove_task(id

Lo probé en un dedicado con bots y nada no los congela, y me puse admin en el dedicado y los bots no puedan quitarme nada de daño. Yao ming
Nadie nace sabiendo, todos estamos para aprender, y bueno aquí estoy yo. Whatever
Responder
#9
no seria congelar(victim) ?? Whatever
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#10
No por que es para el hns es decir que el terrorista al darle un toque al hider( CT ) tiene que darle chance y para eso es el congelar.
[Imagen: 76561198066347799.png]
Responder
#11
(01/08/2014, 01:36 PM)MenteEnBlanco escribió: Lo probé en un dedicado con bots y nada no los congela

Para qe funcione con bots hay qe cambiar el registerham

(01/08/2014, 01:36 PM)MenteEnBlanco escribió: y me puse admin en el dedicado y los bots no puedan quitarme nada de daño. Yao ming

No deberia devolver supercede. Creo qe un ignored es suficiente, o handled como mucho
Whatdone
Responder
#12
Que raro yo lo probe con bots tmb y me funciona bien , fijate cambiando lo que dice NikKOo31
Responder
#13
(01/08/2014, 04:14 PM)UnrealT escribió: Que raro yo lo probe con bots tmb y me funciona bien , fijate cambiando lo que dice NikKOo31

Personalmente jamás tuve problemas con los bot, pero se qe mucha gente si :p

Proba agregar esto

Código PHP:
new bool:g_hamczbots

public plugin_init() {
    
    
RegisterHam(Ham_TakeDamage"player""fw_TakeDamage"//esto ya lo tenes
    
RegisterHam(Ham_Player_PreThink"fw_PlayerPreThink"//esto era de fakemeta y te lo cambie a ham :p
}

public 
client_putinserver(id)
{
    if(
is_user_bot(id) && !g_hamczbots)
        
set_task(0.1"register_ham_czbots"id)
}

public 
register_ham_czbots(id)
{
    if(
g_hamczbots || !is_user_connected(id))
        return

    
RegisterHamFromEntity(Ham_TakeDamageid"fw_TakeDamage"//el forward va a la misma funcion qe ya tenes
    
RegisterHamFromEntity(Ham_Player_PreThinkid"fw_PlayerPreThink"//y aca lo mismo
    
g_hamczbots true



Aca esta la fuente
Whatdone
Responder
#14
a mi tampoco en la funcion de ham_killed ( matar a un boludo ) no me anda con los bots , cuando lo pruebo en un sv hosteado si me anda , nose por que , haora voy a pobar algo cualquier cosa edito msg

edit : no , no pude hacerlo , estube chequeando que es un bot y sume la variable y no :/
(10/10/2014, 06:38 PM)RauliTop escribió:
(10/10/2014, 04:40 PM)ivan escribió: no sabía que se podia poner los iconos gestuales cuando das reputacion negativa/positiva.
ui, peligro...
pronto habrán reputaciones de ivan:
hace muy muy muii DafuqYao mingGenius buenos Thats what she saidtutoriales Proud me encataan Whatever
Responder
#15
(01/08/2014, 04:48 PM)K.- escribió: a mi tampoco en la funcion de ham_killed ( matar a un boludo ) no me anda con los bots , cuando lo pruebo en un sv hosteado si me anda , nose por que , haora voy a pobar algo cualquier cosa edito msg

Depende los bots qe estes usando
Whatdone
Responder
#16
(01/08/2014, 04:14 PM)UnrealT escribió: Que raro yo lo probe con bots tmb y me funciona bien , fijate cambiando lo que dice NikKOo31

Si funciona UnrealT si lo congela pero no ataca osea cuando el CT le pega al TT el ct queda congelado los 3 segundos pero no le quita nada de daño al TT
Nadie nace sabiendo, todos estamos para aprender, y bueno aquí estoy yo. Whatever
Responder
#17
cambia el return HAM_SUPERCEDE; por HAM_IGNORED;
Responder
#18
En donde pongo en la carpeta del cs de mi server un archivo php noc nda de eso yo tambien quiero q cuando un ct le pegue con el cuchillo al tt se quede por 3 segundos quietos xfa respondan
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)