Zplague
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Zplague Entrar

Seu portal de Zombie Plague no Brasil


description[ZP] Extra Item : Dead Ringer Empty[ZP] Extra Item : Dead Ringer

more_horiz
lovenina12
Descrição
Esse é um Item Extra para Zumbis, que fazem a pessoa acreditar que você realmente morreu!
O que acontece por alguns fatores:
Um clone seu é criado na hora que o item é ativado e ele faz a animação de morte
Com o cvar KillMessg ativado (OBSERVAÇÕES) ele manda uma mensagem FAKE que o player morreu!
Pode fazer um Fake da Thunder M4A1 & AK47 tambem, caindo o raio e tudo mais (por cvar)

E simplesmente porque você vai tomar o tiro e tudo isso vai acontecer enquanto você fica invisivel por 5 segundos e vai la matar o cara que atirou em você =)

Plugin em si:


Nome do Item
Dead Ringer ( Toque da Morte, Clone Mortal )

Origem
Eu montei o plugin mais a ideia não foi minha, esse item existe no jogo Team Fortress 2


O que faz?
Simula uma morte


Pra que Time?
Apenas para zumbis


Cade o SMA?
Vai tar ali embaixo, apressadinho '-'

Como uso?
Olha, você compra ele e quando você quiser ativar o efeito, você vai apertar [Z] e esperar tomar 1 tiro ou sofrer qualquer dano ( até por queda se não me engano ), quando o dano acontecer os efeitos vão acontecer juntos!

[SMA IN-TOPIC]

Código:

/***************************************************************************

Esse plugin faz o seguinte: Quando o zombie tomar um tiro ele ficara invisivel por 5 segundos
enquanto um corpo falso cai e finge de morto. O zumbi vai um pouco pra tras pra evitar o fato
de que se o player continuar atirando vai acertar o zumbi mesmo invisivel.

Simplesmente simula uma morte e segundos depois voce esta perto do inimigo pronto pra infectar!

Creditos:
Team Fortress II - Item Original
AnGeL - o plugin em si
[P]erfec[T] [S]cr[@]s[H] - Knockback
Enigmaya - Fake Player ( foi necessario pra copiar o model do zumbi )
GuhRDS - Death Drop Egg - Nao sabia criar um novo item ( o caso do clone ) entao usei o plugin dele e modifiquei coisinhas

***************************************************************************/

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <fakemeta_util>
#include <engine>
#include <   fun >
#include <cstrike>
#include <zombieplague>

#define SEQUENCEID = 104

new const item_class_name[] = "dm_item"

new cvar_knockback, cvar_invistime, cvar_losedeath, cvar_thunderon, cvar_thundglow, cvar_killmessg
new g_itemid
new bool:g_Ringer[33], bool:g_Activated[33]

public plugin_init()
{
   register_plugin("[TEAM FORTRESS] Dead Ringer Effect", "1.0", "AnGeL FeniX")
   
   RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
   RegisterHam(Ham_Spawn, "player", "fw_Spawn")
   RegisterHam(Ham_Killed, "player", "fw_Killed")
   
   cvar_knockback = register_cvar("zp_deadringer_knockback", "150") // Forca do Knockback
   cvar_invistime = register_cvar("zp_deadringer_invistime", "5.0") // Duracao da Invisibilidade
   cvar_losedeath = register_cvar("zp_deadringer_losedeath", "0") // Perde quando morre?
   cvar_thunderon = register_cvar("zp_deadringer_thunderon", "1") // Ative caso tenha as armas thunder no server!
   cvar_thundglow = register_cvar("zp_deadringer_thundglow", "1") // Glow RED do Thunder
   cvar_killmessg = register_cvar("zp_deadringer_killmessg", "1") // Msg ao matar (item & real)LEIA----: Caso seu server tenha o plugin que ja faz isso, desative o plugin e ative esse cvar!
   
   g_itemid = zp_register_extra_item("Dead Ringer", 40, ZP_TEAM_ZOMBIE)
   
   register_clcmd("radio1", "use_ability")
}

public fw_Killed(victim, attacker, shouldgib)
{
   if(get_pcvar_num(cvar_killmessg) == 1)
      killmsg(victim, attacker)
}

