Door een scenario te creëren, kan het spel langer duren door uitdagingen, minigames of een geheel nieuwe manier van spelen toe te voegen. Zo kunt u beginnen met het maken van uw eigen:
Introductie
In plaats van op een creatieve manier te spelen waarbij je alles kunt doen, is een scenario meer gestructureerd. Het heeft specifieke doelen, een reeks beperkte hulpmiddelen of onderdelen, en soms andere regels. De tutorial, de kitopbouw en de getimede rondescenario's worden allemaal op deze gestructureerde manier gemaakt. Ze laten zien wat u met dit systeem kunt bereiken.
Een scenario bevat meestal een opgeslagen scène en een Lua-script. Het Lua-script wordt geladen wanneer het scenario start, het spel wordt opgezet en het scenario werkt.
Let op: het scenariovoorbeeld in deze handleiding kunt u vinden in de Workshop door te zoeken naar 'AnExampleScenario'.
De plaats
Om te beginnen met het maken van een scenario, moet je eerst een scène voorbereiden.
Selecteer in het paneel CREATIEF de optie “Nieuwe lege scène”. Kies een kaart, stel de omgeving in als je wilt en druk vervolgens op de knop Afspelen.
Als je wilt dat je scenario met een lege scène begint, ben je nu klaar; je kunt het opslaan zoals het is. Veel scenario's vereisen echter dat bepaalde structuren vanaf het begin aanwezig zijn.
Hier hebben we bijvoorbeeld een vorkheftruck, een groene ton op een palet en een cilindercontrolepunt:
Bovendien is er een rond plaatgedeelte dat een 'gouden munt' symboliseert. Dit zal dienen als sjabloon voor beloningen die we in het scenarioscript zullen maken.
Probeer nu een scène te arrangeren die lijkt op de afgebeelde scène.
Zodra uw scène is voorbereid, gaat u naar het scherm SAVE SCENE. Geef het een naam en beschrijving en voeg ‘scenario’ toe als tag. Klik daarna op de knop Opslaan:
NOTITIE: U moet de opgeslagen tekst taggen met “scenario”, zodat deze kan worden geladen vanuit het BEGIN SCENARIO scherm later.
Scène-ID's
In een scenario moet het Lua-script onderdelen of constructies in de scène identificeren om deze te manipuleren. Hiervoor heeft elk onderdeel en elke constructie een unieke scène-ID.
Om de ID's van objecten in de scène te ontdekken, kunt u de meegeleverde scriptmod "PartInspect" gebruiken. Laad het vanuit het SCRIPT MODS-scherm, te vinden onder het tabblad "ingebouwde voorbeelden".
Wanneer u een onderdeel in de scène target, wordt de ID weergegeven van de constructie waartoe het behoort:
Vergeet niet om de ID-nummers van de vorkheftruck-, ton-, controlepost- en 'gouden muntbeloning'-constructies in uw scène te noteren.
BELANGRIJK: Zorg ervoor dat u de constructie-ID's noteert, niet de onderdeel-ID's!
Het scenarioscript
Ga naar %USERPROFILE%\AppData\LocalLow\SmashHammer Games\GearBlocks\SavedScenes en zoek de map voor uw opgeslagen scène (bijvoorbeeld AnExampleScenario). Maak in deze map een nieuw leeg tekstbestand en geef het een naam scenario.lua:
Bij het laden van een scène uit het BEGIN SCENARIO scherm, wordt het spel automatisch geladen scenario.lua als hij het vindt.
Bewerk de scenario.lua bestand en typ de volgende Lua-code:
-- ID's van constructies in de opgeslagen scène: lokaal checkpointConstructionID = lokaal vatConstructieID = lokale beloningTemplateConstructionID = lokale heftruckConstructionID = lokaal checkpointPosition = Vector3.Zero lokale beloningTemplatePart = nul lokaal isGoalAchieved = false
BELANGRIJK: In plaats van elk , vervang het dan door het overeenkomstige constructie-ID-nummer dat u eerder hebt genoteerd.
Voeg nu de volgende functies toe. Deze functies deactiveren tools en andere functies en stellen de gebruikersinterface in. We zullen deze tijdens de initialisatie aanroepen:
local function uitgeschakeldFeatures() - Stel variabelen in om spelfuncties uit te schakelen. NoBuilderTool.Value = waar NoMaterialTool.Value = waar NoLinkerTool.Value = waar NoPainterTool.Value = waar NoGrabberTool.Value = waar NoSceneTool.Value = waar NoPartSpawnDestroy.Value = waar NoConstructionSaveLoad.Value = waar NoSceneSave.Value = waar einde lokale functie initUI( ) -- Maak een UI-venster. Win = Windows.CreateWindow() Win.SetAlignment( align_RightEdge, 20, 300 ) Win.SetAlignment( align_TopEdge, 80, 200 ) Win.Title = 'FORKHEFTRUCK CHALLENGE' Win.Show( true ) Win.IsCloseable = false -- Voeg een tekstlabel eraan. Label = Win.CreateLabel() Label.SetAlignment( align_HorizEdges, 10, 10 ) Label.SetAlignment( align_VertEdges, 10, 10 ) Label.FontSize = 30 Label.Alignment = textAnc_MiddleCenter Label.Text = "Gebruik de vorkheftruck om het vat erin te plaatsen de doelzone..." einde
Voeg vervolgens het volgende codeblok toe:
lokale functie onRewardConstructionSpawned( construction ) -- Maak het voortgebrachte deel los. ConstructionOps.SetConstructionFrozen( construction.ID, false ) beëindigt de lokale functie spawnRewards( numParts ) - Voeg een handler toe aan de ConstructionSpawned-gebeurtenis. -- Dit wordt door het spel verhoogd als er een constructie wordt uitgezet. ConstructionSpawned.Handler.add( onRewardConstructionSpawned ) - Schakel het spawnen van onderdelen tijdelijk in. NoPartSpawnDestroy.Value = false -- Spawn de beloningsonderdelen van de "gouden munt" door ze uit de sjabloon te dupliceren. als rewardTemplatePart dan voor i = 1, numParts do - Een willekeurige locatie nabij het controlepunt. lokale spawnPosition = checkpointPosition + Vector3.__new( math.random() * 5 - 2.5, math.random() * 2 + 2, math.random() * 5 - 2.5 ) lokale spawnOrientation = Quaternion.Euler( math.random( ) * 360, math.random() * 360, math.random() * 360 ) -- Breng het dubbele deel voort. PopConstructions.DuplicatePart( rewardTemplatePart.ID, spawnPosition, spawnOrientation ) end end - Schakel het spawnen van onderdelen opnieuw uit. NoPartSpawnDestroy.Value = true - Ruim op door onze ConstructionSpawned-gebeurtenishandler te verwijderen. ConstructionSpawned.Handler.remove( onRewardConstructionSpawned ) einde
De functie spawnRewards(numParts) genereert verschillende beloningsonderdelen op willekeurige posities door ze uit het sjabloongedeelte te dupliceren. We zullen deze functie gebruiken wanneer de speler het doel bereikt.
Voeg nu het volgende toe aan uw Lua-script:
local function onConstructionEnteredCheckpoint( construction ) -- Controleer of de constructie die het controlepunt is binnengegaan het vat is. -- Als dat zo is, dan is het doel bereikt. zo niet isGoalAchieved en (construction.ID == barrelConstructionID) dan Label.Text = " Goed gedaan, neem wat gouden munten! " spawnRewards( 10 ) isGoalAchieved = true end end local function initScene() -- Begin door alle constructies in de scène niet-targetable te maken. voor constructie in Constructions.Instances doe ConstructionOps.SetConstructionTargetable( construction.ID, false ) end -- Then maak de vorkheftruck richtbaar zodat de speler erin kan stappen en ermee kan rijden. ConstructionOps.SetConstructionTargetable( forkliftConstructionID, true ) local checkpointConstruction = Constructions.GetInstance( checkpointConstructionID ) local checkpointPart = checkpointConstruction.GetPart( 0 ) -- Cache de wereldpositie van het checkpoint-onderdeel voor later use.checkpointPosition = checkpointPart.Position -- Voeg een handler toe aan de OnConstructionEntered-gebeurtenis van het controlepuntgedrag. -- Dit wordt gegenereerd wanneer een constructie het controlepunt binnenkomt. voor gedrag in checkpointPart.Behaviours do if behavior.Name == 'Checkpoint' then behavior. OnConstructionEntered.add( onConstructionEnteredCheckpoint ) break end end - Cache het beloningssjabloongedeelte "gouden munt" voor later gebruik. local rewardTemplateConstruction = Constructions.GetInstance( rewardTemplateConstructionID ) rewardTemplatePart = rewardTemplateConstruction.GetPart( 0 ) -- Verplaats het sjabloongedeelte 1 km onder de grond, zodat de speler het niet ziet! ConstructionOps.FreezeConstructionAtGround( rewardTemplateConstruction.ID, Vector3.__new( 0, -1000, 0 ) ) end
De initScene() functie garandeert dat alleen de vorkheftruck kan worden getarget door de speler, slaat enkele variabelen op in de cache voor later gebruik en stelt een controlepunt in OnConstructieIngevoerd gebeurtenis handler.
Binnen onConstructionEnteredCheckpoint(constructie) gebeurtenishandler, als het vat het controlepunt binnengaat, betekent dit dat het doel is bereikt en gaan we verder met het genereren van de beloningen.
Voeg ter voltooiing dit laatste codeblok in:
----- Game Event handlers ----- -- De GameReady-gebeurtenis wordt door het spel geactiveerd als de scène klaar is met laden (dwz de kaart en eventuele opgeslagen constructies daarin). -- Hier voegen we een handler toe aan deze gebeurtenis, daarin initialiseren we alles voor het scenario. local function onGameReady() DisableFeatures() initUI() initScene() end GameReady.Handler.add( onGameReady ) ----- Invoerfuncties ----- -- Cleanup() wordt aangeroepen door het spel wanneer het script wordt verwijderd . function Cleanup() Windows.DestroyWindow( Win ) -- Zorg ervoor dat u onze GameReady-gebeurtenishandler verwijdert. GameReady.Handler.remove( onGameReady ) einde
De onGameReady() gebeurtenishandler activeert onze initialisatiefuncties wanneer het spel klaar is om te spelen. De code binnen Opruimen() zorgt ervoor dat we op de juiste manier opruimen wanneer de speler het scenario verlaat.
Sla uw script op en u bent klaar om het scenario eens te proberen!
Uw scenario afspelen
Voer nu de in BEGIN SCENARIO scherm en onder het tabblad "Lokaal opgeslagen" zou u uw scenario moeten vinden:
Probeer het te spelen...
En kijk of jij over heftruckvaardigheden beschikt...
Om de beloning te krijgen...
Oké, dat was niet bepaald een moeilijke uitdaging om te spelen, maar hopelijk geeft het je een idee van de mogelijkheden!
Meer informatie
Deze gids beschrijft slechts het oppervlak van wat mogelijk is met scenario's.
Voor meer informatie zijn de ingebouwde scenario's een goede referentie, u vindt ze hier: C:\Program Files (x86)\Steam\steamapps\common\GearBlocks\GearBlocks_Data\StreamingAssets\Scenes.
Als u wilt proberen ze te wijzigen, kopieert u ze naar uw lokale bestand Opgeslagen scènes map eerst!
Tenslotte vindt u hier de volledige documentatie voor de GearBlocks Lua-scripting-API. Dit zal in de loop van de tijd evolueren naarmate ik meer functies en functionaliteit in de API blootleg, dus maak er een bladwijzer van voor toekomstig gebruik!
Dat is alles wat we hiervoor vandaag delen Versnellingsblokken gids. Deze handleiding is oorspronkelijk gemaakt en geschreven door danger726. Als we deze handleiding niet kunnen bijwerken, kunt u de laatste update vinden door deze te volgen link.