[AMXX] CTmenu
Lehekülg 1, lehekülgi kokku 1 • Share
- Sulipoiss PeeterJuunior
- Liitus : 10/01/2015
Postitusi : 28
AMXX Ctmenu kust võiks neid leida ???
- Tonight
- Liitus : 19/02/2012
Postitusi : 18000
- Kood:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <fun>
#define PLUGIN "JB CT Menu"
#define VERSION "1.0"
#define AUTHOR "MiX"
#define COLOR_OFF -1
#define COLOR_RED 0
#define COLOR_BLUE 1
#define COLOR_GREEN 2
#define COLOR_LAST 2
new found[10];
new const MSG_PREFIX[] = "|Fn|"; // Defines the Message Prefix
new g_iSelectedColor[33], g_sayText;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say /ctmenu", "clcmd_say_ctmenu", _, "- Opens a menu for CTs");
register_logevent("logevent_roundstart", 2, "1=Round_Start");
g_sayText = get_user_msgid("SayText");
}
// Unglow all Terrorists on round start
public logevent_roundstart()
{
static i;
for (i = 0; i < 33; ++i)
if (is_user_alive(i))
set_user_rendering(i, kRenderFxGlowShell, 0, 0, 0);
}
srv_message(id, const message[], any:...)
{
static szMessage[192];
static const MSG_PREFIX_LENGTH = (sizeof(MSG_PREFIX) + 3);
formatex(szMessage, MSG_PREFIX_LENGTH, "^x04%s^x01 ", MSG_PREFIX);
vformat(szMessage[MSG_PREFIX_LENGTH], 191 - MSG_PREFIX_LENGTH, message, 3);
if (!id) {
message_begin(MSG_BROADCAST, g_sayText, _, -1);
write_byte(-1);
} else {
message_begin(MSG_ONE_UNRELIABLE, g_sayText, _, id);
write_byte(id);
}
write_string(szMessage);
message_end();
}
// A player said /ctmenu in chat
public clcmd_say_ctmenu(id)
{
// Check if user is an alive CT, else print an error message
if (cs_get_user_team(id) != CS_TEAM_CT || !is_user_alive(id)) {
srv_message(id, "You cannot open this menu as it's for alive CTs only.");
return PLUGIN_HANDLED;
}
new menu = menu_create("CT Menu", "menu_handle_ct");
menu_additem(menu, "Glow Players");
menu_additem(menu, "Glow into 50/50");
menu_additem(menu, "\dOpen Cells");
menu_additem(menu, "\dStart a Funday");
menu_display(id, menu);
return PLUGIN_HANDLED;
}
// Handles the option chosen in the CT Menu
public menu_handle_ct(id, menu, item)
{
switch (item) {
case 0: {
menu_destroy(menu);
g_iSelectedColor[id] = 0; // Set the first color option to the default color
menu_display(id, menu_create_glow(id));
}
case 1: {
menu_destroy(menu);
glow_terrors_random(id);
}
case 2: {
menu_destroy(menu);
Push_Button()
}
case 3: {
menu_destroy(menu);
srv_message(id, "Functionality not yet implemented");
}
default: // On exit
menu_destroy(menu);
}
return PLUGIN_HANDLED;
}
// Creates and returns the menu for glowing Terrorists
public menu_create_glow(id)
{
static i, iTerrors[32], iTerrorsNum, iItemCount, szColorItem[17], szTempName[34], szMenuInfo[1];
static iTempId;
// The currently selected color
switch (g_iSelectedColor[id]) {
case COLOR_RED:
copy(szColorItem, 16, "\yColor: \wRed");
case COLOR_BLUE:
copy(szColorItem, 16, "\yColor: \wBlue");
case COLOR_GREEN:
copy(szColorItem, 16, "\yColor: \wGreen");
default:
copy(szColorItem, 16, "\yColor: \wOff");
}
new menu = menu_create("CT Menu - Glow", "menu_handle_glow");
menu_additem(menu, "\yUnglow all", {-1});
get_players(iTerrors, iTerrorsNum, "e", "TERRORIST");
iItemCount = 1; // The amount of items on the current page
for (i = 0; i < iTerrorsNum; i++) {
iItemCount++;
if (iItemCount > 6) {
// The 7th item is the color chooser; 8 and 9 are previous and next page
menu_additem(menu, szColorItem, {0});
iItemCount = 0;
}
iTempId = iTerrors[i];
szMenuInfo[0] = iTempId; // Store the ID in the info
if (is_user_alive(iTempId)) {
get_user_name(iTempId, szTempName, 33);
} else {
copy(szTempName, 2, "\d");
get_user_name(iTempId, szTempName[2], 31);
}
menu_additem(menu, szTempName, szMenuInfo);
}
menu_additem(menu, szColorItem, {0}); // The last item is always the color chooser
return menu;
}
// Handles the option chosen in the Glow menu
public menu_handle_glow(id, menu, item)
{
if (item == MENU_EXIT) {
menu_destroy(menu);
return PLUGIN_HANDLED;
}
// Get the selected item from the info
static szMenuInfo[1], iTarget, iAccess, iCallback, iPage;
menu_item_getinfo(menu, item, iAccess, szMenuInfo, 1, _, _, iCallback);
iTarget = szMenuInfo[0];
// Check which item was selected
switch (iTarget) {
case -1: { // Unglow all
static i, iTerrors[32], iTerrorsNum, szName[32];
get_players(iTerrors, iTerrorsNum, "ae", "TERRORIST");
for (i = 0; i < iTerrorsNum; i++)
set_user_rendering(iTerrors[i], kRenderFxGlowShell, 0, 0, 0);
// Announce in chat
get_user_name(id, szName, 31);
srv_message(0, "%s has split the prisoners into two teams.", szName);
}
case 0: { // Change color
if (g_iSelectedColor[id] >= COLOR_LAST)
g_iSelectedColor[id] = COLOR_OFF;
else
g_iSelectedColor[id]++;
}
default: { // Glow a player
if (is_user_alive(iTarget)) { // Disregard dead players
static iColor[3], szColor[6] //szName[32], szTarg[32];
// The selected color
switch (g_iSelectedColor[id]) {
case COLOR_RED:{
iColor = {255, 0, 0};
copy(szColor, 5, "red");
}
case COLOR_BLUE: {
iColor = {0, 0, 255};
copy(szColor, 5, "blue");
}
case COLOR_GREEN: {
iColor = {0, 255, 0};
copy(szColor, 5, "green");
}
default: iColor = {0, 0, 0};
}
set_user_rendering(iTarget, kRenderFxGlowShell, iColor[0], iColor[1], iColor[2]);
}
}
}
menu_destroy(menu);
iPage = (item / 7); // 7 items per page (previous/next page and exit do not count as items)
menu_display(id, menu_create_glow(id), iPage);
return PLUGIN_HANDLED;
}
// Divide all alive Terrorists into two Teams and glows them accordingly
public glow_terrors_random(id)
{
static i, iTerrors[32], iTerrorsNum, iTeamMax, iTeamANum, iTeamBNum, iTeamA[16], iTeamB[16];
get_players(iTerrors, iTerrorsNum, "ae", "TERRORIST");
iTeamMax = (iTerrorsNum / 2);
iTeamANum = 0;
iTeamBNum = 0;
for (i = 0; i < iTerrorsNum; i++) {
if (iTeamANum < iTeamMax) { // Check if Team A isn't full yet
// Check if Team B isn't full yet, then randomly decide
if ((iTeamBNum < iTeamMax) && random(2)) {
iTeamB[iTeamBNum] = iTerrors[i];
iTeamBNum++;
} else { // Fill Team A with (remaining) Players
iTeamA[iTeamANum] = iTerrors[i];
iTeamANum++;
}
} else { // Fill Team B with remaining Players
iTeamB[iTeamBNum] = iTerrors[i];
iTeamBNum++;
}
}
for (i = 0; i < iTeamANum; i++)
set_user_rendering(iTeamA[i], kRenderFxGlowShell, 255, 0, 0);
for (i = 0; i < iTeamBNum; i++)
set_user_rendering(iTeamB[i], kRenderFxGlowShell, 0, 0, 255);
// Announce in chat
static szName[32];
get_user_name(id, szName, 31);
srv_message(0, "%s has randomly divided the Terrorists into two Teams.", szName);
}
public Push_Button()
{
new ent = 1
new ent3
new Float:origin[3]
new Float:radius = 200.0
new class[32]
new name[32]
new pos
while((pos <= sizeof(found)) && (ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "info_player_deathmatch")))
{
new ent2 = 1
pev(ent, pev_origin, origin)
while((ent2 = engfunc(EngFunc_FindEntityInSphere, ent2, origin, radius)))
{
if(!pev_valid(ent2))
continue
pev(ent2, pev_classname, class, charsmax(class))
if(!equal(class, "func_door"))
continue
pev(ent2, pev_targetname, name, charsmax(name))
ent3 = engfunc(EngFunc_FindEntityByString, 0, "target", name)
if(pev_valid(ent3) && (in_array(ent3, found, sizeof(found)) < 0))
{
ExecuteHamB(Ham_Use, ent3, 0, 0, 1, 1.0)
found[pos] = ent3
pos++
break
}
}
}
return pos
}
stock in_array(needle, data[], size)
{
for(new i = 0; i < size; i++)
{
if(data[i] == needle)
return i
}
return -1
}
http://www.amxmodx.org/webcompiler.cgi
- Sulipoiss PeeterJuunior
- Liitus : 10/01/2015
Postitusi : 28
Soovid vestluses osaleda?
Selleks logi sisse või tee endale kasutaja.
Lehekülg 1, lehekülgi kokku 1
Permissions in this forum:
Sa ei saa vastata siinsetele teemadele