public use_ability(id)
{
   if(g_Activated[id] && g_Ringer[id])
   {
      g_Activated[id] = false
      client_print(id, print_center, "Dead Ringer Desativado")
      return PLUGIN_HANDLED
   }
   else if(!g_Activated[id] && g_Ringer[id])
   {
      g_Activated[id] = true
      client_print(id, print_center, "Dead Ringer Ativado")
      return PLUGIN_HANDLED
   }
   
   return PLUGIN_CONTINUE
}

// Perde o item
public zp_user_humanized_pre(id, survivor)
{
   g_Ringer[id] = false
   g_Activated[id] = false
}

public zp_user_infected_pre(id, infector, nemesis)
{
   g_Ringer[id] = false
   g_Activated[id] = false
}
// Nao e recomendado por mim colocar pra perder quando morrer, se nao o preco tem que ser baixo.
public fw_Spawn(id)
{
   if(get_pcvar_num(cvar_losedeath) == 1)
   {
      g_Ringer[id] = false
      g_Activated[id] = false
   }
}


public zp_extra_item_selected(id, itemid)
{
   if(itemid == g_itemid)
   {
      g_Ringer[id] = true
      g_Activated[id] = false
      client_print(id, print_chat, "Voce comprou o Dead Ringer, use o [Z]")
      client_print(id, print_chat, "para ativar e desativar o efeito.!")
   }
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
   if(g_Ringer[victim] && zp_get_user_zombie(victim) && g_Activated[victim])
   {
      new origin[3]
      get_user_origin(victim, origin, 0)
   
      new model[64]
      cs_get_user_model(victim, model, 63)
   
      // Clone
      ExecuteHam(Ham_DeathNotice, victim, attacker)
      new modelstring[64];
      format(modelstring,63,"models/player/%s/%s.mdl",model,model)
      if(get_user_button(victim) & IN_DUCK)
         criaClone(origin, 104, modelstring, attacker)
      else
         criaClone(origin, 110, modelstring, attacker)
      
      // Player Original
      set_user_rendering(victim, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0)
      set_task(get_pcvar_float(cvar_invistime), "reset_invis", victim)
   
      set_user_knockback(victim, attacker, get_pcvar_num(cvar_knockback))
      
      g_Ringer[victim] = false
      g_Activated[victim] = false
      if(get_pcvar_num(cvar_killmessg) == 1)
         killmsg(victim, attacker)
         
      client_print(victim, print_center, "Voce esta invisivel por alguns segundos, se vingue!")
   }
   
   return PLUGIN_CONTINUE
}

public reset_invis(id)
{
   set_user_rendering(id, kRenderFxNone, 0, 0, 0, kRenderNormal, 255)
   client_print(id, print_center, "Sua invisibilidade acabou!")
}

// Outros
public criaClone(origin[3], const Sequence, const Model[64], attacker) {
   
   new ent = fm_create_entity("info_target")
   set_pev(ent, pev_classname, item_class_name)
                  
   engfunc(EngFunc_SetModel,ent, Model)
   
   set_pev(ent, pev_mins, Float:{-10.0, -10.0,0.0})
   set_pev(ent, pev_maxs, Float:{10.0, 10.0,25.0})
   set_pev(ent, pev_size, Float:{-10.0, -10.0, 0.0, 10.0, 10.0, 25.0})
   engfunc(EngFunc_SetSize, ent, Float:{-10.0, -10.0, 0.0}, Float:{10.0, 10.0, 25.0})
      
   new Float:fOrigin[3]
   origin[2]-=7
   IVecFVec(origin, fOrigin)
   set_pev(ent, pev_origin, fOrigin)
   
   new weapon = get_user_weapon(attacker)
   if(get_pcvar_num(cvar_thunderon) == 1 && get_pcvar_num(cvar_thundglow) == 1 && (weapon == CSW_M4A1 || weapon == CSW_AK47))
   {      
      set_pev(ent, pev_renderfx, kRenderFxGlowShell)
      set_pev(ent, pev_rendercolor, Float:{255.0, 255.0, 255.0})
   }

   set_pev( ent, pev_sequence, Sequence )
   set_pev( ent, pev_animtime, get_gametime() );
   set_pev( ent, pev_frame, 0 );
   set_pev( ent, pev_framerate, 1.0 );
}

