In deze tutorial ga ik de basis van het scripten uitleggen, er is al een gelijkaardige tutorial maar ik vind dat die niet genoeg uitlegd, die tutorial kan je
Hier vinden.
we zullen beginnen bij het maken van een basis script. (zie: "Hoe maak ik een script? Wat is het?")
dit script is gewoon gekopiëerd van
Deze tutorial, daar vind je ook meer uitleg.
(voor CoD2 gebruik je het script van
Deze Tutorial, voor CoD4 het script van
Deze Tutorial.
main() // (zie onderaan: "Informatie over main thread, een nieuwe GSC maken","Hoe notities in mijn script maken?")
{
maps\mp\_load::main();
game["allies"] = "american";
game["axis"] = "german";
game["american_soldiertype"] = "airborne";
game["american_soldiervariation"] = "normal";
game["german_soldiertype"] = "fallschirmjagergrey";
game["german_soldiervariation"] = "normal";
game["attackers"] = "allies";
game["defenders"] = "axis";
game["layoutimage"] = "Naam van je loadscreen"; // (zie onderaan: "Loadscreen?")
}
om een nieuwe thread aan te maken zetten onder de main thread, een willekeurige naam (die meestal iets te maken heeft met hetgene dat het script moet doen), met 2 haakjes achter.
dus onder het gesloten haakje van de main thread -> } <- (staat in het rood)
voorbeeld:
main()
{
je main script hier (zie boven)
}
nieuwe_thread()
de thread moet natuurlijk nog "geopend" worden, dit doe je door middel van een open haakje -> { <- (in het groen, moest je er toch naast kijken)
nieuwe_thread()
{
voor elk haakje dat open gaat, moet er ook een sluiten, dus om het een echte thread te maken, moeten we dit open haakje ook sluiten (open haakje in groen, gesloten haakje in het rood)
nieuwe_thread()
{
script dingetjes hier.
}
natuurlijk is dit nog geen volledige thread, tussen de haakjes gaan we een object laten bewegen, als een speler een trigger aanraakt.
eerst moeten we een variabel
(zie onderaan: "Wat is een variabel?") geven aan je entity
(zie onderaan: "Wat is een entity, Hoe maak ik het?")
dit doen we zo: (variabel = groen, jou entity = rood)
nieuwe_thread()
{
blokje_trigger = getent("mijn_blokje_trigger","targetname");
}
getent betekend "Get entity"
"mijn_blokje_trigger" is de "targetname" van je entity(de trigger die eraan vast zit), nu gaat je script zoeken naar de entity met die targetname.
natuurlijk moeten we niet de trigger bewegen, maar we moeten je blokje (script_brushmodel) bewegen.
daar moeten we ook een variabel van maken, dit doe je zo:
nieuwe_thread()
{
blokje_trigger = getent("mijn_blokje","targetname");
blokje = getent(blokje_trigger.target,"targetname");
}
hier zeggen we dat de targetname waarmee de trigger geconnect is
(zie onderaan: "Wat is Connecten?") het variabel "blokje" krijgt.
nu moeten we er een "while loop" van maken
(zie onderaan: "Wat is een loop?"), zodat de thread meerdere keren uitgevoerd kan worden.
de loop = rood
nieuwe_thread()
{
blokje_trigger = getent("mijn_blokje","targetname");
blokje = getent(blokje_trigger.target,"targetname");
while(1)
{
}
}
opnieuw moeten er een open en gesloten haakje zijn bij de loop. (hierboven in het groen)
we gaan nu het script vertellen om te wachten tot er een speler de trigger activeert (in het rood)
nieuwe_thread()
{
blokje_trigger = getent("mijn_blokje","targetname");
blokje = getent(blokje_trigger.target,"targetname");
while(1)
{
blokje_trigger waittill("trigger",player);
}
}
vervolgens laten we ons blokje bewegen (in het groen)
nieuwe_thread()
{
blokje_trigger = getent("mijn_blokje","targetname");
blokje = getent(blokje_trigger.target,"targetname");
while(1)
{
blokje_trigger waittill("trigger",player);
blokje moveZ(100,5);
wait 6;
blokje moveZ(-100,5);
wait 5;
}
}
het blokje zal 100 units, in 5 seconden, over de Z as bewegen
(zie onderaan: "Units?")
vervolgens wacht het 5 seconden, als het boven is wacht het script nog 1 extra second, en h et blokje komt weer naar beneden. op het allerlaatste wacht het script weer 5 seconden zodat het blokje de tijd heeft om eerst terug neer te komen, voor het terug wordt geactiveert.
(in de toekomst zal ik een uitgebreide tutorial maken over het bewegen, roteren van dingen)
als allerlaatste MOETEN we de thread nog aanroepen in de main thread.
onder " maps\mp\_load::main(); " zetten we "thread nieuwe_thread();"
voorbeeld:
main()
{
maps\mp\_load::main();
thread nieuwe_thread();
game["allies"] = "american";
game["axis"] = "german";
game["american_soldiertype"] = "airborne";
game["american_soldiervariation"] = "normal";
game["german_soldiertype"] = "fallschirmjagergrey";
game["german_soldiervariation"] = "normal";
game["attackers"] = "allies";
game["defenders"] = "axis";
game["layoutimage"] = "Naam van je loadscreen";
}
je hebt nu een simpel script gemaakt.
/********************************************************\
\********************************************************/
/********************************************************\
\********************************************************/
Hoe maak ik een script? Wat is het?
Een "Script" in Call of Duty heeft de extentie
.gsc, dit is gewoon een .txt bestand (RechtermuisKnop -> nieuw -> Tekstdocument) waarbij je .txt extentie, wijzigt naar .gsc (orgineel: mapnaam.txt ---> script: mapnaam.gsc)
je script heeft altijd de naam van je map, dus als je map "mp_fight" noemt, zul je je .gsc ook "mp_fight" moeten noemen, dit is zodat het spel die .gsc automatisch gaat laden.
Informatie over main thread, een nieuwe GSC maken:
Elke GSC moet beginnen met de "main()" thread, achter een nieuwe thread komt nooit een -> ; <-
zoals je misschien is opgevallen, achter 99% van de regels in je script komt een
; ...er zijn natuurlijk uitzonderingen.
_ Een nieuwe GSC(een appart gsc bestand dat ook werkt) kan je maken door gewoon een nieuw .gsc bestand aan te maken, neem nu "nieuw_script.gsc", dat moet je aanroepen in je main script.
maps\mp\_load::main();
thread nieuwe_thread();
thread maps\mp\nieuw_script::main();
Je nieuwe script moet natuurlijk ook beginnen met de "main" thread, maar hier moet je de basis gsc niet meer in zetten
Basis GSC:
maps\mp\_load::main();
thread nieuwe_thread();
thread maps\mp\nieuw_script::main();
game["allies"] = "american";
game["axis"] = "german";
game["american_soldiertype"] = "airborne";
game["american_soldiervariation"] = "normal";
game["german_soldiertype"] = "fallschirmjagergrey";
game["german_soldiervariation"] = "normal";
game["attackers"] = "allies";
game["defenders"] = "axis";
game["layoutimage"] = "Naam van je loadscreen";
Hoe notities in mijn script maken?
het is je misschien al opgevallen, in een script kunnen soms 2 streepjes staan -> // <-
Call of Duty zal alles negeren wat achter 2 streepjes staat // (op dezelfde regel)
voorbeeld:
nieuwe_thread()
{
blokje_trigger = getent("mijn_blokje","targetname"); // dit is mijn trigger
blokje = getent(blokje_trigger.target,"targetname"); // dit is mijn script_brushmodel
while(1)
{
blokje_trigger waittill("trigger",player);
blokje moveZ(100,5);
wait 6;
blokje moveZ(-100,5);
wait 5;
}
}
het script zal "dit is mijn trigger" en "dit is mijn script_brushmodel" volledig negeren, zonder deze streepjes zal het script een error geven.
als je grote stukken tekst hebt, kan je dit ook oplossen door een streepje en een sterretje te zetten
-> /* tekst hier */ <-
voorbeeld:
nieuwe_thread()
{
blokje_trigger = getent("mijn_blokje","targetname"); // dit is mijn trigger
blokje = getent(blokje_trigger.target,"targetname"); // dit is mijn script_brushmodel
while(1)
{
/* dit is mijn loop
ja echt waar, het is een loop
nog steeds niet overtuigd?
nou het is echt een loop hoor
*/
blokje_trigger waittill("trigger",player);
blokje moveZ(100,5);
wait 6;
blokje moveZ(-100,5);
wait 5;
}
}
Loadscreen?
dit is de afbeelding die je tezien krijgt bij het laden van je map, een tutorial vindt je
Hier
Wat is een variabel?
een variabel is iets dat kan variëren, het kan alles zijn. (variabel in het rood)
voorbeeld:
mijn_huisje = getent("huis","targetname");
"mijn_huisje" kan alles zijn, ik kan het ook "mijn_flat","jou_appartement" of "rattennest" noemen.
Wat is een entity, Hoe maak ik het?
een entity is iets in je map (dat je maakt in radiant) dat je can verbinden met een script, bijvoorbeeld een blokje dat je kan laten bewegen.
om een entity te maken, maak je eerst een brush (een blokje, of meerdere blokjes), je selecteerd ze: RechtermuisKnop(op lijnenscherm) -> script -> brushmodel.
als je dit met meerdere brushes geselecteerd doet, zullen ze allemaal tot dezelfde brushmodel behoren.
nu maak je een trigger die je met de brushmodel kan verbinden: (dit moet niet, maar dit is om de brushmodel iets te laten doen als de speler bijvoorbeeld ergens in loopt)
maak een normale brush, geef het de trigger texture, selecteer de trigger, RechtermuisKnop(op lijnenscherm) -> trigger -> multiple (uitleg over verschillende trigger vindt je helemaal onderaan deze tutorial)
selecteer nu je trigger, daarna je brushmodel, druk nu op Ctrl+k
nu zou er een rode lijn van trigger, naar brushmodel moeten lopen.
selecteer nu alleen je trigger, druk op N, "key: targetname","value: mijn_blokje" druk nu op enter, en druk weer op N zodat het entity schermpje verdwijnt.
dit is een voorbeeld van een entity
Wat is Connecten?
connecten is als je 2 entities met elkaar verbind, bijvoorbeeld een trigger_multiple verbinden met een script_brushmodel door middel van Ctrl+k
de trigger is dan geconnect met de brushmodel
Wat is een loop?
dit is een loop (loop op z'n engels, uitgesproken "loep")
while(1)
{
blokje_trigger waittill("trigger",player);
blokje moveZ(100,5);
wait 6;
blokje moveZ(-100,5);
wait 5;
}
als het script aan het einde is gekomen (wait 5;) zal het terug opnieuw beginnen, en in dit geval terug wachten tot de speler de trigger activeert.
Units?
1 unit is 1 blokje op grid 1
als je een blokje maakt, staan er afmetingen bij (in het rood, naast de blok), dit is de hoeveel units het hoog, breed, lang is.
uitleg over triggers (er zijn mogelijk andere triggers in CoD2/ CoD4)
Trigger_damage: de trigger zal geactiveerd worden als de speler er schade op toebrengt (bv erop schiet).
Trigger_friendlychain: ik heb geen idee. waarschijnlijk gebruikt in SP
Trigger_hurt: brengt schade toe aan de speler als hij deze aanraakt.
Trigger_lookat: de trigger zal geactiveerd worden als de speler naar de trigger kijkt.
Trigger_mount: ik heb geen idee
Trigger_once: de trigger zal maar 1 keer geactiveerd kunnen worden
Trigger_use: de speler zal op [USE] (F ) moeten drukken om het te activeren
Deze tutorial is gemaakt door HuRRaCaNe, enkel en alleen voor Modbase.be
Met opmerkingen of vragen over deze tutorial kan je steeds bij mij terrecht in een PM.