ZP Sistema de COMBO
#1
Arcoiris 
Bueno chicos, acá les dejo un sistema de combos para zombie plague 4.2 de mercyless .. Espero que les guste ^^ Gran sonrisa empecemos

SISTEMA DE COMBOS ZP
BY: BLACKK
CREDITOS: AguuS.- optimización de takedamage


En el principio del plugin.
Código PHP:
// Creamos las Variables necesarias, las colocan donde quieran.
new gComboHudg_finish // Hud del combo, showhud, y finalización
const DUENIO ADMIN_RCON // ganancia de admin, según su tipo
const STAFF ADMIN_LEVEL_A
const ADMIN ADMIN_LEVEL_B
const VIP_FULL ADMIN_LEVEL_C
const VIP_COMUN ADMIN_LEVEL_D
const VIP_BASICO ADMIN_LEVEL_E 

new gDamageDealt[33] = { 0, ... }, gCombo[33] = { 0, ... }, gComboDamage[33] = { 0, ... }, g_hits[33// Variables del combo
enum _:gComboData {
    
gCombosgMessage[90], gMultiRojo,  VerdeAzul // combos, mensajes y los colores del combo
}
new const 
gComboInfo[][gComboData] = {
    { 
0"Bien!"10255255 }, { 100"Muy bien!"10255255 }, // Los mensajes y su respectivo color, ( lo modifican a gusto )
    
250"Black!"2255255},  { 340"Perfecto!"30255},
    { 
450"Destructor!"42550},  { 610"Hiper Destructor!"52550255  }
}
#define ID_COMBO (taskid - TASK_COMBO) // el define del task combo 
Código PHP:
// Luego buscamos lo siguiente
public plugin_init(){
    
// code code.. bla bla
    
g_finish CreateHudSyncObj() // creamos los huds
    
gComboHud CreateHudSyncObj()
}
// luego vamos a
// Task offsets
enum (+= 100)
{
    
TASK_MODEL 2000,
    
TASK_TEAM,
    
TASK_SPAWN,
    
TASK_BLOOD,
    
TASK_NVISION,
    
TASK_FLASH,
    
TASK_CHARGE,
    
TASK_SHOWHUD,
    
TASK_NADES,
    
TASK_MAKEZOMBIE,
    
TASK_WELCOMEMSG,
    
TASK_THUNDER_PRE,
    
TASK_THUNDER,
    
TASK_AMBIENCESOUNDS,
    
TASK_LIGHTING,
        
TASK_COMBO // quedaría así
}
// Le agregamos TASK_COMBO
// Luego vamos 
public fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
y lo remplazan todo por esto
// Ham Take Damage Forward (inflictor = weapon)
public fw_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    if (
victim == attacker || !is_user_connected(attacker)) return HAM_IGNORED;
    
    if (
g_newround || g_endround) return HAM_SUPERCEDE;
    
    if (
g_nodamage[victim]) return HAM_SUPERCEDE;
    
    if (
g_zombie[attacker] == g_zombie[victim]) return HAM_SUPERCEDE;
    
    if (!
g_zombie[attacker]) {
    
gDamageDealt[attacker] += floatround(damage)
    
gComboDamage[attacker] += floatround(damage)
    
g_hits[attacker]++
    
remove_task(attacker+TASK_COMBO)
    static 
szDamageszDamage 125
    
while (gDamageDealt[attacker] >= szDamage) {
                if (
get_user_flags(attacker) & STAFF) {
        
g_ammopacks[attacker] +=6
        gCombo
[attacker] += 6
                
}
                else if (
get_user_flags(attacker) & ADMIN) {
        
g_ammopacks[attacker] += 5
        gCombo
[attacker] += 5
                
}
                else if (
get_user_flags(attacker) & VIP_FULL) {
        
g_ammopacks[attacker] += 4
        gCombo
[attacker] += 4
                
}
                else if (
get_user_flags(attacker) & VIP_COMUN) {
        
g_ammopacks[attacker] += 3
        gCombo
[attacker] += 3
                
}
                else if (
get_user_flags(attacker) & VIP_BASICO) {
        
g_ammopacks[attacker] += 2
        gCombo
[attacker]+= 2
                
}
                else {
        
g_ammopacks[attacker] = gCombo[attacker]++
        }
        
gDamageDealt[attacker] -= szDamage
    
}
    new 
szComboDamage[10]
    
acortar(floatround(damage), szComboDamage9)

    for (new 
isizeof(gComboInfo); i++) {
                if (
gCombo[attacker] >= gComboInfo[i][gCombos]) {
    
set_hudmessage(gComboInfo[i][Rojo], gComboInfo[i][Verde], gComboInfo[i][Azul], -1.00.2711.51.51.01.0)
    
ShowSyncHudMsg(attackergComboHud"Combo %s ammo packs^n%s %d hits %s de Daño^nhit %s de Daño^nMultiplicado x%d",Add_Point(gCombo[attacker]),gComboInfo[i][gMessage], g_hits[attacker], Add_Point(gComboDamage[attacker]), szComboDamagegComboInfo[i][gMulti])
                }
    }
    
set_task(5.0"Finish_Combo"attacker+TASK_COMBO)
    if (
g_survivor[attacker]) damage *= 1.5
    
else damage *= 1.3
        
    g_damagedealt
[attacker] += floatround(damage)
    
    static 
ammodamageammodamage 500
            
    
while (g_damagedealt[attacker] >= ammodamage) {
        
g_ammopacks[attacker]++
        
g_damagedealt[attacker] -= ammodamage
    
}    
    }
    else {
        if (
g_nemesis[attacker]) {
            if (
inflictor == attacker) {
                if (
pev(attackerpev_button) & IN_ATTACKdamage 150.0
                
else if (pev(attackerpev_button) & IN_ATTACK2damage 300.0
            
}
        }
        else {
            if (
inflictor == attacker) {
                if (
pev(attackerpev_button) & IN_ATTACKdamage *= 1.2
                
else if (pev(attackerpev_button) & IN_ATTACK2damage *= 1.4
            
}
        }
    }

    
SetHamParamFloat(4damage)

    if (
g_swarmround || g_plagueround || g_survround || g_nemround || fnGetHumans() == || !g_zombie[attacker]) return HAM_IGNORED;

    static 
Float:armorpev(victimpev_armorvaluearmor)    
    if (
armor 0.0) {
        
emit_sound(victimCHAN_BODYsound_armorhit[random_num(0sizeof sound_armorhit 1)], 1.0ATTN_NORM0PITCH_NORM)

    
set_pev(victimpev_armorvaluefloatmax(0.0armor damage))

    return 
HAM_SUPERCEDE;
    }
    
    
SendDeathMsg(attackervictim)
    
FixDeadAttrib(victim)
    
UpdateFrags(attackervictim111)
    
    
zombieme(victimattacker00)
    
    return 
HAM_SUPERCEDE;
}
public 
Finish_Combo(taskid) {
    if (!
gCombo[ID_COMBO] & !g_hits[ID_COMBO]) return; new i
    
for (0sizeof(gComboInfo)-1i++) {
        if (
gComboInfo[i+1][gCombos] > gCombo[ID_COMBO]) break;
    }

    static 
szBonoszBono gCombo[ID_COMBO] * gComboInfo[i][gMulti]

    
set_hudmessage(25520147, -1.0, -1.026.07.0)
    
ShowSyncHudMsg(ID_COMBOg_finish"Combo finalizado (%s) Multiplicado x%d^n%s Ammopacks^n",Add_Point(gCombo[ID_COMBO]), gComboInfo[i][gMulti], Add_Point(szBono))
    
g_ammopacks[ID_COMBO] += szBono
    gComboDamage
[ID_COMBO] = g_hits[ID_COMBO] = gCombo[ID_COMBO] = 0
    SUBIRNIVEL
(ID_COMBO// ESTO ES EL CHECK LEVEL Q TENGAN USTEDES

Stocks necesarios
Código PHP:
stock acortar(numszNum[], len){
    if (
num <= -1000000 || num >= 1000000formatex(szNumlen"%.3fM"floatdiv(float(num), 1000000.0));
    else if (
num <= -1000 || num >= 1000)  formatex(szNumlen"%.2fK"floatdiv(float(num), 1000.0));
    else 
num_to_str(numszNumlen);
}
stock Add_Point(number) {
    new 
szCountszString[15], szString2[15], szLen
    num_to_str
(numberszStringcharsmax(szString))
    
szLen strlen(szString)
    for (new 
0szLeni++) {
        if (
!= && ((szLen i) %== 0)) {
    
add(szString2charsmax(szString2), "."1)
    
szCount++ 
    
add(szString2[i+szCount], 1szString[i], 1)
        }
        else  
add(szString2[i+szCount], 1szString[i], 1)
    }
    return 
szString2;

Dejo el sma 4.2 virgen, para el que lo hizo mal. y le tira muchos errores..
Si van a tirar comentarios negativos, plis no mamen, si ven algun error en el code, avisen.. O posteen.


Archivos adjuntos
.sma   Descargar AMXX / zombie_plague40.sma (Tamaño: 266.46 KB / Descargas: 175)
https://steamcommunity.com/id/adriancek1ng/

Aquellos que te critican quieren verte distinto,
Por que ven en ti lo que ellos no serán jamás. Feel like a sir
Responder
#2
Ya lo dijeron MUCHAAAAAS veces, no muestren el hud en takedamage

Y en vez de hacer tantas condiciones respecto a la flags de admin preferiria usar
https://amxmodx-es.com/Thread-Guia-Ganan...o-de-admin
(21/04/2015, 01:31 AM)wiD escribió:
(21/04/2015, 01:13 AM)meTaLiCroSS escribió: Creo que estamos todos, como buenos estudiantes la mayoria, preocupados de lo suyo. Siempre pasa en el primer semestre de todo, despues cuando soltemos mas preocupaciones nos sentiremos con mas tiempo de venir a forobardear aqui. Asi como yo, me incluyo Roflmao me fui nos vemos en meses, me tienen como perro programando jejeje Nothingdohere

bueno, el forobardo como siempre depende de mi.

Chileno hijo de puta
Responder
#3
Buen tuto Cutecry podrias dejar alguna imagen para ver como es Nothingdohere
Responder
#4
Buen tutorial Me gusta
Responder
#5
Código PHP:
if (get_user_flags(attacker) & STAFF) {
        
g_ammopacks[attacker] = gCombo[attacker] += 6
                
}
                else if (
get_user_flags(attacker) & ADMIN) {
        
g_ammopacks[attacker] = gCombo[attacker] += 5
                
}
                else if (
get_user_flags(attacker) & VIP_FULL) {
        
g_ammopacks[attacker] = gCombo[attacker] += 4
                
}
                else if (
get_user_flags(attacker) & VIP_COMUN) {
        
g_ammopacks[attacker] = gCombo[attacker] += 3
                
}
                else if (
get_user_flags(attacker) & VIP_BASICO) {
        
g_ammopacks[attacker] = gCombo[attacker]+= 2
                
}
                else {
        
g_ammopacks[attacker] = gCombo[attacker]++


-------------->


switch() 

e.e

no es buena idea poner el hud dentro del takedamage, ademas esto ya lo había visto en otra parte e.e , solo cambiaste un par de cosas
NO RESPONDO MP POR SOPORTE
Responder
#6
Flores si no es bueno ponerlo en el takedamage donde lo pondrias o se pondrai?

PD: Switch para lo que te dijo flores y si esta muy lindo el combo capas lo use
Responder
#7
Ya se digo muchas veces que ese método es horrible...
dale una mirada a esto
https://amxmodx-es.com/Thread-ZP-sistema...ra-hm-y-zm
___________________________

movido a aportes
Responder
#8
Lo hice a mi gusto y se los quise compartir, si no les gusta no lo use, y gracias por el consejo.

(23/07/2015, 01:47 PM)FloresMagon escribió:
Código PHP:
if (get_user_flags(attacker) & STAFF) {
        
g_ammopacks[attacker] = gCombo[attacker] += 6
                
}
                else if (
get_user_flags(attacker) & ADMIN) {
        
g_ammopacks[attacker] = gCombo[attacker] += 5
                
}
                else if (
get_user_flags(attacker) & VIP_FULL) {
        
g_ammopacks[attacker] = gCombo[attacker] += 4
                
}
                else if (
get_user_flags(attacker) & VIP_COMUN) {
        
g_ammopacks[attacker] = gCombo[attacker] += 3
                
}
                else if (
get_user_flags(attacker) & VIP_BASICO) {
        
g_ammopacks[attacker] = gCombo[attacker]+= 2
                
}
                else {
        
g_ammopacks[attacker] = gCombo[attacker]++


-------------->


switch() 

e.e

no es buena idea poner el hud dentro del takedamage, ademas esto ya lo había visto en otra parte e.e , solo cambiaste un par de cosas

Dime donde lo viste?
https://steamcommunity.com/id/adriancek1ng/

Aquellos que te critican quieren verte distinto,
Por que ven en ti lo que ellos no serán jamás. Feel like a sir
Responder
#9
Buen aporte Oh god why veré bien el código aver si lo uso Oh god why
* Ing. Informático * Mapper * Venezolano
Responder
#10
(23/07/2015, 01:13 PM)DeathKing escribió: Buen tutorial Me gusta

No es un tuto, ya que no explico casi nada, pacman solo es un aporte, explique casi lo mínimo.
https://steamcommunity.com/id/adriancek1ng/

Aquellos que te critican quieren verte distinto,
Por que ven en ti lo que ellos no serán jamás. Feel like a sir
Responder
#11
Lo veo demasiado parecido a este "Sistema de Combo", te marco 2 puntos para que recapacites en querer seguir usando esa forma.

1. Tal y como te dicen, Hacer un Loop en "Takedamage" es realmente pesimo y lo digo por experiencia ya que despues del comentario de "Destro" en el theard del sistema que yo publique lo testie de varias formas( tambien con "amxmodx profiler" ), y la verdad no da lindos resultados.

2. usar las "get_user_flags" de esa forma y precisamente en "Takedamage" no es bueno, y usar "switch()" tampoco sirve( para "el" o "los" que llegaron a comentar que use "switch()" para los accesos flags )

Bueno ahora te aconsejo un par de cositas Sonrisa.

1. hace el combo en una funcion aparte y hacela "public" y en "Takedamage" hace un "set_task" de 0.1 segundo para llamar a esa funcion que creaste con el combo nuevo que armaste( no este que publicaste, uno nuevo ).

2. para evitar usar demaciadas veses "get_user_flags" en "Takedamage" verificalo en la funcion "Client_putinserver".

bueno espero haberme explicado bien Sonrisa
Sin mi combustible( ANIME ) no vivo.
Responder
#12
No la mejor forma de hacer combos, pero bueno Whatever

por que le seteas los ammopacks? no se le tendrian que sumar?
Responder
#13
(23/07/2015, 07:47 PM)UnoMas escribió: No la mejor forma de hacer combos, pero bueno Whatever

por que le seteas los ammopacks? no se le tendrian que sumar?

Postea tu combo aver como es. Whatever

(23/07/2015, 07:46 PM)Sangriento escribió: Lo veo demasiado parecido a este "Sistema de Combo", te marco 2 puntos para que recapacites en querer seguir usando esa forma. Pero no es delllllllllllll todo.

1. Tal y como te dicen, Hacer un Loop en "Takedamage" es realmente pesimo y lo digo por experiencia ya que despues del comentario de "Destro" en el theard del sistema que yo publique lo testie de varias formas( tambien con "amxmodx profiler" ), y la verdad no da lindos resultados.

2. usar las "get_user_flags" de esa forma y precisamente en "Takedamage" no es bueno, y usar "switch()" tampoco sirve( para "el" o "los" que llegaron a comentar que use "switch()" para los accesos flags )

Bueno ahora te aconsejo un par de cositas Sonrisa.

1. hace el combo en una funcion aparte y hacela "public" y en "Takedamage" hace un "set_task" de 0.1 segundo para llamar a esa funcion que creaste con el combo nuevo que armaste( no este que publicaste, uno nuevo ).

2. para evitar usar demaciadas veses "get_user_flags" en "Takedamage" verificalo en la funcion "Client_putinserver".

bueno espero haberme explicado bien Sonrisa
Lo tomaré en cuenta Gran sonrisa
gracias..
y el combo lo hice en tu forma, sangriento, pero mejorada.. osea mire tu code y lo intenté mejorar..
https://steamcommunity.com/id/adriancek1ng/

Aquellos que te critican quieren verte distinto,
Por que ven en ti lo que ellos no serán jamás. Feel like a sir
Responder
#14
(23/07/2015, 10:14 PM)Blackk escribió:
(23/07/2015, 07:47 PM)UnoMas escribió: No la mejor forma de hacer combos, pero bueno Whatever

por que le seteas los ammopacks? no se le tendrian que sumar?

Postea tu combo aver como es. Whatever

(23/07/2015, 07:46 PM)Sangriento escribió: Lo veo demasiado parecido a este "Sistema de Combo", te marco 2 puntos para que recapacites en querer seguir usando esa forma. Pero no es delllllllllllll todo.

1. Tal y como te dicen, Hacer un Loop en "Takedamage" es realmente pesimo y lo digo por experiencia ya que despues del comentario de "Destro" en el theard del sistema que yo publique lo testie de varias formas( tambien con "amxmodx profiler" ), y la verdad no da lindos resultados.

2. usar las "get_user_flags" de esa forma y precisamente en "Takedamage" no es bueno, y usar "switch()" tampoco sirve( para "el" o "los" que llegaron a comentar que use "switch()" para los accesos flags )

Bueno ahora te aconsejo un par de cositas Sonrisa.

1. hace el combo en una funcion aparte y hacela "public" y en "Takedamage" hace un "set_task" de 0.1 segundo para llamar a esa funcion que creaste con el combo nuevo que armaste( no este que publicaste, uno nuevo ).

2. para evitar usar demaciadas veses "get_user_flags" en "Takedamage" verificalo en la funcion "Client_putinserver".

bueno espero haberme explicado bien Sonrisa
Lo tomaré en cuenta Gran sonrisa
gracias..
y el combo lo hice en tu forma, sangriento, pero mejorada.. osea mire tu code y lo intenté mejorar..


jajaja xD, si lo queres mejorar no uses un loop en "takedamage"
y tampoco cuando te da la bonificacion del combo terminado.
Sin mi combustible( ANIME ) no vivo.
Responder
#15
(23/07/2015, 10:14 PM)Blackk escribió:
(23/07/2015, 07:47 PM)UnoMas escribió: No la mejor forma de hacer combos, pero bueno Whatever

por que le seteas los ammopacks? no se le tendrian que sumar?

Postea tu combo aver como es. Whatever
No es por presumir pero el combo de mi zp es mucho mejor y no lo voy a publicar porque justamente es de mi zp Whatever , era un comentario nada mas no te lo tenias que tomar a mal, no respondiste mi pregunta
Responder
#16
Yo puedo decir lo mismo de mi zp, total no sabes el code jajaja es fácil hablar. Igual como dije, si no les gusta no lo use, solo lo quise aportar, por favor deja de sumar post, que no quiero sumar yo. Gracias
https://steamcommunity.com/id/adriancek1ng/

Aquellos que te critican quieren verte distinto,
Por que ven en ti lo que ellos no serán jamás. Feel like a sir
Responder
#17
Una consulta esto no deberia ir en la otra secion de aportes.
Responder
#18
Allied Modders en español / AMX Mod X - Scripting / Aportes v / ZP Sistema de COMBO
https://steamcommunity.com/id/adriancek1ng/

Aquellos que te critican quieren verte distinto,
Por que ven en ti lo que ellos no serán jamás. Feel like a sir
Responder
#19
Buen aporte.
Pero hay mucho que mejorar ^-^.

Responder
#20
Sí, falta mejor muchisisimo, pero así anda bien (Y) faltaría optimizar.. Cuando tenga tiempo lo hago Gran sonrisa
https://steamcommunity.com/id/adriancek1ng/

Aquellos que te critican quieren verte distinto,
Por que ven en ti lo que ellos no serán jamás. Feel like a sir
Responder
#21
Blackk se me buguean los ammopacks cuando hago un combo ! por ejemplo hago un combo de 78 y en vez de darme el doble me da 78 o aveces empiezo a disparar a un zombie y se vuelve los ammopack a 6


Archivos adjuntos
.sma   Descargar AMXX / zombie_plague40.sma (Tamaño: 254.19 KB / Descargas: 101)
Responder
#22
Toma, ahi edité un error MUYYYYYYYY LOOL! Que no me di cuenta jaja pacman gagaga Lol


Archivos adjuntos
.sma   Descargar AMXX / zombie_plague40 (3).sma (Tamaño: 254.39 KB / Descargas: 99)
https://steamcommunity.com/id/adriancek1ng/

Aquellos que te critican quieren verte distinto,
Por que ven en ti lo que ellos no serán jamás. Feel like a sir
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)