stock set_user_knockback(victim, attacker, force) // Creditos [P]erfec[T] [S]cr[@]s[H]
{
   new Float:vec[3];
   new Float:oldvelo[3];
   get_user_velocity(victim, oldvelo);
   create_velocity_vector(victim , attacker , vec, force);
   vec[0] += oldvelo[0];
   vec[1] += oldvelo[1];
   set_user_velocity(victim , vec);
}

stock create_velocity_vector(victim,attacker,Float:velocity[3], force) // Creditos [P]erfec[T] [S]cr[@]s[H]
{
   if(victim > 0 && victim < 33)
   {
      if(!is_user_alive(attacker))
      return 0;
      
      new Float:vicorigin[3];
      new Float:attorigin[3];
      entity_get_vector(victim   , EV_VEC_origin , vicorigin);
      entity_get_vector(attacker , EV_VEC_origin , attorigin);
      
      new Float:origin2[3]
      origin2[0] = vicorigin[0] - attorigin[0];
      origin2[1] = vicorigin[1] - attorigin[1];
      
      new Float:largestnum = 0.0;
      
      if(floatabs(origin2[0])>largestnum) largestnum = floatabs(origin2[0]);
      if(floatabs(origin2[1])>largestnum) largestnum = floatabs(origin2[1]);
      
      origin2[0] /= largestnum;
      origin2[1] /= largestnum;
      
      new a = force
  
      velocity[0] = ( origin2[0] * (100 *a) ) / get_entity_distance(victim , attacker);
      velocity[1] = ( origin2[1] * (100 *a) ) / get_entity_distance(victim , attacker);
      if(velocity[0] <= 20.0 || velocity[1] <= 20.0)
      velocity[2] = random_float(200.0 , 275.0);
   }
   return 1;
}

stock client_printcolor(const id, const input[], any:...) {
   
   new count = 1, players[32]
   static msg[191]
   vformat(msg, 190, input, 3)
   
   replace_all(msg, 190, "!g", "^4")  // Chat Verde
   replace_all(msg, 190, "!y", "^1")  // Chat Normal
   replace_all(msg, 190, "!t", "^3")  // Chat Do Time Tr=Vermelho Ct=Azul Spec=Branco
   
   if (id) players[0] = id; else get_players(players, count, "ch")
   {
      
      for (new i = 0; i < count; i++) {
         
         if (is_user_connected(players[i])) {
            
            message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
            write_byte(players[i]);
            write_string(msg);
            message_end();
         }
      }
   }
}

killmsg(victim, attacker)
{
   new vname[32], aname[32]
   get_user_name(victim, vname, 31)
   get_user_name(attacker, aname, 31)
   client_printcolor(0, "!g[ZP] !t%s !gmatou o !t%s!g!", aname, vname)
}


Download ( Compilado & SMA )
https://www.mediafire.com/?52ugrm7cd6gv9md

Observações:
1º Sobre o Kill Messg, você tem que olhar no SMA, se seu server ja tiver um sistema desses, desative ele e use o do plugin se não quando vc matar de verdade aparecer 2x a mensagem e quando for ativado pelo clone fake so aparecerá 1 e isso entregara o jogo.
2º O plugin esta incompleto
3º O Knockback existe pra que quando o item seja ativado e o cara continuar atirando, ele não ficar acertando vc mesmo invisivel!
4º Tem 2 coisas importantes pra configurar que é meio necessário. O cvar das armas Thunder, ativar/desativar o Glow ( alguns servers não tem e outros tem ) & o cvar da KillMessg


Previews:
- Irá fazer 1 DeathNotice falso como isso na hora que o efeito acontece:
[ZP] Extra Item : Dead Ringer 6z0o
- Irá mudar o Model da M4A1 & AK47 para os models da Thunder (nesse caso, esse item extra também devera ficar lá em cima junto com as armas thunder para não bugar os models dos item extra)
- Sugestione


Última edição por lovenina12 em 29/5/2014, 3:37 pm, editado 5 vez(es)

description[ZP] Extra Item : Dead Ringer EmptyRe: [ZP] Extra Item : Dead Ringer

more_horiz
Legal, dps vó testar.
privacy_tip Permissões neste sub-fórum
Não podes responder a tópicos
power_settings_newInicie sessão para responder