26/03/2019, 01:42 AM
Hola Este plugin lo vi en el apartado de aportes el plugin funciona muy bien pero mi pedido es si es que en vez de poder elegir los Hat's con dinero, poder elegirlos por niveles, osea cuando se llegue algún nivel poder seleccionar un Hat cuando se alcance otro se pueda seleccionar otro hat
Código PHP:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <engine>
#include <API_OldMenu>
new const PLUGIN_INFO[][] = { "Hats + Camera Rotative", "1.0", "Chamo. & Mario AR." }
new const CAMERA_ROTATIVE_CLASSNAME[] = "Camera_Rotative"
new const CAMERA_ROTATIVE_MODEL[] = "models/arcticorangeT.mdl"
const Float:CAMERA_RADIUS = 100.0
const Float:CAMERA_ELEVATION = 50.0
const Float:CAMERA_ANGLES_ELEVATION = 30.0
const Float:CAMERA_TWIRL_ANGLES = 180.0
const Float:CAMERA_ROTATION_SPEED = 1.5
const Float:ROTATION_TIME = 7.0
#define CAMERA_ROTATIVE_MINS Float: { -10.0, -10.0, 0.0 }
#define CAMERA_ROTATIVE_MAXS Float: { 10.0, 10.0, 25.0 }
new const PREFIX[] = "!g[AMXX]"
enum _:HATS_STRUCT
{
HAT_NAME[30],
HAT_COST,
HAT_ADMIN,
HAT_MODEL[35]
}
new const STRUCT_HATS[][HATS_STRUCT] =
{
{ "Peinado Afro", 800, false, "models/Hats/afro.mdl" },
{ "Alas de Angel", 950, false, "models/Hats/angel2.mdl" },
{ "Flecha", 650, false, "models/Hats/arrow.mdl" },
{ "Carita Feliz", 0, false, "models/Hats/awesome.mdl" },
{ "Sombrero de Cerveza", 750, true, "models/Hats/beerhat.mdl" },
{ "Escudo del Capitan America", 1230, false, "models/Hats/cashield.mdl" },
{ "Cabeza de Queso", 600, false, "models/Hats/cheesehead.mdl" },
{ "Cuernos y Cola Diabolicos", 900, true, "models/Hats/devil2.mdl" },
{ "Traje de Elfo", 1500, false, "models/Hats/elf.mdl" },
{ "Cabeza de Darth Vader", 1300, true, "models/Hats/darth2_big.mdl" },
{ "Auriculares", 800, true, "models/Hats/headphones.mdl" },
{ "Sombrero de Duende", 850, false, "models/Hats/leprechaun.mdl" },
{ "Sombrero de Merlin", 500, false, "models/Hats/merlin.mdl" },
{ "Casco de Vikingo", 1150, true, "models/Hats/viking.mdl" },
{ "Casco Espartano", 1200, true, "models/Hats/Spartan.mdl" },
{ "Sombrero de Robin Hood", 1110, false, "models/Hats/robinhood.mdl" }
// Para agregar hats, es sumamente sencillo, solo tienen que agregar otra linea con los siguientes parametros
// Ejemplo
// Nombre del Sombrero Costo ($$) Es para todos/admines (false = todos | true = admines) ubicacion del sombrero (por defecto es models/Hats)
{ "Sombrerito :3", 500, false, "models/Hats/modelo_del_sombrerito.mdl" } // Este es solo de ejemplo
}
new Camera_Rotative_Entity[33], Hat_Entity[33], Current_Page[33], Float:Camera_Rotative_Time[33]
public plugin_init()
{
register_plugin(PLUGIN_INFO[0], PLUGIN_INFO[1], PLUGIN_INFO[2])
register_clcmd("say /hats", "SM_HATS")
register_clcmd("say hats", "SM_HATS")
register_think(CAMERA_ROTATIVE_CLASSNAME, "Camera_Rotative_Think")
register_event("DeathMsg", "Event_DeathMsg", "a")
oldmenu_register()
}
public plugin_precache()
{
precache_model(CAMERA_ROTATIVE_MODEL)
for (new i = 0; i < sizeof (STRUCT_HATS); i++)
precache_model(STRUCT_HATS[i][HAT_MODEL])
}
public SM_HATS(const Player)
{
static i, Menu, Temp[3], Len[350];
Menu = menu_create("\wMenu de \yHats \r(Sombreros)\y^nElige el Sombrero^nque mas te agrade.", "HM_HATS")
for (i = 0; i < sizeof (STRUCT_HATS); i++)
{
if (STRUCT_HATS[i][HAT_COST])
{
if (STRUCT_HATS[i][HAT_ADMIN])
formatex(Len, charsmax(Len), "\%s%s \y[%d$$] %s", cs_get_user_money(Player) >= STRUCT_HATS[i][HAT_COST] ? "w" : "d", STRUCT_HATS[i][HAT_NAME], STRUCT_HATS[i][HAT_COST], is_user_admin(Player) ? "\w(Disponible)" : "\r(Solo para Admines)")
else
formatex(Len, charsmax(Len), "\%s%s \y[%d$$] \%s(Disponible)", cs_get_user_money(Player) >= STRUCT_HATS[i][HAT_COST] ? "w" : "d", STRUCT_HATS[i][HAT_NAME], STRUCT_HATS[i][HAT_COST], cs_get_user_money(Player) >= STRUCT_HATS[i][HAT_COST] ? "w" : "d")
}
else
{
if (STRUCT_HATS[i][HAT_ADMIN])
formatex(Len, charsmax(Len), "\w%s \y[Gratis] %s", STRUCT_HATS[i][HAT_NAME], STRUCT_HATS[i][HAT_COST], is_user_admin(Player) ? "\w(Disponible)" : "\r(Solo para Admines)")
else
formatex(Len, charsmax(Len), "\w%s \y[Gratis] \w(Disponible)", STRUCT_HATS[i][HAT_NAME], STRUCT_HATS[i][HAT_COST])
}
num_to_str(i, Temp, charsmax(Temp))
menu_additem(Menu, Len, Temp)
}
menu_setprop(Menu, MPROP_BACKNAME, "\yAnterior")
menu_setprop(Menu, MPROP_NEXTNAME, "\ySiguiente")
menu_setprop(Menu, MPROP_EXITNAME, "\ySalir")
Current_Page[Player] = min(Current_Page[Player], (menu_pages(Menu)-1))
menu_display(Player, Menu, Current_Page[Player])
}
public HM_HATS(const Player, const Menu, const Item)
{
if (Item == MENU_EXIT || !is_user_alive(Player))
{
menu_destroy(Menu)
return;
}
static Page
player_menu_info(Player, Page, Page, Current_Page[Player])
if (STRUCT_HATS[Item][HAT_ADMIN])
{
if (is_user_admin(Player))
SM_CHOOSE_HAT(Player, Item)
else
{
Chat_Color(Player, "%s !yNecesitas ser !teamAdministrador !ypara comprar este sombrero", PREFIX)
SM_HATS(Player)
return;
}
}
else
SM_CHOOSE_HAT(Player, Item)
}
public SM_CHOOSE_HAT(const Player, const Item)
{
if (STRUCT_HATS[Item][HAT_COST])
oldmenu_create("HM_CHOOSE_HAT", "\wSombrero Elegido: \y%s^n\wCosto: \r%d$$", STRUCT_HATS[Item][HAT_NAME], STRUCT_HATS[Item][HAT_COST])
else
oldmenu_create("HM_CHOOSE_HAT", "\wSombrero Elegido: \y%s^n\wCosto: \rGratis", STRUCT_HATS[Item][HAT_NAME])
oldmenu_additem(1, Item, "\r[1]. \wElegir \ySombrero")
oldmenu_additem(2, Item, "\r[2]. \wProbar \ySombrero")
oldmenu_additem(3, Item, "\r[3]. \wRemover \ySombrero Actual^n^n^n")
oldmenu_additem(0, MENU_EXIT, "\r[0]. \wElegir otro \ySombrero.")
oldmenu_display(Player)
}
public HM_CHOOSE_HAT(const Player, const Item, const Value, const Page)
{
if (!is_user_alive(Player))
return;
switch (Item)
{
case 0: SM_HATS(Player)
case 1:
{
if (!is_valid_ent(Camera_Rotative_Entity[Player]))
{
if (cs_get_user_money(Player) >= STRUCT_HATS[Value][HAT_COST])
{
if (is_valid_ent(Hat_Entity[Player]))
{
remove_entity(Hat_Entity[Player])
Hat_Entity[Player] = 0
}
Hat_Entity[Player] = create_entity("info_target")
if (!is_valid_ent(Hat_Entity[Player]))
return;
entity_set_int(Hat_Entity[Player], EV_INT_movetype, MOVETYPE_FOLLOW)
entity_set_edict(Hat_Entity[Player], EV_ENT_aiment, Player)
entity_set_int(Hat_Entity[Player], EV_INT_rendermode, kRenderNormal)
entity_set_model(Hat_Entity[Player], STRUCT_HATS[Value][HAT_MODEL])
cs_set_user_money(Player, (cs_get_user_money(Player)-STRUCT_HATS[Value][HAT_COST]), 1)
Chat_Color(Player, "%s !ySombrero !team%s !yelegido con exito.", PREFIX, STRUCT_HATS[Value][HAT_NAME])
}
else
{
Chat_Color(Player, "%s !yNecesitas !g%d$$ !ypara elegir este Sombrero", PREFIX, STRUCT_HATS[Value][HAT_COST])
SM_CHOOSE_HAT(Player, Value)
return;
}
}
else
SM_CHOOSE_HAT(Player, Value)
}
case 2:
{
if (!is_valid_ent(Camera_Rotative_Entity[Player]))
{
if (!is_valid_ent(Hat_Entity[Player]))
{
Hat_Entity[Player] = create_entity("info_target")
if (!is_valid_ent(Hat_Entity[Player]))
return;
entity_set_int(Hat_Entity[Player], EV_INT_movetype, MOVETYPE_FOLLOW)
entity_set_edict(Hat_Entity[Player], EV_ENT_aiment, Player)
entity_set_int(Hat_Entity[Player], EV_INT_rendermode, kRenderNormal)
entity_set_model(Hat_Entity[Player], STRUCT_HATS[Value][HAT_MODEL])
static Float:Origin[3], Float:Angles[3];
entity_get_vector(Player, EV_VEC_origin, Origin)
entity_get_vector(Player, EV_VEC_angles, Angles)
Origin[0] += CAMERA_RADIUS
Origin[2] += CAMERA_ELEVATION
Angles[1] = CAMERA_TWIRL_ANGLES
Angles[0] = CAMERA_ANGLES_ELEVATION
Create_Camera(Player, Origin, Angles)
SM_CHOOSE_HAT(Player, Value)
}
else
{
Chat_Color(Player, "%s !yYa tienes un Sombrero puesto. Debes removerlo para probar un Sombrero", PREFIX)
SM_CHOOSE_HAT(Player, Value)
return;
}
}
else
SM_CHOOSE_HAT(Player, Value)
}
case 3:
{
if (!is_valid_ent(Camera_Rotative_Entity[Player]))
{
if (!is_valid_ent(Hat_Entity[Player]))
{
Chat_Color(Player, "%s !yNo puedes remover un sombrero por que no tienes ninguno", PREFIX)
SM_CHOOSE_HAT(Player, Value)
return;
}
remove_entity(Hat_Entity[Player])
Chat_Color(Player, "%s !ySombrero removido con exito.", PREFIX)
SM_CHOOSE_HAT(Player, Value)
}
else
SM_CHOOSE_HAT(Player, Value)
}
}
}
public Camera_Rotative_Think(const Entity)
{
if (!is_valid_ent(Entity))
return;
static Float:Origin[3], Float:Radius, Float:Rotation_Angle, Float:Vision_Angle[3], Owner, Float:Game_Time;
Owner = entity_get_edict(Entity, EV_ENT_owner)
entity_get_vector(Owner, EV_VEC_origin, Origin)
Radius = entity_get_float(Entity, EV_FL_fuser1)
Rotation_Angle = entity_get_float(Entity, EV_FL_fuser2)
entity_get_vector(Entity, EV_VEC_angles, Vision_Angle)
Game_Time = get_gametime()
CALCULATE_NEXT_POSITION(Origin, Radius, Rotation_Angle)
Origin[2] += CAMERA_ELEVATION
entity_set_origin(Entity, Origin)
if (Rotation_Angle >= 359.9)
Rotation_Angle = 0.0
else
Rotation_Angle += CAMERA_ROTATION_SPEED
entity_set_float(Entity, EV_FL_fuser2, Rotation_Angle)
Vision_Angle[1] += CAMERA_ROTATION_SPEED
entity_set_vector(Entity, EV_VEC_angles, Vision_Angle)
entity_set_int(Entity, EV_INT_fixangle, 1)
entity_set_float(Entity, EV_FL_nextthink, (halflife_time() + 0.001))
if (Camera_Rotative_Time[Owner] < Game_Time)
Remove_Camera_Rotative(Owner)
}
public Remove_Camera_Rotative(const Player)
{
if (is_valid_ent(Camera_Rotative_Entity[Player]))
{
remove_entity(Camera_Rotative_Entity[Player])
Camera_Rotative_Entity[Player] = 0
}
if (is_valid_ent(Hat_Entity[Player]))
{
remove_entity(Hat_Entity[Player])
Hat_Entity[Player] = 0
}
attach_view(Player, Player)
}
public Event_DeathMsg()
{
static Victim;
Victim = read_data(2)
if (is_valid_ent(Hat_Entity[Victim]))
{
remove_entity(Hat_Entity[Victim])
Hat_Entity[Victim] = 0
}
}
public client_disconnect(Player)
{
if (is_valid_ent(Camera_Rotative_Entity[Player]))
{
remove_entity(Camera_Rotative_Entity[Player])
Camera_Rotative_Entity[Player] = 0
}
if (is_valid_ent(Hat_Entity[Player]))
{
remove_entity(Hat_Entity[Player])
Hat_Entity[Player] = 0
}
}
stock Create_Camera(const Player, const Float:Origin[3], const Float:Angles[3])
{
Camera_Rotative_Entity[Player] = create_entity("info_target")
if (!is_valid_ent(Camera_Rotative_Entity[Player]))
return;
entity_set_string(Camera_Rotative_Entity[Player], EV_SZ_classname, CAMERA_ROTATIVE_CLASSNAME)
entity_set_model(Camera_Rotative_Entity[Player], CAMERA_ROTATIVE_MODEL)
entity_set_int(Camera_Rotative_Entity[Player], EV_INT_solid, SOLID_BBOX)
entity_set_int(Camera_Rotative_Entity[Player], EV_INT_movetype, MOVETYPE_FLY)
entity_set_size(Camera_Rotative_Entity[Player], CAMERA_ROTATIVE_MINS, CAMERA_ROTATIVE_MAXS)
entity_set_origin(Camera_Rotative_Entity[Player], Origin)
entity_set_vector(Camera_Rotative_Entity[Player], EV_VEC_angles, Angles)
entity_set_int(Camera_Rotative_Entity[Player], EV_INT_fixangle, 1)
entity_set_edict(Camera_Rotative_Entity[Player], EV_ENT_owner, Player)
entity_set_float(Camera_Rotative_Entity[Player], EV_FL_fuser1, CAMERA_RADIUS)
entity_set_float(Camera_Rotative_Entity[Player], EV_FL_fuser2, 0.0)
attach_view(Player, Camera_Rotative_Entity[Player])
entity_set_float(Camera_Rotative_Entity[Player], EV_FL_nextthink, (halflife_time() + 0.01))
Camera_Rotative_Time[Player] = (get_gametime() + ROTATION_TIME)
}
stock CALCULATE_NEXT_POSITION(Float:Origin[3], const Float:Radius, const Float:Rotation_Angle)
{
if (0 <= Rotation_Angle <= 90.0)
{
Origin[0] += (Radius * floatcos(Rotation_Angle, degrees))
Origin[1] += (Radius * floatsin(Rotation_Angle, degrees))
}
else if (90.0 <= Rotation_Angle <= 179.99)
{
Origin[0] -= (Radius * floatsin((Rotation_Angle-90.0), degrees))
Origin[1] += (Radius * floatcos((Rotation_Angle-90.0), degrees))
}
else if (180.0 <= Rotation_Angle <= 269.99)
{
Origin[0] -= (Radius * floatcos((Rotation_Angle-180.0), degrees))
Origin[1] -= (Radius * floatsin((Rotation_Angle-180.0), degrees))
}
else if (270.0 <= Rotation_Angle <= 359.99)
{
Origin[0] += (Radius * floatsin((Rotation_Angle-270.0), degrees))
Origin[1] -= (Radius * floatcos((Rotation_Angle-270.0), degrees))
}
}
stock Chat_Color(Player, const Input[], const any:...)
{
static Message[191], MSG_SayText;
if (!MSG_SayText)
MSG_SayText = get_user_msgid("SayText")
vformat(Message, 190, Input, 3)
replace_all(Message, 190, "!g", "^4")
replace_all(Message, 190, "!y", "^1")
replace_all(Message, 190, "!team", "^3")
message_begin(Player ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, MSG_SayText, .player = Player)
write_byte(Player ? Player : 33)
write_string(Message)
message_end()
}