Dodano 2011-10-04 16:32:33 / Kategoria: Enemy Territory / Autor: Kynval
Witam. Wiele osób pyta mnie jak zrobić własne menu do łączenia się na servery...
otóż... postawnowiłem raz napisać i mieć z głowy.

Robienie tego menu jest średnio trudne...
dla osób, które będą robić to po raz pierwszy, może zając to chwilkę, ale postaram sie napisac to bardzo klarownie i piknie :)

zaczynajmy!!!!!


------------------------------------------------

NASZE PRZYKŁADOWE MENU WYGLĄDAĆ BĘDZIE TAK:



Do stworzenia tego pliku będziemy potrzebować plik:

main.menu

który znajdziesz w pliku:

pak0.pk3


natomias ten plik znajdziesz w folderze Wolfenstein>etmain>

kiedy wejdziesz już w plik pak0.pk3 musisz wejść do folderu:
[pliki .pk3 musisz otwierać za pomocą WinRar'a, czyli:
ppm>Właściwości>i tu zmieniasz na winrar...]





ui, tam znajdziesz potrzebny nam plik!
Wyciągasz ten plik (przykladowo na pulpit).

Otwórz plik main.menu, jeżeli nie chce się otworzyć, włącz właściwości tego pliku i ustaw aby otwierał się w Wordpad'zie! (notatnik też może być, ale działa gorzej!)

kiedy otowrzysz ten plik zobaczysz w nim cały, czysty kod menu:


#include "ui/menudef.h"

// Defines //

#define WINDOW_X		16
#define WINDOW_Y		16
#define WINDOW_WIDTH	128
#define WINDOW_HEIGHT	200
#define GROUP_NAME		"grpMain"

// Macros //

#include "ui/menumacros.h"
	
// Opener //

menuDef {
	name		"main_opener"
	visible		0
	fullscreen	0
	rect		WINDOW_X WINDOW_Y WINDOW_WIDTH WINDOW_HEIGHT
	
	onOpen {
		open fadebox_black ;
		open background_1 ;
		setmenuitemcolor fadebox_black fadebox backcolor 0 0 0 1 ;
		fadeoutmenu fadebox_black ;
		open main ;
		clearcvar ui_profile_create_error ;
		close main_opener	
	}
}

// Main Menu //

menuDef {
	name		"main"
	visible		0
	fullscreen	0
	rect		WINDOW_X WINDOW_Y WINDOW_WIDTH WINDOW_HEIGHT
	style		WINDOW_STYLE_FILLED
  
	onOpen {
//		setitemcolor fadebox backcolor 0 0 0 1 ;
//		uiScript stopRefresh ;
//		
		conditionalscript cl_profile 1
			( "clearFocus" )
			( "close main ; open profile_create_initial_opener" )	// do we want an abort here?

		// ydnar
		conditionalscript ROldModeCheck 2
			( "clearFocus ; open vid_confirm" )
			( "clearFocus" )

		conditionalscript cl_autoupdate 1
			( "checkautoupdate" )
			( "clearFocus" )
	}
	
	onEsc {
		clearFocus ;
		open quit
	}

// Background Logo //
	
	itemDef {
		name		"et_logo"
		rect		104 124 400 200		// 16, 16 offset!!
		style		WINDOW_STYLE_SHADER
		background	"ui/assets/et_logo_huge"
		visible		1
		decoration
	}

// Company Logos //

	/*itemDef {
		name		"id_logo"
		rect		0 400 48 48		// 16, 16 offset!!
		style		WINDOW_STYLE_SHADER
		background	"ui/assets/logo_id_dark"
		forecolor	1 1 1 1
		visible		1
		decoration
	}
	
	itemDef {
		name		"atvi_logo"
		rect		52 421 108 27		// 16, 16 offset!! (note offset to left a little as well)
		style		WINDOW_STYLE_SHADER
		background	"ui/assets/logo_atvi_dark"
		forecolor	1 1 1 1
		visible		1
		decoration
	}

	itemDef {
		name		"sd_logo"
		rect		$evalfloat(640-(2*WINDOW_X)-48) 400 48 48		// 16, 16 offset!!
		style		WINDOW_STYLE_SHADER
		background	"ui/assets/logo_sd_dark"
		forecolor	1 1 1 1
		visible		1
		decoration
	}*/
	
	itemDef {
		name		"sd_logo"
		rect		4 394 54 54		// 16, 16 offset!!
		style		WINDOW_STYLE_SHADER
		background	"ui/assets/logo_sd_dark"
		forecolor	1 1 1 1
		visible		1
		decoration
	}
	
	itemDef {
		name		"atvi_logo"
		rect		$evalfloat(640-(2*WINDOW_X)-48-4-108) 421 108 27		// 16, 16 offset!! (note offset to left a little as well)
		style		WINDOW_STYLE_SHADER
		background	"ui/assets/logo_atvi_dark"
		forecolor	1 1 1 1
		visible		1
		decoration
	}
	
	itemDef {
		name		"id_logo"
		rect		$evalfloat(640-(2*WINDOW_X)-48) 400 48 48		// 16, 16 offset!!
		style		WINDOW_STYLE_SHADER
		background	"ui/assets/logo_id_dark"
		forecolor	1 1 1 1
		visible		1
		decoration
	}


// Window //

	WINDOW( "MAIN", 50 )
	
// Buttons //

	BUTTON( 6, 32, WINDOW_WIDTH-12, 18, "PLAY ONLINE", .3, 14, close main ; /*close backgroundmusic ; open backgroundmusic_server ;*/ uiScript UpdateFilter ; uiScript ServerSortDown 4 ; open playonline )
	BUTTON( 6, 56, WINDOW_WIDTH-12, 18, "HOST GAME", .3, 14, close main ; /*close backgroundmusic ; open backgroundmusic_server ;*/ uiScript loadArenas ; uiScript initHostGameFeatures ; open hostgame )
	BUTTON( 6, 80, WINDOW_WIDTH-12, 18, "REPLAYS", .3, 14, close main ; open viewreplay )
	BUTTON( 6, 104, WINDOW_WIDTH-12, 18, "OPTIONS", .3, 14, close main ; open options )
	BUTTON( 6, 128, WINDOW_WIDTH-12, 18, "PROFILE", .3, 14, close main ; open profile )
	BUTTON( 6, 152, WINDOW_WIDTH-12, 18, "CREDITS", .3, 14, close main ; open credits_splashdamage )
	BUTTON( 6, 176, WINDOW_WIDTH-12, 18, "EXIT GAME", .3, 14, clearFocus ; open quit )
}


