Er bestaat al een tut voor in CoD2, maar in CoD1(/UO) gaat het toch even wat anders.
Hallo Allemaal. In deze tutorial kun je leren hoe je een eigen RconTool/RconMenu aan kan maken. Ik ga hiervoor eerst uitleggen welke files je allemaal nodig hebt. Dan ga ik uitleggen wat wat is en hoe alles werkt. Daarna ga ik uitleggen hoe je je Rcontool/Rconmenu kan openen en kan switchen tussen verschillende menu's. Ook ga ik uitleggen wat voor verschillende opties je hebt qua cvars of qua text. Je zou deze tutorial kunnen verdelen in 2 delen, namelijk Beginner en Gevorderd, maar dat doe ik even niet. Omdat ik diet niet doe, wordt dit waarschijnlijk een lange tutorial, dus neem de tijd.
Voor de mensen die wat toe te voegen hebben, lees eerst mijn comments op het eind!!
Maak van tevoren even een aparte folder op je Deskop, die ga je gebruiken namelijk. Geef de folder zelf een naam, niet belangrijk wat, en maak in je folder de volgende mapconstructie:
[Jouw_Folder]->[ui_mp]->[scriptmenus]
De files die je gaat gebruiken staan in (CoD1) pak0.pk3->[ui_mp]. Deze moet je openen met Pakscape (Download->
hier<-) OF met WINRAR. Dan open je de folder ui_mp, en je haalt deze dingen eruit:
ingame.txt (hier ga je alle menu's in precachen)
menudef.txt (niet nodig, wel handig)
main.menu (om je rconmenu in te openen)
Deze 3 files zet je in de map [ui_mp] in je folder.
Dan ga je in pak0.pk3 naar [ui_mp]->[scriptmenus] en je haalt hier de volgende dingen uit:
Alle team_(..).menu files:
team_americangerman.menu
team_britishgerman.menu
team_german.menu
team_russiangerman.menu
Alle weapon_(..).menu files:
weapon_american.menu
weapon_americangerman.menu
weapon_british.menu
weapon_britishgerman.menu
weapon_german.menu
weapon_russian.menu
weapon_russiangerman.menu
Al deze files ga je gebruiken om een in-game opening te maken voor je rcontool.
Al deze files zet je in de map [ui_mp]->[scriptmenus] in je folder.
Dan ga je nu echt beginnen aan het creëren van je Rconmenu. Maar daarvoor moet ik eerst uitleggen wat wat is voor diegene die dat nog niet zo goed weten.
Hier is een klein voorbeeld van wat je kan vinden in een rcontool, en dan ga ik uitleggen wat alles is:
itemDef
{
name fogdec
group ingamebox
visible 1
rect 0 -20 80 20 //10 5 110 20
origin ORIGIN_FOG
type ITEM_TYPE_BUTTON
forecolor 1 1 1 1
textfont UI_FONT_NORMAL
textscale .20
textalignx 5
textaligny 12
text "^4||^7Set FoG^4||^1:"
decoration
}
De Uitleg:
name: Is handig als je bijv. een mouse_over wil doen, hier kom ik later nog op terug.
group: Deze optie word gebruikt als je een vakje om je text heen wilt hebben. De value zal dan altijd
{ingamebox} zijn.
visible: Als je een beetje Engels kan, dan is dit duidelijk. 1 is laten zijn, 0 is niet laten zien. Ik weet niet of dat als je bijv .75 doet, het dan vaag wordt of niet. Dat moet je zelf uitvinden, daar gaat scripten toch om.
rect: De plek waar het zich moet bevinden. Bij CoD2 heb je deze minder hard nodig, omdat rcontools daar fullscreen zijn, hier niet. Ik ga dit later nog uitgebreid vertellen.
origin: Iedere tab van het rconmenu heeft een andere origin nodig. Deze wordt gedefineerd aan het begin, kom ik later nog op terug.
type: Deze defineerd het type, Button, Text, Box. Het kan volgens mij altijd 1 ding zijn, omdat de laatste van dit rijtje aangeeft wat het nou eigenlijk is.
forecolor: Dit bepaald de kleur. Natuurlijk als je text hebt, kan je dat met de colorstrings doen. Dit moet je zo zien:
1 1 1 1, dus 1e is rood, 2e is groen, 3e is blauw en laatste is hoe licht het allemaal is. Deze kunnen natuurlijk gemixt worden.
textfont: Dit bepaald de text type. UI_FONT_NORMAL zit standaard in CoD, gebruik hem dan ook.
textscale: De grootte van de text. Experimenteer! (ongeveer .19 is groot genoeg).
textalignx: Hoever de text van het beginpunt afligt. Vooral belangrijk bij textbox. Horizontale (x) as.
textaligny: Zelfde, maar verticale (y) as.
text: De text natuurlijk. "{Uw Text}"
decoration: Dit Bepaald of het gewoon text is (nu) of als hier een actie kan gebeuren. Dat is het volgende voorbeeld:
itemDef
{
name DM
group ingamebox
visible 1
rect 120 45 27 10
origin ORIGIN_MAP
type ITEM_TYPE_BUTTON
style UI_BUTTON_STYLE
textstyle UI_BUTTON_TEXT_STYLE
forecolor UI_BUTTON_TEXT_COLOR
backcolor 0 0 0 .75
border UI_BUTTON_BORDER
bordercolor 1 1 1 1
textfont UI_FONT_NORMAL
textscale .15
textalignx 3
textaligny 7
text "^4|^7DM^4|"
action
{
play "mouse_click";
exec "rcon g_gametype dm";
}
onFocus
{
play "mouse_over";
}
}
Hier heb ik meteen even 2 dingen erbij gehaald, namelijk een TextBox, en een Action. Uitleg:
backcolor: De achtergrondkleur. Standaard is 0 0 0 .75 (bijna helemaal zwart)
border: De omlijning. Hetzelfde als textfont, deze zit standaard inbegrepen, dus gebruik hem.
bordercolor: De kleur van de omlijning. 1 1 1 1 = wit, maar kan altijd anders.
Hier komt de action om de hoek kijken, dit wordt allemaal even iets moelijker maar naar 3x heb je het al door.
action: geeft aan dat er een actie aankomt.
{: opening van de actie
***** Dit gedeelte is volkomen aan de maker. dit kan gebruikt worden om cvars in te stellen, of om
***** de console iets te laten zeggen. Wat je normaal als command intypt bij de console, kan hier als
***** soort van snelkoppeling gemaakt worden. Bijvoorbeeld:
{
play "mouse_click"; <--!!! let wel op, dit is kan je zeggen standaard, dit hoort erin. Dit is het klikgeluid.
exec "rcon say ^4||^7Map Restart By L4zY^4||"; <-- een command.
exec "wait 50"; <-- waits zijn bijna onmisbaar.
exec "rcon map_restart"; <-- nog een command
}
}: de sluiting van de actie
Note1: Let Op, jullie zien hier iedere regel eindigen op
;. Scripters weten wat dit is, maar hier is de uitleg. Dit zorgt ervoor dat de volgende regel ook wordt gelezen. Dit is ook wel eens te zien in normale taal.
Note2: Laat de waits niet te lang worden, maar ook niet al te kort. Te kort = misschien leest hij eroverheen. Te lang = dat diegene die het uitvoert de hele tijd dat die wait bezig is, niks kan doen. Niet lopen, schieten, springen, nog een command uitvoeren. Alleen maar kijken en bewegen met muis.
Dan hebben we ook nog de onFocus actie. Dit zorgt ervoor dat de text geelachtig oplicht als je je muis boven houdt. Dit zou ik persoonlijk standaard toevoegen.
Nu kan je beginnen aan een {rcontoolfile}.menu. De eerste is natuurlijk de main, waaruit je kan kiezen tussen map.menu of kick.menu.(DIT IS EEN NORMAAL .txt BESTAND MAAR ET ALS EXTENSIE .menu!!)
Dan heb ik hier even wat standaard dingetjes die je in je rconmenu MOET zetten:
#include "ui_mp/menudef.h"
#define ORIGIN_RCON 32 256
{
menuDef
{
name "rcon"
visible 1
fullscreen 0
rect 0 0 750 700 //0 0 750 700
focuscolor UI_FOCUS_COLOR
disablecolor 0 0 0 0
style WINDOW_STYLE_EMPTY
border 0
onOpen
{
setCvar cl_bypassMouseInput "0"
}
onClose
{
setCvar cl_bypassMouseInput "0"
}
onEsc
{
close rcon;
}
itemDef
{
name "window_background"
visible 1
rect 0 -25 224 220
origin ORIGIN_RCON
forecolor 1 1 1 1
backcolor 0 0 0 .75
style WINDOW_STYLE_FILLED
border 1
bordercolor 1 1 1 1
decoration
}
}
}
ALTIJD DE 1E REGEL!! Namelijk #include "ui_mp/menudef.h"
ALTIJD DE 2E REGEL!! Namelijk de origin vaststellen. Ieder nieuw element geeft aan welke origin het heeft. Als 1 daarvan een andere origin heeft vastgesteld, kan het menu niet geopend worden.
Zorg dat als je net begint, je zeker dit erin hebt staan:
onEsc
{
close rcon;
}
uitleg:
onOpen en de rest zorgt ervoor dat je met je muis kan bewegen als je hem opent
onClose en de rest zorgt ervoor dat je stopt met je muis als je hem sluit.
Later kan je uiteraard nog een button maken waarin je terug gaat naar de vorige, maar in het begin kan je zo met esc terug. Vergeet je dit, zit je vast in je rconmenu...
Dan nu meer over de plaats.
In de eerste kolom, zie je 0 0 750 700. Dit is gewoon de grootte van je scherm, oftewel, hier kan in gemaakt worden. Laat gewoon zo.
In de 2e kolom zie je 0 -25 224 220. Dit is de grootte van je menu.
Uitleg:
0 == hoever van de linker kant
0 == de x as
-25 == hoever van de middenlijn(deze loopt in het midden van scherm, oftewel -25 is 25 units onder het midden).
-25 == de y as
224 == hoever hij doorloopt naar rechts op de x as
224 == de extensie op de x as
220 == hoever hij doorloopt naar beneden op de y as
220 == de extensie op de y as.
Dan ga ik nu uitleggen hoe je jumpt tussen verschillende tabs.
Je hebt nu dus:
[Jouw_Folder]->[ui_mp]->[scriptmenus]
[ui_mp]-> heeft 3 text bestanden.
[scriptmenus]-> heeft 11 textbestanden.
Dan maak je nu een nieuw textbestand aan met de naam
rcon.menu. Uiteraard mag de naam anders zijn, maar verander hem dan overal. Dan voeg je in dat bestand de volgende regels toe:
(DIT IS EEN VOORBEELD, DE REST MOET JE ZELF DOEN!!!!!)
#include "ui_mp/menudef.h"
#define ORIGIN_RCON 32 256
{
menuDef
{
name "rcon"
visible 1
fullscreen 0
rect 0 0 750 700 //0 0 750 700
focuscolor UI_FOCUS_COLOR
disablecolor 0 0 0 0
style WINDOW_STYLE_EMPTY
border 0
onOpen
{
setCvar cl_bypassMouseInput "0"
}
onClose
{
setCvar cl_bypassMouseInput "0"
}
onEsc
{
close rcon;
}
itemDef
{
name "window_background"
visible 1
rect 0 -25 224 220
origin ORIGIN_RCON
forecolor 1 1 1 1
backcolor 0 0 0 .75
style WINDOW_STYLE_FILLED
border 1
bordercolor 1 1 1 1
decoration
}
itemDef
{
name client
group ingamebox
visible 1
rect 5 -10 80 20 //10 5 110 20
origin ORIGIN_RCON
type ITEM_TYPE_BUTTON
forecolor 1 1 1 1
textfont UI_FONT_NORMAL
textscale .20
textalignx 5
textaligny 12
text "^4||^7Client Control^4||"
action
{
play "mouse_click";
close rcon;
open client;
}
onFocus
{
play "mouse_over";
}
}
}
}
Dan heb je nu een begin van je main rconmenu. Het rode en blauwe hier is dus wat je kan veranderen, en uiteraard de text ook.
Dan maak je nu een bestand genaamt
client.menu
Daar voeg je aantoe:
#include "ui_mp/menudef.h"
#define ORIGIN_CLIENT 32 256
{
menuDef
{
name "client"
visible 1
fullscreen 0
rect 0 0 750 700 //0 0 750 700
focuscolor UI_FOCUS_COLOR
disablecolor 0 0 0 0
style WINDOW_STYLE_EMPTY
border 0
onOpen
{
setCvar cl_bypassMouseInput "0"
close rcon;
}
onClose
{
setCvar cl_bypassMouseInput "0"
}
onEsc
{
close client;
open rcon;
}
itemDef
{
name "window_background"
visible 1
rect 0 -25 224 220
origin ORIGIN_CLIENT
forecolor 1 1 1 1
backcolor 0 0 0 .75
style WINDOW_STYLE_FILLED
border 1
bordercolor 1 1 1 1
decoration
}
itemDef
{
name c0
visible 1
rect 5 15 17 15
origin ORIGIN_CLIENT
type ITEM_TYPE_BUTTON
style UI_BUTTON_STYLE
textstyle UI_BUTTON_TEXT_STYLE
forecolor UI_BUTTON_TEXT_COLOR
backcolor 0 0 0 .75
border UI_BUTTON_BORDER
bordercolor 1 1 1 1
textfont UI_FONT_NORMAL
textscale .20
textalignx 3
textaligny 10
text "^700"
action
{
play "mouse_click";
exec "rcon clientkick 0";
exec "wait 10";
exec "rcon say ^4||^7Kicked Player^4||^1: ^70 ";
}
mouseEnter { setitemcolor c0 backcolor 0 0 1 .65;play "mouse_over"; }
mouseExit { setitemcolor c0 backcolor 0 0 0 .75 }
}
}
}
Uitleg:
Met dit command kick je een speler, en zeg je dat.
Namen:
MouseEnter. Hier zie je dat de namen van pas komen. Als de muis in dit vakje komt verandert de kleur van dit vakje
MouseExit. als de muis weer uit het vakje gaat veranderd het terug.
Nu heb je dus 2 bestanden. Deze zet je in de map [Jouw_Folder]->[ui_mp]->[scriptmenus]
even korte uitleg. Dit zorgt ervoor dat je vanuit rconmenu je clientcontrol kan openen, en dat je daarna speler 0 kan kicken. Maar we kunnen ze alleen nog niet openen.
open: [ui_mp]->{main.menu}
daarin moet je een nieuwe button maken waarmee je de rcontool opent:
itemDef
{
name default
text "^4||^4O^7pen ^4R^7con ^4M^7enu^4||" // Je Eigen Keus
type ITEM_TYPE_BUTTON
style WINDOW_STYLE_EMPTY
textstyle ITEM_TEXTSTYLE_SHADOWED
rect 85 200 285 30 // Je Eigen Keus
textalign 0
textscale .3
textalignx 46
textaligny 18
forecolor 1 1 1 1
backcolor 0 0 0 0
visible 1
textfont UI_FONT_NORMAL
mouseEnter
{
play "mouse_over";
}
action
{
play "mouse_click";
close mods_menu;
close options_multi;
open rcon;
}
}
1.5. Bij het plaatsen van een vraag dient u zo nauwkeurig mogelijk uw vraag/probleem te omschrijven. Geef zoveel mogelijk details zoals screenshots, error logs, compile logs etc. Dit helpt ons om vlugger en beter een antwoord te vinden voor het probleem.
Dan kan je ze nu via je mainmenu openen.
Voor ingame, moet je de 11 bestanden uit [ui_mp]->[scriptmenus] openen en zoeken naar viewmap. Waarom viewmap? dit is de minst gebruikte optie, dus zal deze ook het minst gemist worden.
Als je dat hebt gevonden, verandere je:
itemDef
{
name "button_viewmap"
visible 1
rect 269 0 90 32
origin ORIGIN_MENUTABS
style WINDOW_STYLE_SHADER
background "ui_mp/assets/hud@tab_center_unselected.tga"
type ITEM_TYPE_BUTTON
text "@MPMENU_VIEW_MAP"
textfont UI_FONT_NORMAL
textscale .24
textalignx 45
textaligny 24
textalign ITEM_ALIGN_CENTER
action
{
play "mouse_click";
scriptMenuResponse "viewmap";
close weapon_americangerman;
}
onFocus
{
play "mouse_over";
}
}
in:
itemDef
{
name "button_viewmap"
visible 1
rect 269 0 90 32
origin ORIGIN_MENUTABS
style WINDOW_STYLE_SHADER
background "ui_mp/assets/hud@tab_center_unselected.tga"
type ITEM_TYPE_BUTTON
text "@^4||R^7con^4M^7enu^4||"
textfont UI_FONT_NORMAL
textscale .24
textalignx 45
textaligny 24
textalign ITEM_ALIGN_CENTER
action
{
play "mouse_click";
open rcon;
close weapon_americangerman;
}
onFocus
{
play "mouse_over";
}
}
Dit doe je bij al die files, scriptMenuResponse "viewMap" veranderen in open
rcon. Dan moet je nog 1 laatse dingetje doen.
Dan ga je nu naar [Jouw_Folder]->[ui_mp] en dan open je ingame.txt. Zoals ik in het begin ook al zei, moet je daar alle menus precachen. Dit doe je zo:
Standaard:
// ingame menu defs
//
{
loadMenu { "ui_mp/ingame.menu" }
loadMenu { "ui_mp/ingame_controls.menu" }
loadMenu { "ui_mp/ingame_options.menu" } // loadMenu { "ui_mp/ingame_options.menu" }
loadMenu { "ui_mp/ingame_system.menu" } // loadMenu { "ui_mp/ingame_system.menu" }
loadMenu { "ui_mp/ingame_leave.menu" }
loadMenu { "ui_mp/ingame_callvote.menu" }
loadMenu { "ui_mp/wm_quickmessage.menu" }
}
Jouw versie:
// ingame menu defs
//
{
loadMenu { "ui_mp/ingame.menu" }
loadMenu { "ui_mp/ingame_controls.menu" }
loadMenu { "ui_mp/ingame_options.menu" } // loadMenu { "ui_mp/ingame_options.menu" }
loadMenu { "ui_mp/ingame_system.menu" } // loadMenu { "ui_mp/ingame_system.menu" }
loadMenu { "ui_mp/ingame_leave.menu" }
loadMenu { "ui_mp/ingame_callvote.menu" }
loadMenu { "ui_mp/wm_quickmessage.menu" }
loadMenu { "ui_mp/scriptmenus/rcon.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/client.menu" } //L4zY
}
Dit doe je natuurlijk met iedere tab/menu die je maakt, en dan komt het er zo uit te zien:
// ingame menu defs
//
{
loadMenu { "ui_mp/ingame.menu" }
loadMenu { "ui_mp/ingame_controls.menu" }
loadMenu { "ui_mp/ingame_options.menu" } // loadMenu { "ui_mp/ingame_options.menu" }
loadMenu { "ui_mp/ingame_system.menu" } // loadMenu { "ui_mp/ingame_system.menu" }
loadMenu { "ui_mp/ingame_leave.menu" }
loadMenu { "ui_mp/ingame_callvote.menu" }
loadMenu { "ui_mp/wm_quickmessage.menu" }
loadMenu { "ui_mp/scriptmenus/map.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/rcon.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/codamfriends.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/client.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/fog.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/rconmsg.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/weapon.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/rconpass.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/serversettings.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/gametype.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/codam.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/about.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/quicklinks.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/namemenu.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/ammo.menu" } //L4zY
loadMenu { "ui_mp/scriptmenus/ban.menu" } //L4zY
}
Dit was het suc6 ermee
---------------------------------------------
(tutorial gemaakt door LazY)