Hoe maak ik een taart?

(door Lolario)

In Nowmoo bak je natuurlijk geen taart (al zou je dat wel mogelijk kunnen maken), maar maak je hem. Op deze pagina, die bedoeld is om nieuwe bewoners een inleiding te geven in het programmeren in MOO, zal ik beschrijven hoe dit in zijn werk gaat.
Omdat gewone voorwerpen erg saai zijn en voor het maken van een voorwerp geen echt programmeerwerk vereist is, zullen we ervoor zorgen dat je deze taart naar iemand kunt gooien.

Omdat ik in dit programma iets uit het feature van Large gebruik , zul je eerst dit feature aan je personage moeten toevoegen met @addfeature #2208.


Dan gaan we nu beginnen met het echte werk:

Eerst maak je de taart met het commando @create.
Het commando @create heeft de volgende syntax:
@create parent called "naam"[, alias,..]
Waar parent de naam van het voorwerp is dat je als uitgangspunt neemt (Het is handig om een parent-object te gebruiken, omdat daarop al een aantal handelingen zoals bijv. oppakken en neerleggen voorgeprogrammeerd zijn).Voor onze taart is dit $thing.
Tussen de aanhalingstekens zet je de naam van het nieuwe voorwerp, in dit geval bijv. "een slagroomtaart".
Verder kun je achter de naam van het voorwerp een of meer bijnamen voor het voorwerp aangeven gescheiden door komma's (De rechte haken worden gebruikt om aan te geven dat alles ertussen ook weg gelaten mag worden). Dit is handig, omdat je het voorwerp dan ook met een van de bijnamen kunt aangeven. In dit voorbeeld gebruiken we de bijnaam taart.

We maken de taart dus met: @create $thing called "een slagroomtaart", taart
Nu hebben we een taart gemaakt, maar we willen er ook mee kunnen gaan gooien...

Om dit mogelijk te maken gaan we het werkwoord gooien (gooi) aan de taart koppelen.
Dit doen we met het commando @verb, dat de volgende syntaxis heeft:
@verb voorwerp:werkwoord this/none/any voorzetsel/none/any this/none/any

Dit lijkt op het eerste gezicht ietwat ingewikkeld, maar dat valt best mee.
Nu wordt duidelijk waarom we onze taart een bijnaam hebben gegeven. We kunnen onze taart nu met taart aanduiden in plaats van met "een slagroomtaart".
Voor werkwoord gebruiken we gooi.
this/none/any zijn aanduidingen die als volgt zijn uit te leggen:
this verwijst naar het voorwerp zelf, in dit geval dus de taart.
none gebruik je als je niet wilt dat iemand iets op bijbehorende positie hoeft mee te geven. Als je dus bijv. een voorwerp wilt 'gebruiken' met alleen het werkwoord gebruik, dan geef je @verb voorwerp:gebruik none none none , zodat je er niets bij hoeft te geven.
any kan elk willekeurig woord zijn, dat je dan in het werkwoord zult verwerken.

We willen dat we de taart naar iemand kunnen gaan gooien met gooi taart naar iemand, dus als voorzetsel gebruiken we naar. De opdracht wordt dus:
@verb taart:gooi this naar any
(Vergelijk dit met gooi taart naar iemand>)

Nu zullen we het werkwoord gaan invullen.
Afhankelijk van het programma dat je gebruikt om Nowmoo te komen zijn er verschillende manieren om een werkwoord te 'editten'. Zo schijnt VMOO een handige standaard-editor te hebben, maar tot mijn spijt moet ik bekennen dat ik geen VMOO-gebruiker ben en de details niet weet. Ik raad je aan om eens rond te vragen in Nowmoo bij andere helpers (op te vragen met @helpers) of gewone bewoners; zij kunnen je vast wel meer informatie geven.

Je kunt werkwoorden in ieder geval altijd programmeren met behulp van het commando @program, met de syntaxis:

Met de punt op het eind geef je aan dat je klaar bent met programmeren.
Voor onze taart tikken we dus @program taart:gooi in.


We gaan nu verder met de eigenlijke programmacode, het doel van deze pagina.

Bij het gooien van de taart gaan we eerst controleren of iemand een bestaande speler is.
iemand is het derde argument en die geef je in het programma aan met het woord iobj.
Voor de controle gebruiken we een if-constructie, die de volgende syntaxis heeft:

(Merk opnieuw de rechte haken op; alles daartussen mag je eventueel weglaten...)
Als de voorwaarde achter if waar is, dan wordt de bijbehorende programmacode uitgevoerd, zoniet dan wordt, als voorwaarde achter elseif waar is, de programmacode uitgevoerd die daarbij hoort. Als geen enkele voorwaarde waar is, dan wordt de programmacode na else uitgevoerd.(Opmerking: Er zijn meerdere elseif-onderdelen toegestaan.)
De controle waar ik het net over gehad heb, schrijf je als volgt:

Deze voorwaarde zal ik verder niet uitleggen, omdat ik dat te ver vind gaan voor een beginnend programmeur.
Wel wil ik even de reactie van Capi(onze alom bekende archwizard) aan jullie voorleggen:
Om snel te kijken of iets een speler is kan je ook is_player(iobj) oproepen. (Dat verb geeft alleen wel een foutmelding als iobj geen geldig object is)

Met valid(iobj) kan je dat checken.

$capi_utils:is_character(iobj) Geeft aan of iobj een aanwezige speler of een AI speler is.


Nu gaan we controleren of de persoon die de taart gooit (Deze wordt in het programma aangegeven met player) hem wel op zak heeft. Doorgewinterde bewoners kunnen er namelijk voor zorgen, dat ze een voorwerp gebruiken die ze niet hebben en dat is niet de bedoeling.
Tegelijkertijd stellen we als voorwaarde dat de persoon die de taart gooit zich in dezelfde ruimte moet bevinden als de persoon waarnaar de taart gegooid wordt, door een && tussen de voorwaarden te zetten.
We krijgen de volgende programmacode:


Waarvoor geldt:
player is de persoon die de taart gooit
this.location is de plaats waar de taart is
player.location is de plaats waar player is
iobj.location is de plaats waar het 'slachtoffer' is
== betekent 'is gelijk aan'
Nu hebben we genoeg gecontroleerd, zodat we kunnen gaan beschrijven wat er gebeurt als je de taart gooit: