←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Jak zmienić oznaczanie?

  • +
  • -
Sofcik - zdjęcie Sofcik 30.08.2015

Witam.

Mam plugin, który za pomocą komendy /oznacz oznacza wybranego gracza danym kolorem. Chciałbym by zamiast tego oznaczanie gracza było za pomocą najechania na niego i naciśnięcia guzika "E" i aby był ozaczany na kolor zielony. Oto sma pluginu:

#include <amxmodx>
#include <amxmisc>
#include <fakemeta_util>
 
new opcja, gracz_id[33], wybrany;
new name[33];
 
public plugin_init() {
register_plugin("plugin", "1.0", "sweeper");
 
register_clcmd("say /oznacz", "oznacz");
 
}
 
public oznacz(id)
{
if(get_user_team(id) != 2)
return PLUGIN_HANDLED;
 
new tytul[64];
format(tytul, 63, "\rJB Kolor Menu");
new menu = menu_create(tytul, "oznacz_handler");
menu_additem(menu, "Ustaw Kolor");
 
menu_display(id, menu);
 
return PLUGIN_HANDLED;
}
 
public oznacz_handler(id, menu, item)
{
if(!is_user_connected(id))
return PLUGIN_CONTINUE;
 
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
 
switch(item)
{
case 0:
{
Gracz(id);
opcja = 1;
}
}
 
return PLUGIN_CONTINUE;
}
 
public Gracz(id)
{
new menu = menu_create("Wybierz gracza:", "Gracz_handler");
 
for(new i=0, n=0; i<=32; i++)
{
if(!is_user_connected(i))
continue;
gracz_id[n++] = i;
new nazwa_gracza[64];
get_user_name(i, nazwa_gracza, 63)
menu_additem(menu, nazwa_gracza, "0", 0);
}
menu_display(id, menu);
}
 
public Gracz_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
 
wybrany = gracz_id[item];
get_user_name(wybrany, name, 32);
 
if(opcja == 1)
wybierz_kolor(id);
 
return PLUGIN_HANDLED;
}
 
public wybierz_kolor(id)
{
new tytul[25];
format(tytul, 24, "\yKolory:");
new menu = menu_create(tytul, "kolory_handler");
menu_additem(menu, "Niebieski");
menu_additem(menu, "Zielony");
menu_additem(menu, "Czerwony");
 
menu_display(id, menu);
}
 
public kolory_handler(id, menu, item)
{
if(!is_user_alive(id) || !is_user_connected(id))
return PLUGIN_CONTINUE;
 
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
 
switch(item)
{
case 0:
{
fm_set_user_rendering(wybrany, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 25)
client_print(id, print_chat, "Ustawiles graczowi %s kolor niebieski!", name);
}
case 1:
{
fm_set_user_rendering(wybrany, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 25)
client_print(id, print_chat, "Ustawiles graczowi %s kolor zielony!", name);
}
case 2:
{
fm_set_user_rendering(wybrany, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 25)
client_print(id, print_chat, "Ustawiles graczowi %s kolor czerwony!", name);
}
 
}
return PLUGIN_CONTINUE;
}

Chciałbym tez żeby po oznaczeniu gracza pojawiło mu sie pole wyboru jednego z kilku kolorów i gdy jeden wybierze by na czacie pojawiało się info: :Gracz (jego nick) wybrał kolor (np zielony)".

Kolorydo wyboru:

-niebieski;

-zielony;

-fioletowy;

-różowy;

-żółty;

-czerwony.


Użytkownik Sofcik edytował ten post 30.08.2015 19:24
Odpowiedz

  • +
  • -
radim - zdjęcie radim 03.09.2015

#include < amxmodx >
#include < fakemeta >
#include < fun >

new chosen

public plugin_init( )
{
	register_plugin( "Oznacz", "1.0", "radim" )
	
	register_clcmd( "+use", "Choose" )
}

public Choose( id )
{
	new tid, body, target[ 33 ]
	get_user_aiming( id, tid, body )
	get_user_name( tid, target, charsmax( target ) )
	new player = find_player( "a", target )
	
	if( player )
	{
		chosen = player
		ColorMenu( id )
	}
	else
	client_print( id, print_chat, "Nie znaleziono celu!" )
}

public ColorMenu( id )
{
	new iMenu = menu_create( "Wybierz Kolor", "ColorMenu_Handler" );

	menu_additem( iMenu, "Zielony" );
	menu_additem( iMenu, "Niebieski" );
	menu_additem( iMenu, "Fioletowy" );
	menu_additem( iMenu, "Rozowy" );
	menu_additem( iMenu, "Zolty" );
	menu_additem( iMenu, "Czerwony" );

	menu_display( id, iMenu );
}

public ColorMenu_Handler( id, iMenu, iItem )
{
	if( iItem == MENU_EXIT )
	return;
	
	switch( iItem )
	{
	case 0: set_user_rendering( chosen, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 25 )
	case 1: set_user_rendering( chosen, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 25 )
	case 2: set_user_rendering( chosen, kRenderFxGlowShell, 148, 0, 211, kRenderNormal, 25 )
	case 3: set_user_rendering( chosen, kRenderFxGlowShell, 249, 132, 229, kRenderNormal, 25 )
	case 4: set_user_rendering( chosen, kRenderFxGlowShell, 255, 255, 0, kRenderNormal, 25 )
	case 5: set_user_rendering( chosen, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 25 )
	}
}
Odpowiedz

  • +
  • -
Linux' - zdjęcie Linux' 03.09.2015

#include < amxmodx >
#include < fakemeta >
#include < fun >

