Deze handleiding gaat over het coderen in Fiicterra. Introduceert Miniscript, basiscoderingsconcepten, triggers en enkele voorbeelden van veelvoorkomende dingen die u misschien wilt doen.
Ermee beginnen
Laten we beginnen met het toevoegen van een codebestand aan je mod. Om wat code aan je mod toe te voegen, klik je op het codepaneel in het hoofdmenu van je mod en klik je vervolgens op nieuw bestand in het linkerdeelvenster. Geef uw codebestand een naam en klik op opslaan.
De code-editor heeft verschillende secties
- Rechtsboven – Naam van je mod
- Linkerdeelvenster - Lijst met codebestanden van deze mod
- Boven – Naam van geselecteerd codebestand
- Midden - Uw geselecteerde codebestand, met regelnummers ter referentie
- Bottom - Compilatiestatus - vertelt u of uw code goed compileert ("Succesvol gecompileerd"), of vertelt u het probleem dat uw code heeft (uitzonderingen tijdens het compileren)
Het middelste gedeelte met uw code is een teksteditor met syntaxisaccentuering. De tekst die je hier typt, wordt gecompileerd en bij je mod gevoegd. Door een wereld te maken of een oude wereld met je mod te laden, wordt deze code uitgevoerd. U kunt functies die u maakt aan een gebeurtenis binden, en die functies worden uitgevoerd wanneer de gebeurtenis wordt geactiveerd. De code van je mod staat los van de code van andere mods en de game (sandboxed).
Als er een runtime-fout in uw code zit, zou dit geen invloed moeten hebben op de normale werking van het spel.
Miniscript
De codeertaal die Ficterra gebruikt voor mods is Miniscript. "MiniScript is modern, elegant, gemakkelijk te leren" volgens de website. Je kunt het hier bekijken: minischrift.
De website heeft een heleboel documentatie en referenties om de ins en outs van de taal te helpen begrijpen.
Deze gids behandelt enkele basisideeën voor programmeren, coderen in miniscript en werken met de Ficterra API. U vindt de samenvatting van één pagina van de taal hier: Samenvatting.
Om gegevens bij te houden, kunt u variabelen toewijzen:
x = 5 naam = "Mijn naam"
Miniscript wordt dynamisch getypt, dus u hoeft het type niet te declareren. String/woorden zijn omgeven door dubbele aanhalingstekens.
Functies oproepen die dingen doen
wacht(5) naam.len log(32,2)
U hebt geen haakjes nodig als uw functie geen waarden aanneemt. Als de functie een enkele waarde gebruikt, zoals wait (die het opgegeven aantal seconden wacht), plaatst u deze tussen haakjes. Als u meerdere waarden heeft, zoals een logboek, plaatst u tussen haakjes en gebruikt u komma's (,) tussen waarden.
Om uw eigen functies te maken, wijst u een variabele toe en gebruikt u de functiesleutelwoorden:
myFunc = functie (a, b) //stuff-functie gaat hier de functie beëindigen
Gebruik vervolgens myFunc(x,y) om de functie uit te voeren. U kunt @myFunc gebruiken om naar de functie zelf te verwijzen; dit wordt gebruikt in gebeurtenistriggers
Als je dingen wilt doen, maar alleen onder bepaalde voorwaarden, gebruik dan if-statements.
if x < 4 dan naam = "Klein getal" else if x < 20 dan naam = "Gemiddeld getal" else naam = "Groot getal" end if
Fiterra-API
Met de Ficterra API kunt u communiceren met Ficterra vanuit uw codebestanden. Voor deze handleiding gaan we alleen enkele veelvoorkomende opdrachten bespreken.
- aankondiging (tekst) - Toont tekst op uw scherm
- runCommand (command) - Je kunt elke opdracht uitvoeren die je in de in-game prompt kunt typen. Dit duurt in een string
- getItemId(itemName) – Retourneert de unieke id voor een item op basis van de naam. Veel van de functies in de Ficterra API gebruiken id's voor efficiëntie, dus u zult deze willen converteren naar een id. De id's zijn NIET hetzelfde tussen werelden met verschillende mods. Daarom moet je id's nooit zomaar gebruiken als onbewerkte getallen in de code van id's die je in je spel hebt waargenomen.
Er zijn ook vergelijkbare functies voor speler, onderzoek, speurtochten en kubussen
Hier zijn een paar functies die direct van invloed zijn op spelers:
- getLocalPlayer() – geeft een spelerobject terug voor je speler
- player.giveItem(itemId, bedrag) – geeft een item aan een speler van het gespecificeerde bedrag
- player.respawn() – laat de speler respawnen naar het dichtstbijzijnde respawn-punt. Je kunt dit gebruiken om de voortgang van de speler te herstarten of om ze 'geforceerd te doden'. Met spawn-locaties die in de wereld zijn geplaatst, kun je bepalen waar ze respawnen.
- player.setCurrentStat(stat, value) / player.setMaxStat(stat,value) – hiermee kun je de statistieken van een speler wijzigen. Je kunt hun bewegingssnelheid verhogen, ze gezondheid geven, ze meer laten dragen, enz.
- takeDamage(target, damage, damageType) - brengt schade van type schade toe aan een doelwit. Het doel is ofwel een playerId of een objectId
- createPlaceable(itemId, position) – maak een nieuw plaatsbaar object van itemId op de positie
Evenementen
We willen vaak reageren op spelers als ze een bepaalde actie ondernemen. Nadat ze een item hebben gekregen, een bioom binnengaan, een zoektocht voltooien, een regio binnengaan, enz. We doen dit in code met evenementen. Met de bind-functie (en bindToItem) kun je je eigen functies aanroepen nadat een van deze gebeurtenissen heeft plaatsgevonden.
bind(event, func) – noem je functie 'func' nadat de gebeurtenis heeft plaatsgevonden. De lijst met evenementen staat in de Ficterra API-gids, maar enkele veelvoorkomende zijn Event.OnGainedItem, Event.OnCompletedQuest, Event.OnKilledMonster en Event.OnBiomeEntered
Een voorbeeldgesprek kan er als volgt uitzien:
bind (Event.OnBiomeEntered, @myFunc)
Dit zorgt ervoor dat myFunc wordt aangeroepen wanneer je speler een bioom binnengaat. Met het @-symbool kunt u naar de functie verwijzen zonder deze aan te roepen. Gebeurtenisfuncties hebben een enkele waarde 'args' die gegevens bevat die relevant zijn voor de gebeurtenis. In dit geval is args.id de id van de bioom die wordt ingevoerd, en args .name is de naam van de bioom die wordt ingevoerd.
bindToItem(itemEvent, func, itemId) – roept uw functie 'func' aan nadat een itemgebeurtenis plaatsvindt voor een plaatsbaar item met itemId. Hiermee kunt u zich door hun item binden aan specifieke acties die op plaatsbare objecten worden ondernomen. ItemEvent.OnTriggerEntered en ItemEvent.OnInteract zijn enkele voorbeelden.
Voorbeelden
Voorbeeld 1: Deze telt van 1 tot 10 en geeft de resultaten op het scherm weer. Het wacht 1 seconde voordat het volgende nummer wordt weergegeven. Dit voorbeeld toont voor lussen, bereiken, aankondigen en wachten. Aangezien dit niet in een functie zit, wordt het gewoon uitgevoerd wanneer het spel opstart
Voorbeeld 2: Dit laat zien hoe gebeurtenissen werken. We creëren onze functie hasDirt om af te drukken, ongeacht of de speler vuil heeft of niet. We krijgen de inventaris van de lokale speler en gebruiken een if-statement met hasItem om te bepalen welk statement moet worden aangekondigd. Aangezien dit een functie is, wordt deze niet uitgevoerd tenzij deze wordt aangeroepen. De onderste twee regels gebruiken 'bind' om de Events OnGainedItem en OnRemovedItem hasDirt aan te roepen wanneer ze worden geactiveerd. We gebruiken @hasDirt om naar de functie zelf te verwijzen in plaats van deze aan te roepen.
Voorbeeld 3: Hier veranderen we enkele statistieken van de speler. We stellen eerst de maximale stat in en daarna de huidige stat. Dit is vooral belangrijk voor statistieken zoals gezondheid, waar als je gewoon de maximale stat verhoogt, ze de rest van de weg moeten genezen. Dit voorbeeld stelt de snelheid van de speler in op 2 en hun carry-limiet op 1000.
Voorbeeld 4: Dit voorbeeld geeft de speler een willekeurige beloning wanneer hij een bioom betreedt. We gebruiken de OnBiomeEntered-gebeurtenis om onze functie te activeren. De functie rnd() genereert een willekeurig getal tussen 0 en 1, dat we gebruiken om de beloning te bepalen. Vervolgens gebruiken we giveItem om de speler de beloning te geven die we willen.
Voorbeeld 5: We veranderen het veelvoud van bewegingssnelheid op Grass naar 4. Als een speler erop loopt, zal hij 4 keer zo snel bewegen. Dit is hoe padblokjes in het spel werken.
Voorbeeld 6: Hier stellen we het zo in dat wanneer een speler een kist opent, deze muziek afspeelt. Met de functie bindToItem kunnen we onze functie binden aan het item Chest en wanneer de OnInteract-gebeurtenis plaatsvindt. In onze functie kiezen we willekeurig een muziekbestand en spelen het af. Dit overschrijft de muziek die momenteel wordt afgespeeld.
Voorbeeld 7: Het laatste voorbeeld laat zien hoe je de status kunt behouden tijdens het spelen. We geven de speler een Brick-kubus wanneer ze voor de eerste keer een bioom betreden. In tegenstelling tot voorbeeld 4 houden we de biomen bij die de speler heeft ingevoerd en geven we geen beloning als ze daar eerder zijn geweest. We slaan deze informatie ook op in PlayerStorage. Op deze manier, als ze het spel een andere keer laden, heeft het nog steeds de lijst met biomen die ze hebben bezocht van hun vorige speelsessie. Dit voorbeeld toont arrays, opslaan, laden en openen van PlayerStorage.
Dat is alles wat we hiervoor vandaag delen ficterra gids. Deze handleiding is oorspronkelijk gemaakt en geschreven door noordelijke amusement. Als we deze handleiding niet kunnen bijwerken, kunt u de laatste update vinden door deze te volgen link.