musisz teraz pomyśleć ile chcesz dodać guzików, ponieważ na samej górze musisz ustawic "tło" przycików... jeżeli tego nie zmienisz, to pojawią się guziki, ale nie bedzie dało sie ich nacisnąć!

zmieniasz to tutaj:


#define WINDOW_X		16
#define WINDOW_Y		16
#define WINDOW_WIDTH	128
#define WINDOW_HEIGHT	200 /tutaj ustawiasz dolną krawędz, tylką tą krawędź się zmienia!
#define GROUP_NAME		"grpMain"



jeżeli chcesz, aby krawędź tego tła kończyła się odległością oryginalną od guzika, to musisz ustawić WINDOW_HEIGHT o 24 większe od liczby położenia guzika (do tej inforamcji wrócimy później)

ale jeżeli planujesz dodać 1 guzik, możesz juz zmienić #define WINDOW_HEIGHT na 224


------------------------------------------------

Teraz przechodzimy bezpośrednio do guzików.
czyli schodzimy na sam dół pliku main.menu
i teraz... ważne info!

Jeżeli chcemy dodać guzik na samej górze, tam gdzie domyślnie mamy przycisk "PLAY ONLINE", sprawi to duże utrudnienia, gdyz każde inne polecenie będziemy musieli kopiować i przesuwac w dół. Dziś skupię się na dodawaniu na samym dole... ;P

Tak więc... na dole mamy // buttons //


// Buttons //

	BUTTON( 6, 32, WINDOW_WIDTH-12, 18, "PLAY ONLINE", .3, 14, close main ; /*close backgroundmusic ; open backgroundmusic_server ;*/ uiScript UpdateFilter ; uiScript ServerSortDown 4 ; open playonline )
	BUTTON( 6, 56, WINDOW_WIDTH-12, 18, "HOST GAME", .3, 14, close main ; /*close backgroundmusic ; open backgroundmusic_server ;*/ uiScript loadArenas ; uiScript initHostGameFeatures ; open hostgame )
	BUTTON( 6, 80, WINDOW_WIDTH-12, 18, "REPLAYS", .3, 14, close main ; open viewreplay )
	BUTTON( 6, 104, WINDOW_WIDTH-12, 18, "OPTIONS", .3, 14, close main ; open options )
	BUTTON( 6, 128, WINDOW_WIDTH-12, 18, "PROFILE", .3, 14, close main ; open profile )
	BUTTON( 6, 152, WINDOW_WIDTH-12, 18, "CREDITS", .3, 14, close main ; open credits_splashdamage )
	BUTTON( 6, 176, WINDOW_WIDTH-12, 18, "EXIT GAME", .3, 14, clearFocus ; open quit )
}


jeżeli dodajemy na samym dole to kopiujemy ostatnią linijkę zaczynającą sie na BUTTON; w tym przypadku przycisk EXIT.

kiedy już skopiujemy...
musimy zmienić wartość 176, która ustala położenie guzika... jeżeli zapomnimy to zmienić, to wtedy na tej wysokości pojawią się 2 guziki... przez co nie będą działać poprawnie.

tak więc...

domyslną wartością między guzikami jest ... 24 ;)
czyli dodając kolejny guzik musimy policzyć... 176+24 = ? 200

a więc wpisujemy


