16/09/2018, 11:05 PM (Última modificación: 16/09/2018, 11:15 PM por GeX~'.)
ola que tal ? tengo un pedido es que tengo un sistema de niveles por exp y lo quiero adaptar a un zombie plague
y mi idea es como hago para cada vez que mate a un nemesis, survivor, humano, zombie, sniper o assassin me de diferente exp encontre una guía en otro foro de niveles por exp y me gusto mucho ya que trae lo que ando buscando pero tiene hasta la partes : matar humano, matar nemesis, matar survivor, matar zombie y me estaria faltando matar sniper y matar survivor y por eso pido que si alguien sabe como hacerlo para que me de diferente exp al matar a diferentes clases
mis variables son
g_zombie[33], g_nemesis[33], g_survivor[33], g_sniper[33], g_assassin[33] por si a caso
y a la guia que me referia en el tema es esta : click
if ( ExecuteHam( Ham_IsPlayer, attacker ) && ExecuteHam( Ham_IsAlive, attacker ) ) { if ( !g_zombie[ victim ] ) gExp[ attacker ] += 1; // Cantidad de EXP al matar a un humano else if ( g_zombie[ victim ] ) gExp[ attacker ] += 1; // Cantidad de EXP al matar a un zombie else if ( g_nemesis[ victim ] ) gExp[ attacker ] += 1; // Cantidad de EXP al matar a un nemesis else if ( g_survivor[ victim ] ) gExp[ attacker ] += 1; // Cantidad de EXP al matar a un survivor else if ( g_sniper[ victim ] ) gExp[ attacker ] += 1; // Cantidad de EXP al matar a un sniper else if ( g_assassin[ victim ] ) gExp[ attacker ] += 1; // Cantidad de EXP al matar a un assassin
public plugin_init() { RegisterHam(Ham_Killed, "player", "ham_PlayerKilled", 1) } public client_putinserver(id) { gNivel[id] = 1; gExp[id] = 0; set_task(1.3, "Show", id, _, _, "b") } public client_disconnect(id) { remove_task(id) } public Show(id) { if(is_user_alive(id)) { Color(id, "!g[ZP 1.3]!y Tus datos son : !tNivel (%d/%d) | Exp (%d/%d)", gNivel[id], LevelMax, gExp[id], LevelNext(gNivel[id])) } } public ham_PlayerKilled(victim, attacker, shouldgib) { if(!is_user_connected(victim) || !is_user_connected(attacker) || get_user_team(victim) == get_user_team(attacker)) return HAM_IGNORED;
if (ExecuteHam(Ham_IsPlayer, attacker) && ExecuteHam(Ham_IsAlive, attacker)) { if(!zp_get_user_zombie(victim)) { Color(attacker, "!g[ZP 1.3]!y Has ganado !g4!y de exp por matar a un: !tHumano.") gExp[attacker] += 4; // Cantidad de EXP al matar a un humano } else if(zp_get_user_zombie(victim)) { Color(attacker, "!g[ZP 1.3]!y Has ganado !g4!y de exp por matar a un: !tZombie.") gExp[attacker] += 4; // Cantidad de EXP al matar a un zombie } else if(zp_get_user_nemesis(victim)) { Color(attacker, "!g[ZP 1.3]!y Has ganado !g9!y de exp por matar a un: !tNemesis.") gExp[attacker] += 10; // Cantidad de EXP al matar a un nemesis } else if(zp_get_user_survivor(victim)) { Color(attacker, "!g[ZP 1.3]!y Has ganado !g7!y de exp por matar a un: !tAssassin.") gExp[attacker] += 8; // Cantidad de EXP al matar a un survivor } else if(zp_get_user_sniper(victim)) { Color(attacker, "!g[ZP 1.3]!y Has ganado !g8!y de exp por matar a un: !tSniper.") gExp[attacker] += 8; // Cantidad de EXP al matar a un sniper } else if(zp_get_user_assassin(victim)) { Color(attacker, "!g[ZP 1.3]!y Has ganado !g10!y de exp por matar a un: !tAssassin.") gExp[attacker] += 10; // Cantidad de EXP al matar a un assassin } checkLevel(attacker); } return HAM_IGNORED; } public checkLevel(id) { new iUploaded = false;
if ( ExecuteHam( Ham_IsPlayer, attacker ) && ExecuteHam( Ham_IsAlive, attacker ) ) { if ( g_zombie[ victim ] ) // Si la victima es parte de la facción Zombie { if ( !g_nemesis[ victim ] && !g_assassin[ victim ] ) // Detectamos que el Zombie no sea Nemesis ni Assasin gExp[ attacker ] += 1; // Cantidad de EXP al matar a un Zombie else if ( g_nemesis[ victim ] && !g_assassin[ victim ] ) // Detectamos que el Zombie sea Nemesis y que no sea Assasin gExp[ attacker ] += 1; // Cantidad de EXP al matar a un Nemesis else if ( !g_nemesis[ victim ] && g_assassin[ victim ] ) // Detectamos que el Zombie no sea Nemesis y que si sea Assasin gExp[ attacker ] += 1; // Cantidad de EXP al matar a un Assasin } else // O si la victima es parte de la facción Humana { if ( !g_survivor[ victim ] && !g_sniper[ victim ] ) // Detectamos que el Humano no sea Survivor ni Sniper gExp[ attacker ] += 1; // Cantidad de EXP al matar a un Humano else if ( g_survivor[ victim ] && !g_sniper[ victim ] ) // Detectamos que el Humano sea Survivor y que no sea Sniper gExp[ attacker ] += 1; // Cantidad de EXP al matar a un Survivor else if ( !g_survivor[ victim ] && g_sniper[ victim ] ) // Detectamos que el Humano no sea Survivor y que si sea Sniper gExp[ attacker ] += 1; // Cantidad de EXP al matar a un Sniper }
checkLevel( attacker ); }
return HAM_IGNORED; }
Aquí te dejo otra versión hecha por mi, es mucho mas personalizable y en vez de repetir la variable de sumar exp y la funcion de imprimir mensaje en cada casilla (if) lo hacemos una vez, así optimizamos el código.
// Aqui puedes editar la cantidad de EXP que el player recibirá por el tipo de clase. new const g_iExpData[ ][ EXPSTRUCTURE ] = { { "Zombie", 1 }, // Si el player mata a un Zombie, recibirá 1 de EXP. { "Nemesis", 2 }, // Si el player mata a un Nemesis, recibirá 2 de EXP. { "Assassin", 3 }, // ... 3 de EXP { "Human", 4 }, // ... 4 de EXP { "Survivor", 8 }, // ... 8 de EXP { "Sniper", 15 } // ... 15 de EXP };
if ( ExecuteHam( Ham_IsPlayer, attacker ) && ExecuteHam( Ham_IsAlive, attacker ) ) { // Creamos un var para obtener la clase del jugador asesinado (victima) new iClass;
if ( g_zombie[ victim ] ) // Si la victima es parte de la facción Zombie { if ( !g_nemesis[ victim ] && !g_assassin[ victim ] ) // Detectamos que el Zombie no sea Nemesis ni Assasin iClass = ZOMBIE; else if ( g_nemesis[ victim ] && !g_assassin[ victim ] ) // Detectamos que el Zombie sea Nemesis y que no sea Assasin iClass = NEMESIS; else if ( !g_nemesis[ victim ] && g_assassin[ victim ] ) // Detectamos que el Zombie no sea Nemesis y que si sea Assasin iClass = ASSASSIN; } else // O si la victima es parte de la facción Humana { if ( !g_survivor[ victim ] && !g_sniper[ victim ] ) // Detectamos que el Humano no sea Survivor ni Sniper iClass = HUMAN; else if ( g_survivor[ victim ] && !g_sniper[ victim ] ) // Detectamos que el Humano sea Survivor y que no sea Sniper iClass = SURVIVOR; else if ( !g_survivor[ victim ] && g_sniper[ victim ] ) // Detectamos que el Humano no sea Survivor y que si sea Sniper iClass = SNIPER; }
gExp[ attacker ] += g_iExpData[ iClass ][ EXP_REWARD ]; // Obtenemos la cantidad de EXP según la clase asesinada y le sumamos EXP al jugador. Color( attacker, "!g[ZP 1.3]!y Has ganado !g%i!y de exp por matar a un: !t%s.", g_iExpData[ iClass ][ EXP_REWARD ], g_iExpData[ iClass ][ CLASSNAME ] ); // Imprimimos un mensaje avisando la cantidad de EXP que el jugador ganó.
checkLevel( attacker ); // Chequear si el jugador cumple con la exp requerida para subir de nivel }
gracias me anduvo lo otro y por ultimo que te quiero pedir es donde hago que cuando un zombie infecte a un humano le de 2 de exp uso zombie plague advance te adjunto el sma
(20/09/2018, 09:20 PM)GeX~ escribió: gracias me anduvo lo otro y por ultimo que te quiero pedir es donde hago que cuando un zombie infecte a un humano le de 2 de exp uso zombie plague advance te adjunto el sma
En tu archivo SMA de zombie plague, ve a la siguiente línea: Línea 7078 y ubica esta función:
Código PHP:
// Zombie Me Function (player id, infector, turn into a nemesis, silent mode, deathmsg and rewards, turn into assassin) zombieme(id, infector, nemesis, silentmode, rewards, assassin)
Ve a la parte donde sale este pedazo de código:
Código PHP:
// Show deathmsg and reward infector? if (rewards && infector) { // Send death notice and fix the "dead" attrib on scoreboard SendDeathMsg(infector, id) FixDeadAttrib(id)
Ahora, dependiendo de la variable de exp que tengas, lo agregas al final de todo y quedaría así:
Código PHP:
// Show deathmsg and reward infector? if (rewards && infector) { // Send death notice and fix the "dead" attrib on scoreboard SendDeathMsg(infector, id) FixDeadAttrib(id)
(20/09/2018, 09:20 PM)GeX~ escribió: gracias me anduvo lo otro y por ultimo que te quiero pedir es donde hago que cuando un zombie infecte a un humano le de 2 de exp uso zombie plague advance te adjunto el sma
En tu archivo SMA de zombie plague, ve a la siguiente línea: Línea 7078 y ubica esta función:
Código PHP:
// Zombie Me Function (player id, infector, turn into a nemesis, silent mode, deathmsg and rewards, turn into assassin) zombieme(id, infector, nemesis, silentmode, rewards, assassin)
Ve a la parte donde sale este pedazo de código:
Código PHP:
// Show deathmsg and reward infector? if (rewards && infector) { // Send death notice and fix the "dead" attrib on scoreboard SendDeathMsg(infector, id) FixDeadAttrib(id)
Ahora, dependiendo de la variable de exp que tengas, lo agregas al final de todo y quedaría así:
Código PHP:
// Show deathmsg and reward infector? if (rewards && infector) { // Send death notice and fix the "dead" attrib on scoreboard SendDeathMsg(infector, id) FixDeadAttrib(id)