Python Mud (6): item verplaatsing en inventory fixes

Saturday 24 March 2012, 13:40:00 | mud / i.f.

Vorige edities:

  1. Soul Emotes →Python Mud (1): Soul emotes
  2. Eerste opzet driver en mudlib →Python Mud (2): eerste opzet driver en mudlib
  3. Items en verplaatsing →Python Mud (3): items en verplaatsing
  4. take ALL the things & teleport me out of here →Python Mud (4): take ALL the things & teleport me out of here
  5. laatste paar commands →Python Mud (5): laatste paar commands

Deze keer een aantal structurele verbeteringen gemaakt in de manier waarop inventory en move geimplementeerd waren. Het was eerder mogelijk om zo maar dingen te verwijderen direct uit de inventory van een npc, en er waren problemen met het 'transactioneel' verplaatsen van dingen (dwz: alles lukt en X is weg uit A en zit nu in B, of het mislukt en er is niks gebeurd dus X zit nog steeds in A.)

De inventory is read-only geworden met access methods zodat je precies invloed hebt op wat er kan en mag met de inventory van een container item/npc/player. E zijn een hoop allow_ methodes verwijderd en de controle of iets mag, is nu ingebouwd in de nieuwe access methods.

Ik had eerst een aanpassing gemaakt om items te kunnen toevoegen en verwijderen met += en -= (__iadd__ en __isub__) maar hoewel dat lekker typt, is het niet geschikt. Je kunt namelijk geen actor bepalen op deze manier, en dat heb je soms nodig om te kunnen zeggen of een bepaalde actie mag of niet.

Er is nu ook een transactionele move() methode op Item en Living die voor correcte verplaatsing zorgt van A naar B.

Als je iets direct vanuit een kamer 'put' in een ander ding (b.v. put paper in trashcan) dan wordt nu eerst het object opgepakt vanuit de kamer, en dan in een losse stap daarna, in het andere object geplaatst. Dit is natuurlijker, en het lost een probleem op dat er was met items die je wel kan oppakken maar niet meer kan wegdoen (omdat ze een vloek hebben o.i.d.). Eerder werden deze gewoon naar het doel-object verplaatst, nu blijven ze achter in je inventory.

De baseobjects module heb ik gerenamed naar base, omdat hij heel veel gebruikt wordt en een korte naam dan eenmaal prettiger werkt.

Dingen die ik op korte termijn wil toevoegen: