14/11/2018, 03:43 PM
(Última modificación: 14/11/2018, 03:46 PM por jose luis. Edited 1 time in total.)
Hola amigos , sigo intentando hacer bien mi menu con debloqueo de armas especiales = ( ... , primero pense en hacer nativas para extraer datos de otro plugin ( Rangos + menu cuchillos) pero no me sale , soy muy limitado en pawn asi que veo que mejor el uso de la base de datos que usa el plugin ( rangos +menu ) y asi extraigo sus datos ( osea g_rango [index] , )para poder desbloquear el menu de armas especiales
Ejemplo :
en el case 0
si g_rango [ index] es > que 3 (silver II) se dara el item al jugador osea el "get_railcannon" ( es el nombre del comando para llamar al pluing del arma especial )
Mi problema es que intento extraer el g_rango [index] pero sale error cuando hago ese if g_rango > 3. // Error: Undefined symbol "index" on line 125 // - el error :/
Este es el codigo del plugin del menu, en este abro la base de datos nfvault que se usa en el otro plugin llamado "rangos + menu" para poder extraer sus datos de guardado en este caso deseo el g_rango [index]
Aca el Code del pluing Menu y su Sub menu de desbloquear armas especiales:
Codigo del plugin Rango + Cuchillos con M
Espero puedan guiarse por los codigos y puedan apoyarme muchisisisimas gracias antemano ...
Ejemplo :
en el case 0
si g_rango [ index] es > que 3 (silver II) se dara el item al jugador osea el "get_railcannon" ( es el nombre del comando para llamar al pluing del arma especial )
Mi problema es que intento extraer el g_rango [index] pero sale error cuando hago ese if g_rango > 3. // Error: Undefined symbol "index" on line 125 // - el error :/
Este es el codigo del plugin del menu, en este abro la base de datos nfvault que se usa en el otro plugin llamado "rangos + menu" para poder extraer sus datos de guardado en este caso deseo el g_rango [index]
Aca el Code del pluing Menu y su Sub menu de desbloquear armas especiales:
Código PHP:
#include <amxmodx>
#include <fun>
#include <cstrike>
#include <nfvault>
//enum _:DATA_K { K_NOMBRE[ 32 ], VMDL[ 30 ], PMDL[ 30 ], NECESARIO }
// enum _:DATA {NOMBRE[30], FRAGS }
new Plugin[] = "Menu simple"
new Version [] = "1.0"
new Author [] = "qseyo"
new VaultRango[128], szRangos[180], szKey[30]
new g_rango[33], g_frags[33], kElegido[ 33 ]
new g_playername[33][32];
public plugin_init()
{
register_plugin(Plugin, Version, Author)
register_clcmd("chooseteam","abc")
register_clcmd("jointeam","abc")
nfv_file("Ranguitos", VaultRango, charsmax(VaultRango))
}
CargarDatos(id)
{
new g_load_c1[25], g_load_c2[25]
formatex(szKey, charsmax(szKey), "data_rangos")
if(!nfv_get_data(VaultRango, szKey, g_playername[id], szRangos, sizeof(szRangos) - 1)) return;
parse(szRangos, g_load_c1, charsmax(g_load_c1), g_load_c2, charsmax(g_load_c2))
g_frags[id] = str_to_num(g_load_c1)
g_rango[id] = str_to_num(g_load_c2)
}
public client_putinserver(id)
{
get_user_name( id, g_playername[ id ], charsmax( g_playername[ ] ));
CargarDatos(id)
}
public abc(id)
{
if(is_user_alive(id))
{
abrir_menu(id)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public abrir_menu(id)
{
new menu = menu_create("^n^n^n^n^n^n Team - Amigos:", "menu_handler")
menu_additem(menu, "\ySelecciona tu cuchillo", "1")
menu_additem(menu, "\ySelecciona tu gorro^n^n", "2")
menu_additem(menu, "\wCamara tercera persona ", "3")
menu_additem(menu, "\wSelecciona tu movimiento fortnite ", "4")
menu_additem(menu, "\wArmas especiales ", "5")
menu_setprop(menu, MPROP_EXITNAME, "Salir")
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, menu, 0)
return PLUGIN_HANDLED
}
public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
return PLUGIN_HANDLED
new data[6], iName[64], acces, callback
menu_item_getinfo(menu, item, acces, data, 5, iName, 63, callback)
new key = str_to_num(data)
switch(key)
{
case 1: client_cmd (id, "asd")
case 2: client_cmd (id, "say /hats")
case 3: client_cmd (id, "say /cam")
case 4: client_cmd (id, "say /dans")
case 5: submenu(id)
}
return PLUGIN_HANDLED;
}
public submenu(id)
{
new menu = menu_create("\rArmas especiales", "handlerpre")
menu_additem(menu, "\wCanon Espacial del espacio y tiempo", "1") //Blanco = \w
// menu_additem(menu, "\wEspada de luz", "2") //Transparente = \d
menu_display(id, menu)
}
///////////////
public handlerpre(id, menu, item)
{
if ( item == MENU_EXIT )
{
menu_destroy(menu)
return PLUGIN_HANDLED;
}
switch(item)
{
// AQUI QUIERO PONER SI ES SILVER por ejemplo se desbloqueara y podra tener el arma sino no
case 0:
{
// print_chat, "holamundo"
// formatex(name, len, Rangos[ g_rango[index]
if (g_rango[ index ] >=3 ) aca me marca error :/ // Error: Undefined symbol "index" on line 125
// formatex(name, len, g_rango[index]
// HAGO EL PRINT para ver en el juego si extraigo el dato que deseo pero no me sale nada
client_print(0, print_chat,name, len, g_rango[id]);
else
menu_destroy(menu);
// case 0: //nombre_rango(id);
}
// hay muchos // porque ando haciendo pruebas :( me estoy pasando mucho tiempo y no me sale
// espero que alguien me apoye porfavor :(
//case 0:
//{
// if(!equal(g_szRankName, "Silver II"))
// client_cmd (id, "get_railcannon") ;
// else
// menu_destroy(menu);
//if (equal(print_print nombre_rango(id),"Silver II")) {
// client_cmd (id, "get_railcannon") ;
// }
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
Codigo del plugin Rango + Cuchillos con M
Código PHP:
#include <amxmisc>
#include <fakemeta>
#include <nfvault>
#include <hamsandwich>
#include <cstrike>
#include <colorchat>
new const Web[] = "" // Se Muestra en HUD
new const Prefijo[] = "!g[RANGOS]!y" // Prefijo en say
new const Sonido[] = "rango/up2.wav" // Sonido Rango UP
new const PLUGIN[][] = { "Rangos CSGO + Knifes", "1.0", "kikizon" }
enum _:DATA_K { K_NOMBRE[ 32 ], VMDL[ 30 ], PMDL[ 30 ], NECESARIO }
enum _:DATA {NOMBRE[30], FRAGS }
new const Knifes[ ][ DATA_K ] = {
{ "Cuchillo novato guerrero", "v_guerrero", "p_guerrero" , 1 },
{ "Cuchillo de Karambit", "v_colmillo", "p_colmillo", 2 },
{ "Cuchillo del Demonio", "v_demonio", "p_demonio", 3 },
{ "Hacha del Diablo", "v_demonio", "p_demonio", 3 }
};
new const Rangos[][DATA] = {
{ "Sin Rango", 5 },
{ "Silver I", 6},
{ "Silver II", 7 },
{ "Silver III", 800 },
{ "Silver IV", 1000 },
{ "Silver Elite", 1200 },
{ "Silver Elite Master", 1500 },
{ "Gold Nova I", 1800 },
{ "Gold Nova II", 2200 },
{ "Gold Nova III", 2500 },
{ "Gold Nova Master", 2700 },
{ "Master Guardian I",2900 },
{ "Master Guardian II", 3100 },
{ "Master Guardian Elite", 3300 },
{ "Distinguished Master Guardian", 3500 },
{ "Legendary Eagle", 3800 },
{ "Legendary Eagle Master", 3900 },
{ "Supreme Master First Class", 4000 },
{ "The Global Elite", 4200 },
{ "", 99999 } //fix
}
new g_rango[33], g_frags[33], kElegido[ 33 ]
new SyncHUD, g_maxplayers, g_msgTeamInfo, g_msgSayText, g_playername[33][32];
#define TASK_HUD 2100
#define ID_HUD (taskid - TASK_HUD)
#define XD is_user_connected(id) || !is_user_bot(id) || !is_user_hltv(id)
new VaultRango[128], szRangos[180], szKey[30]
/* ====================================
*[Cvars]*
=====================================*/
new cvar_Hud, cvar_knifex2, cvar_hsx2
/* ====================================
*[INIT]*
=====================================*/
public plugin_init() {
register_plugin(PLUGIN[0], PLUGIN[1], PLUGIN[2])
register_event("DeathMsg", "Event_DeathMsg", "a")
register_logevent("logevent_round_end", 2, "1=Round_End")
RegisterHam(Ham_Item_Deploy, "weapon_knife", "ham_KnifeDeployPost", true);
register_clcmd("say", "message_saytext")
register_clcmd("say_team", "message_sayteam")
register_clcmd("asd", "ShowMenuKnifes")
cvar_Hud = register_cvar("rangos_hud", "1") // 1 - Mostrar HUD | 0 - No Mostrar
cvar_knifex2 = register_cvar("rangos_knifex2", "1") // 1 - x2 frags con knife | 0 - ÑO :v
cvar_hsx2 = register_cvar("rangos_hsx2", "1") // 1 - x2 frags de HeadShot | 0 - ÑO :v
SyncHUD = CreateHudSyncObj()
g_maxplayers = get_maxplayers()
g_msgTeamInfo = get_user_msgid("TeamInfo")
g_msgSayText = get_user_msgid("SayText")
nfv_file("Ranguitos", VaultRango, charsmax(VaultRango))
}
public plugin_precache() {
static i, buffer[300];
for(i = 0; i < sizeof Knifes; ++i)
{
formatex( buffer, charsmax(buffer), "models/micarpeta/%s.mdl", Knifes[ i ][ VMDL ] );
precache_model( buffer );
formatex( buffer, charsmax(buffer), "models/micarpeta/%s.mdl", Knifes[ i ][ PMDL ] );
precache_model( buffer );
}
precache_sound(Sonido)
}
public ham_KnifeDeployPost(wpn) {
static id; id = get_weapon_ent_owner(wpn);
if (!pev_valid(id) || !is_user_alive( id )) return;
static WeaponID; WeaponID = cs_get_weapon_id(wpn);
static buffer[128];
if(WeaponID == CSW_KNIFE)
{
formatex( buffer, charsmax( buffer ), "models/micarpeta/%s.mdl", Knifes[kElegido[id]][VMDL]);
set_pev(id, pev_viewmodel2, buffer );
formatex( buffer, charsmax( buffer ), "models/micarpeta/%s.mdl", Knifes[kElegido[id]][PMDL]);
set_pev(id, pev_weaponmodel2, buffer);
}
}
public ShowMenuKnifes( index ) {
static k, menu, string[80]; menu = menu_create( "\rMenu de Cuchillos", "menu_knifes" );
for( k = 0; k < sizeof Knifes; ++k )
{
if(g_rango[ index ] >= Knifes[ k ][ NECESARIO ])
menu_additem( menu, Knifes[ k ][ K_NOMBRE ], "" );
else
{
formatex( string, charsmax( string ), "\d%s \y[ \r%s \y]", Knifes[ k ][ K_NOMBRE ], Rangos[ Knifes[k][NECESARIO]][NOMBRE]);
menu_additem( menu, string, "" );
}
}
menu_display( index, menu );
return PLUGIN_HANDLED;
}
public menu_knifes( index, menu, item ){
if(item == MENU_EXIT){
menu_destroy( menu );
return PLUGIN_HANDLED;
}
if(g_rango[ index ] < Knifes[ item ][ NECESARIO ])
{
ColorChat( index, NORMAL, "Necesitas ser rango: !g^"%s^" !npara usar este knife", Rangos[ Knifes[item][NECESARIO]][NOMBRE]);
ShowMenuKnifes( index );
return PLUGIN_HANDLED;
}
kElegido[ index ] = item;
engclient_cmd( index, "weapon_knife");
menu_destroy( menu );
return PLUGIN_HANDLED;
}
public HUD(taskid) {
new id = ID_HUD
if (!is_user_alive(id)) {
id = pev(id, pev_iuser2)
if (!is_user_alive(id)) return;
}
if(id != ID_HUD) {
set_hudmessage(255, 255, 255, 0.60, 0.67, 1, 6.0, 1.0)
ShowSyncHudMsg(ID_HUD, SyncHUD, "Frags: %d || Rango: %s", g_frags[id], Rangos[g_rango[id]][NOMBRE])
} else {
set_hudmessage(0, 255, 0, 0.0, 0.20, 1, 6.0, 1.0)
ShowSyncHudMsg(ID_HUD, SyncHUD, "^nFrags: %d^nRango: %s^n ^nSig. Rango: %s^nFrags Restantes: %d^n ^n%s",
g_frags[id], Rangos[g_rango[id]][NOMBRE], Rangos[g_rango[id]+1][NOMBRE], Rangos[g_rango[id]][FRAGS] - g_frags[id], Web)
}
}
/* ==================================
[PUTINSERVER]
===================================*/
public client_putinserver(id) {
get_user_name( id, g_playername[ id ], charsmax( g_playername[ ] ) );
g_rango[id] = 0
g_frags[id] = 0
Cargar(id)
if(get_pcvar_num(cvar_Hud))
set_task(1.0, "HUD", id+TASK_HUD, _, _, "b")
}
/* ==================================
[DISCONNECT]
===================================*/
public client_disconnect(id) {
if(XD) Guardar(id);
remove_task(id+TASK_HUD)
}
/* ==================================
[ROUND END]
===================================*/
public logevent_round_end() {
for(new id = 1; id <= g_maxplayers; id++) {
if(XD)
Guardar(id);
}
}
/* ==================================
[DEATHMSG]
===================================*/
public Event_DeathMsg() {
new attacker = read_data(1)
new victim = read_data(2)
new hs = read_data(3)
new weaponid = get_user_weapon(attacker)
if(victim == attacker) return;
if(is_user_alive(attacker)) {
g_frags[attacker]++
if(get_pcvar_num(cvar_knifex2)) {
if(weaponid == CSW_KNIFE)
g_frags[attacker]++
}
if(get_pcvar_num(cvar_hsx2)) {
if(hs) g_frags[attacker]++
}
AumentarRango(attacker)
}
}
/* ================================
[UPDATE RANGO]
=================================*/
AumentarRango(id) {
new Aumento = false
while(g_frags[id] >= Rangos[g_rango[id]][FRAGS]) {
Aumento = true
g_rango[id]++
}
if(Aumento) {
client_cmd(id, "spk %s", Sonido) // LO PUSE AQUI y ahora si funciona el sonido :D
ColorChat(id, NORMAL, "%s Felicidades subiste al rango: !g[ %s ]", Prefijo, Rangos[g_rango[id]][NOMBRE])
//client_cmd(id, "spk %s", Sonido)
Aumento = false
}
}
/*=====================================
*[SAY]*
=====================================*/
public message_saytext(id) {
static said[192]
read_args(said, charsmax(said))
remove_quotes(said)
if (said[0] == '@' || said[0] == '%' || said[0] == '/' || said[0] == '.' || said[0] == '!' || equal (said, ""))
return PLUGIN_HANDLED
if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;
static color[11], name[32], alive[11]
get_user_team(id,color,charsmax(color))
get_user_name(id,name,charsmax(name))
if (is_user_alive (id)) {
alive = ""
} else {
alive = "[Muerto]"
}
if (is_user_admin(id)) {
if (get_user_flags(id) & ADMIN_KICK)
format(said, charsmax(said), "^x01%s^x04%s ^x03%s ^x04: %s", alive, Rangos[g_rango[id]][NOMBRE], name, said)
} else {
format(said, charsmax(said), "^x01%s^04%s ^x03%s ^x01: %s", alive, Rangos[g_rango[id]][NOMBRE], name, said)
}
static i, team[11]
for (i = 1; i <= g_maxplayers; i++) {
if (!is_user_connected(i)) continue
get_user_name(id,name,charsmax(name))
if (is_user_admin(i) || is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i)) {
get_user_team(i, team, charsmax(team))
changeTeamInfo(i, color)
writeMessage(i, said)
changeTeamInfo(i, team)
}
}
return PLUGIN_HANDLED_MAIN;
}
public message_sayteam(id)
{
static said[192]
read_args(said, charsmax(said))
remove_quotes(said)
if (said[0] == '@' || said[0] == '%' || said[0] == '/' || said[0] == '.' || said[0] == '!' || equal (said, ""))
return PLUGIN_HANDLED
if (!ValidMessage(said, 1)) return PLUGIN_CONTINUE;
static playerTeam, playerTeamName[19]
playerTeam = get_user_team(id)
switch (playerTeam) {
case 1: copy (playerTeamName, 6, "TE")
case 2: copy (playerTeamName, 8, "CT")
default: copy (playerTeamName, 11, "SPEC")
}
static color[11], name[32], alive[11]
get_user_team(id,color,charsmax(color))
get_user_name(id,name,charsmax(name))
if (is_user_alive (id)) {
alive = ""
} else {
alive = "[MUERTO]"
}
if (is_user_admin(id)) {
if (get_user_flags(id) & ADMIN_RCON)
format(said, charsmax(said), "^x01%s [ %s ] ^x04%s ^x03%s ^x04: %s", alive, playerTeam, Rangos[g_rango[id]], name, said)
} else {
format(said, charsmax(said), "^x01%s [ %s ] ^04%s ^x03%s ^x01: %s", alive, playerTeam, Rangos[g_rango[id]],name, said)
}
static i, team[11]
for (i = 1; i <= g_maxplayers; i++) {
if (!is_user_connected(i)) continue;
get_user_name(id,name,charsmax(name))
if (get_user_team(i) == playerTeam || is_user_admin(i)) {
if (is_user_alive(id) && is_user_alive(i) || !is_user_alive(id) && !is_user_alive(i)) {
get_user_team(i, team, charsmax(team))
changeTeamInfo(i, color)
writeMessage(i, said)
changeTeamInfo(i, team)
}
}
}
return PLUGIN_HANDLED_MAIN;
}
public changeTeamInfo(player, team[]) {
message_begin(MSG_ONE, g_msgTeamInfo, _, player)
write_byte(player)
write_string(team)
message_end()
}
public writeMessage(player, message[]) {
message_begin(MSG_ONE, g_msgSayText, {0, 0, 0}, player)
write_byte(player)
write_string(message)
message_end()
}
/* ===================================
*[GUARDADO]*
=====================================*/
Guardar(id) {
formatex(szKey, charsmax(szKey), "data_rangos")
formatex(szRangos, charsmax(szRangos), "%d %d", g_frags[id], g_rango[id])
nfv_set_data(VaultRango, szKey, g_playername[id], szRangos)
}
Cargar(id) {
new g_load_c1[25], g_load_c2[25]
formatex(szKey, charsmax(szKey), "data_rangos")
if(!nfv_get_data(VaultRango, szKey, g_playername[id], szRangos, sizeof(szRangos) - 1)) return;
parse(szRangos, g_load_c1, charsmax(g_load_c1), g_load_c2, charsmax(g_load_c2))
g_frags[id] = str_to_num(g_load_c1)
g_rango[id] = str_to_num(g_load_c2)
}
/* ===================================
*[STOCKS]*
=====================================*/
stock get_weapon_ent_owner(ent)
{
if (pev_valid(ent) != 2)
return -1;
return get_pdata_cbase(ent, 41, 4);
}
// Stock para Saber Si el mensaje es valido
stock ValidMessage(text[], maxcount) {
static len, i, count
len = strlen(text)
count = 0
if (!len)
return false;
for (i = 0; i < len; i++) {
if (text[i] != ' ') {
count++
if (count >= maxcount)
return true;
}
}
return false;
}
Espero puedan guiarse por los codigos y puedan apoyarme muchisisisimas gracias antemano ...