BUTTON( 6, 200,


6 nie ruszamy... jest to liczba która mówi nam, w jakiej odleglości od lewej krawedzi pojawi się guzik!

dalej mamy

 WINDOW_WIDTH-12, 18,

tutaj również nic nie zmieniamy...

potem jest nazwa guzika, która znajduje się w cudzysłowiu. nie możemy o tym zapomnieć, aby otworzyc i zamknąć cudzysłów, bo będzie kiszka :)

możemy dodawać w tym miejscy kolory, oczywiscie jak to w ET, poprzez znak ^.
na przykladzie mamy guzik który wrzuca na mój server...
tak więc opiszę to tak, jak na obrazku.

"^f.:^3+^8TS^3+^f:."


okej, ustaliliśmy nazwę... teraz trzeba ustawić polecenie, które sprawi, że wejdziemy na server.
w tym momencie już jest zupełnie inaczej niż w guziku EXIT.
zostawiamy jak jest...

.3, 14,

a po przecinku wpisujemy:

exec "connect 80.72.37.12:27960"


tutaj znowu nie można zapomnieć o znaku " "
wpisujemy -> exec "connect 1.ip.servera:port"


proste..
możemy sobie rówież ułatwić wchodzenie na server z hasłem :)
po zrobieniu tego, przycik sam będzie wysyłał hasło... tak więc będziemy się łączyć od razu na server, bez wpisywania hasła! (to jest super! :D)

tak więc:
po dodaniu polecenia z IP servera


exec "connect 80.72.37.12:27960"


wpisujemy po spacji średnik ( ; ), potem odzielamy spacją i dodajemy kolejne polecenie:

exec "password hasloservera"

i gotowe.
czyli teraz, pełny kod guziczka wygląda następująco:


BUTTON( 6, 200, WINDOW_WIDTH-12, 18, "^f.:^3+^8TS^3+^f:.", .3, 14, exec "connect 80.72.37.12:27960" ; exec "password hasloservera" )


GOTOWY PLIK!
ale można również dodac inne polecenia:

exec "set rate 25000"; exec "set com_hunkmegs 128"; exec "set cg_autorate 1"; 

itp...[/color]

------------------------------------------------

Mamy już gotowy plik main.menu, ale żeby działał, trzeba go wrzucić albo na swoj komputer do foldera etmain (wtedy po włączeniu ET pojawi się twoje menu!) albo na server...
Wtedy ludzie, po ściągnięciu tego pliku będą mieli twoje menu! (częsty sposób reklamowania serverów... znienawidzony przez graczy!)


ale!
ten plik musi znaleść się w pliczku o foramcie .pk3

najprostszym sposobem uzyskania takiego pliku jest wejść do foldera etmain
(tam gdzie wchodziliśmy aby odszukać plik pak0.pk3) i szukamy pliczku...
pak1.pk3

wyciągamy ten plik na pulpit i od razu zmieniamy nazwe (F2 na plik, lub PPM [prawy przycisk myszy] > zmień nazwę)


WAŻNE INFO!

plik ten musi nośić nazwę, która będzie zaczynać sie od R!
to dlatego, że nadpisujemy pliki oryginalne, które znajdują sie w pliku noszącym nazwe na P (pak0.pk3)
dlatego na wielu serverach pliki nazywają się np: z_menu.pk3, zz_... itp...

kiedy już ustawiliśmy nazwę, wchodzimy w plik, który wcześniej nazywał się pak1.pk3...
usuwamy z niego folder:maps!
wchodzimy w folder ui i wrzucamy tu nasz plik main.menu...
po wrzuceniu usuwamy pozostałe pliki w tym folderze, czyli credits_additional.menu oraz ingame_vote_players.menu.

Teraz mamy już w naszym pliku .pk3 tylko nasz plik -> main.menu!
A więc gotowe :)

następnie wrzucamy plik do etamin na naszym komputerze i mamy nasze menu, po włączeniu ET!

jeżeli chcesz ten plik wrzucic na server, wrzucaj do foldera z modem, np:
etpub, etpro, jaymod, nq, itp...
tutaj możecie ściągnąc mój plik, to uławi wam edytowanie... :)

KLIK!

dzięki za uwagę... mam nadzieję że wszystko zostało wyjaśnione jasno i klarownie :P

w razie pytań proszę pisać na maila:

kynvall@gmail.com

pozdrawiam,
Kynval!
21
27
6
# 1 nugganek
2011-10-04 19:38:00 | Komentarzy: 1
Probowalem i dziala dzieki.
# 2 cssoulburn
2011-10-06 16:47:58 | Komentarzy: 2
GIT MADZĄGNESS
# 3 dominika
2011-10-16 13:26:32 | Komentarzy: 2
Widziałem gdzieś ten poradnik na jakiejś stronie o et :D jak go znajdę to dam znać.
# 4 Kynval
2011-10-20 12:03:31 | Komentarzy: 4
napewno nie TEN, bo ten pisalem ja... a mogłaś widzieć na jakimś forum, bo już raz go pisałem... :)
# 5 Roslin
2014-07-16 21:30:59 | Komentarzy: 1
"guziki" :D hah