diff --git a/game/gamesrc/objects/examples/character.py b/game/gamesrc/objects/examples/character.py index a04607df00..f61a588c6b 100644 --- a/game/gamesrc/objects/examples/character.py +++ b/game/gamesrc/objects/examples/character.py @@ -29,12 +29,13 @@ class ExampleCharacter(Character): and its commands only be called by itself, not anyone else. (to change things, use at_object_creation() instead) at_after_move - launches the "look" command - at_disconnect - stores the current location, so the "unconnected" character + at_post_puppet(player) - when Player disconnects from the Character, we + store the current location, so the "unconnected" character object does not need to stay on grid but can be given a None-location while offline. - at_post_login - retrieves the character's old location and puts it back - on the grid with a "charname has connected" message echoed - to the room + at_pre_puppet - just before Player re-connects, retrieves the character's old + location and puts it back on the grid with a "charname has + connected" message echoed to the room """ pass diff --git a/game/gamesrc/objects/examples/object.py b/game/gamesrc/objects/examples/object.py index dab653d155..5593ed3fc0 100644 --- a/game/gamesrc/objects/examples/object.py +++ b/game/gamesrc/objects/examples/object.py @@ -47,7 +47,8 @@ class ExampleObject(Object): date_created (string) - time stamp of object creation permissions (list of strings) - list of permission strings - player (Player) - controlling player (will also return offline player) + player (Player) - controlling player (if any, only set together with sessid below) + sessid (int, read-only) - session id (if any, only set together with player above) location (Object) - current location. Is None if this is a room home (Object) - safety start-location sessions (list of Sessions, read-only) - returns all sessions connected to this object @@ -91,10 +92,10 @@ class ExampleObject(Object): at_init() - called whenever typeclass is cached from memory, at least once every server restart/reload at_cmdset_get() - this is called just before the command handler requests a cmdset from this object - at_first_login() - (player-controlled objects only) called once, the very first time user logs in. - at_pre_login() - (player-controlled objects only) called every time the user connects, after they have identified, before other setup - at_post_login() - (player-controlled objects only) called at the end of login, just before setting the player loose in the world. - at_disconnect() - (player-controlled objects only) called just before the user disconnects (or goes linkless) + at_pre_puppet(player)- (player-controlled objects only) called just before puppeting + at_post_puppet() - (player-controlled objects only) called just after completing connection player<->object + at_pre_unpuppet() - (player-controlled objects only) called just before un-puppeting + at_post_unpuppet(player) - (player-controlled objects only) called just after disconnecting player<->object link at_server_reload() - called before server is reloaded at_server_shutdown() - called just before server is fully shut down diff --git a/src/objects/objects.py b/src/objects/objects.py index 7c662d2a5a..24e592f2fc 100644 --- a/src/objects/objects.py +++ b/src/objects/objects.py @@ -62,7 +62,8 @@ class Object(TypeClass): date_created (string) - time stamp of object creation permissions (list of strings) - list of permission strings - player (Player) - controlling player (will also return offline player) + player (Player) - controlling player (if any, only set together with sessid below) + sessid (int, read-only) - session id (if any, only set together with player above) location (Object) - current location. Is None if this is a room home (Object) - safety start-location sessions (list of Sessions, read-only) - returns all sessions connected to this object @@ -491,33 +492,6 @@ class Object(TypeClass): """ pass - #def at_first_login(self): - # """ - # Only called once, the very first - # time the user logs in. - # """ - # pass - #def at_pre_login(self): - # """ - # Called every time the user logs in, - # before they are actually logged in. - # """ - # pass - #def at_post_login(self): - # """ - # Called at the end of the login - # process, just before letting - # them loose. - # """ - # pass - - #def at_disconnect(self): - # """ - # Called just before user - # is disconnected. - # """ - # pass - def at_server_reload(self): """ This hook is called whenever the server is shutting down for restart/reboot. diff --git a/src/players/migrations/0014_add_attr__playable_characters.py b/src/players/migrations/0014_add_attr__playable_characters.py new file mode 100644 index 0000000000..0cbe746cbd --- /dev/null +++ b/src/players/migrations/0014_add_attr__playable_characters.py @@ -0,0 +1,107 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import DataMigration +from django.db import models + +class Migration(DataMigration): + + def forwards(self, orm): + "Write your forwards methods here." + # Note: Remember to use orm['appname.ModelName'] rather than "from appname.models..." + if not db.dry_run: + for player in orm['players.PlayerDB'].objects.all(): + attr = orm['players.PlayerAttribute']() + attr.db_obj = player + attr.save() + char = player.db_obj + attr.db_obj.value = [char] or [] + + def backwards(self, orm): + "Write your backwards methods here." + + models = { + 'auth.group': { + 'Meta': {'object_name': 'Group'}, + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + 'auth.permission': { + 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + 'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'players.playerattribute': { + 'Meta': {'object_name': 'PlayerAttribute'}, + 'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'db_obj': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['players.PlayerDB']"}), + 'db_value': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'objects.objectdb': { + 'Meta': {'object_name': 'ObjectDB'}, + 'db_cmdset_storage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}), + 'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'db_destination': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'destinations_set'", 'null': 'True', 'to': "orm['objects.ObjectDB']"}), + 'db_home': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'homes_set'", 'null': 'True', 'to': "orm['objects.ObjectDB']"}), + 'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'db_location': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locations_set'", 'null': 'True', 'to': "orm['objects.ObjectDB']"}), + 'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'db_permissions': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'db_player': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['players.PlayerDB']", 'null': 'True', 'blank': 'True'}), + 'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'players.playerdb': { + 'Meta': {'object_name': 'PlayerDB'}, + 'db_cmdset_storage': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'db_date_created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'db_is_connected': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'db_key': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'db_lock_storage': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'db_obj': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['objects.ObjectDB']", 'null': 'True', 'blank': 'True'}), + 'db_permissions': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'db_typeclass_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'unique': 'True'}) + }, + 'players.playernick': { + 'Meta': {'unique_together': "(('db_nick', 'db_type', 'db_obj'),)", 'object_name': 'PlayerNick'}, + 'db_nick': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}), + 'db_obj': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['players.PlayerDB']"}), + 'db_real': ('django.db.models.fields.TextField', [], {}), + 'db_type': ('django.db.models.fields.CharField', [], {'default': "'inputline'", 'max_length': '16', 'null': 'True', 'blank': 'True'}), + 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + } + } + + complete_apps = ['players'] + symmetrical = True diff --git a/src/players/migrations/0014_removing_obj.py b/src/players/migrations/0015_removing_obj.py similarity index 98% rename from src/players/migrations/0014_removing_obj.py rename to src/players/migrations/0015_removing_obj.py index 8261ec5da3..4601ee25e5 100644 --- a/src/players/migrations/0014_removing_obj.py +++ b/src/players/migrations/0015_removing_obj.py @@ -9,7 +9,8 @@ class Migration(SchemaMigration): def forwards(self, orm): # Deleting field 'PlayerDB.db_obj' - db.delete_column('players_playerdb', 'db_obj_id') + if not db.dry_run: + db.delete_column('players_playerdb', 'db_obj_id') def backwards(self, orm): @@ -103,4 +104,4 @@ class Migration(SchemaMigration): } } - complete_apps = ['players'] \ No newline at end of file + complete_apps = ['players']