new chosen

public plugin_init( )
{
	register_plugin( "Oznacz", "1.0", "radim" )
	
	register_clcmd( "+use", "Choose" )
}

public Choose( id )
{
	new tid, body, target[ 33 ]
	get_user_aiming( id, tid, body )
	get_user_name( tid, target, charsmax( target ) )
	new player = find_player( "a", target )
	
	if( player )
	{
		chosen = player
		ColorMenu( id )
	}
	else
	client_print( id, print_chat, "Nie znaleziono celu!" )
}

public ColorMenu( id )
{
	new iMenu = menu_create( "Wybierz Kolor", "ColorMenu_Handler" );

	menu_additem( iMenu, "Zielony" );
	menu_additem( iMenu, "Niebieski" );
	menu_additem( iMenu, "Fioletowy" );
	menu_additem( iMenu, "Rozowy" );
	menu_additem( iMenu, "Zolty" );
	menu_additem( iMenu, "Czerwony" );

	menu_display( id, iMenu );
}

public ColorMenu_Handler( id, iMenu, iItem )
{
	if( iItem == MENU_EXIT )
	return;
	
	switch( iItem )
	{
	case 0: set_user_rendering( chosen, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 25 )
	case 1: set_user_rendering( chosen, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 25 )
	case 2: set_user_rendering( chosen, kRenderFxGlowShell, 148, 0, 211, kRenderNormal, 25 )
	case 3: set_user_rendering( chosen, kRenderFxGlowShell, 249, 132, 229, kRenderNormal, 25 )
	case 4: set_user_rendering( chosen, kRenderFxGlowShell, 255, 255, 0, kRenderNormal, 25 )
	case 5: set_user_rendering( chosen, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 25 )
	}
}

 

+use? o_O . Przeciez to nie zadziala.

Odpowiedz

  • +
  • -
radim - zdjęcie radim 03.09.2015

Spoiler
Odpowiedz

  • +
  • -
Sofcik - zdjęcie Sofcik 07.09.2015

Wielkie dzięki. Popołudniu sprawdze. ;)
Odpowiedz

  • +
  • -
Asiap - zdjęcie Asiap 07.09.2015

o bosh, nawet moderator napisac prostego kodu poprawnie nie potrafi, wstyd

#include <amxmodx>
#include <fakemeta>

new g_hMenuColors;

public plugin_init()
{
	register_forward(FM_CmdStart, "CmdStart");

	g_hMenuColors = menu_create("Wybierz kolor", "HandleChooseColor");
	menu_additem(g_hMenuColors, "Niebieski", "000000255");
	menu_additem(g_hMenuColors, "Zielony", "000255000");
	menu_additem(g_hMenuColors, "Fioletowy", "163073164");
	menu_additem(g_hMenuColors, "Rozowy", "255174201");
	menu_additem(g_hMenuColors, "Zolty", "255255000");
	menu_additem(g_hMenuColors, "Czerwony", "255000000");
	menu_setprop(g_hMenuColors, MPROP_EXIT, MEXIT_NEVER);
}

public CmdStart(id, iUCHandle)
{
	if(!is_user_alive(id) || get_user_team(id) != 2)
	{
		return;
	}

	static iPid, iBody;
	get_user_aiming(id, iPid, iBody);

	if(!is_user_alive(iPid) || get_user_team(iPid) != 1 || ~get_uc(iUCHandle, UC_Buttons) & IN_USE || pev(id, pev_oldbuttons) & IN_USE)
	{
		return;
	}

	menu_display(iPid, g_hMenuColors);
}

public HandleChooseColor(id, menu, item)
{
	if(!is_user_alive(id))
	{
		return;
	}

	static szColor[10], szRGB[10], iBitAccess, iCallBack;
	menu_item_getinfo(menu, item, iBitAccess, szRGB, 9, szColor, 9, iCallBack);

	static szName[32], iColor[3], Float:fColor[3], iRGB, i;
	get_user_name(id, szName, 31);

	iRGB = str_to_num(szRGB);
	iColor[0] = iRGB / 1000000;
	iRGB %= 1000000;
	iColor[1] = iRGB / 1000;
	iColor[2] = iRGB % 1000;

	for(i = 0; i < 3; i++)
	{
		fColor[i] = float(iColor[i]);
	}

	set_pev(id, pev_renderfx, kRenderFxGlowShell);
	set_pev(id, pev_rendermode, kRenderNormal);
	set_pev(id, pev_renderamt, 25.0);
	set_pev(id, pev_rendercolor, fColor);
		
	client_print(0, print_chat, "Gracz %s wybral kolor %s", szName, szColor);
}
Odpowiedz

  • +
  • -
radim - zdjęcie radim 07.09.2015

Jeżeli nie napisałem kodu poprawnie, udowodnij mi błąd i pokaż, że plugin nie będzie działał w praktyce ;) Było to moje ponowne spotkanie z amxx'em po długiej przerwie, błąd każdemu może się zdarzyć tak jak i mi w pierwszym poście. Tacy odważani delikwenci jak Ty byli już na tym forum i nie skończyli zbyt dobrze. Ale pierwszy raz mi się zdarza takie prostactwo i bezczelność ze strony kobiety. Nie traktuj tego jako groźby, a raczej jako przestrogę aby na przyszłość podchodzić do czegoś z dystansem i nie reprezentować sobą pyszałkowatego zachowania.

Co do kodu. Prawda, nie doczytałem dokładnie próśb autora aby menu otwierało się graczu wybranemu. Już poprawione.

Odpowiedz