private void LifeCreateCallback(Player player, Vector3I[] marks, object state) { try { lock (_world.SyncRoot) { if (!CheckWorldPermissions(player)) { return; } if (null == _world.Map) { return; } if (null != _world.GetLife(_name)) //check it again, since smone could create it in between { player.Message("&WLife with such name exists already, choose another"); return; } Life2DZone life = new Life2DZone(_name, _world.Map, marks, player, (player.Info.Rank.NextRankUp ?? player.Info.Rank).Name); if (_world.TryAddLife(life)) { player.Message("&yLife was created. Named " + _name); } else { player.Message("&WCoulnd't create life for some reason unknown."); //really unknown: we are under a lock so nobody could create a life with the same name in between } } } catch (Exception e) { player.Message("&WCreate life error: " + e.Message); } }