|
|
|
Return to Pipeline
by ninth » Tue Sep 06, 2011 2:38 pm
Actually, you has more then one actor in the single file. Pview processed this situation, and Actor class - not. Actor load only one animated mesh. You should join all parts in the single mesh in Blender to get single Actor, or do something like this:
- Code: Select all
pico = loader.loadModel('pico') pico.reparentTo(render) pico_parts = [] for part in pico.findAllMatches('**/+Character'): actor = Actor(part, {'startWalk': 'pico-startWalk', 'walk': 'pico-walk', 'stopWalk': 'pico-stopWalk'}) actor.reparentTo(render) actor.loop('walk') pico_parts.append(actor) part.removeNode()
Although, thanks to your example, I found one more bug in YABEE :)
Vodka, bears, balalaika... hmm... sorry for my English =)
-
ninth
-
- Posts: 373
- Joined: Fri Jan 23, 2009 9:06 am
- Location: Russia
by powerpup118 » Tue Sep 06, 2011 3:41 pm
ninth wrote:Actually, you has more then one actor in the single file. Pview processed this situation, and Actor class - not. Actor load only one animated mesh. You should join all parts in the single mesh in Blender to get single Actor, or do something like this: - Code: Select all
pico = loader.loadModel('pico') pico.reparentTo(render) pico_parts = [] for part in pico.findAllMatches('**/+Character'): actor = Actor(part, {'startWalk': 'pico-startWalk', 'walk': 'pico-walk', 'stopWalk': 'pico-stopWalk'}) actor.reparentTo(render) actor.loop('walk') pico_parts.append(actor) part.removeNode()
Although, thanks to your example, I found one more bug in YABEE 
Thank you alot! It works properly now that you explain it, the reason I have different Actor's is for customization (changing textures on him in-game etc)
Thank you again,
~powerpup118
-

powerpup118
-
- Posts: 325
- Joined: Sat Apr 17, 2010 11:59 pm
by ambyra » Mon Sep 12, 2011 6:30 pm
Hi, I've been having bone roll issues with the exporter. The orientation of models' parts changes depending on the roll of the armatures' bones. I have to manually adjust the roll for each bone, export, and then readjust the roll until the egg looks like the original animation. Is this an error on my part or the exporters?
-
ambyra
-
- Posts: 130
- Joined: Sat Sep 20, 2008 5:47 pm
by ninth » Tue Sep 13, 2011 1:03 am
Can you upload a couple of explaining screenshots? I'm not quite realize what's going on :(
Vodka, bears, balalaika... hmm... sorry for my English =)
-
ninth
-
- Posts: 373
- Joined: Fri Jan 23, 2009 9:06 am
- Location: Russia
by Nemesis#13 » Tue Sep 13, 2011 2:51 pm
What ambyra says is, I guess, that a bone in blender has more properties than position and direction.
It also has a length and a rotation around its own length axis.
All those can be used in blender for rigging and animation.
-

Nemesis#13
-
- Posts: 1041
- Joined: Mon Aug 04, 2008 8:09 pm
- Location: Germany
by ninth » Wed Sep 14, 2011 3:12 am
I'm not sure.
Actually bone's length is not affect to anything (I'm do not mean the scale or spline bones). Direction and rotation around its axis is equivalent of the Euler angles, used in the *.EGG
Vodka, bears, balalaika... hmm... sorry for my English =)
-
ninth
-
- Posts: 373
- Joined: Fri Jan 23, 2009 9:06 am
- Location: Russia
by b-man » Thu Sep 15, 2011 12:01 pm
Hello,
Right to the point: I can't get my textures to work.
Now some background. I'm totally new to Python and Panda3D, so forgive me if there is an obvious solution I'm not seeing.
I've created a basic cube in blender 2.59. The UVs have been unwrapped and I assigned a material to it which contain a normal map, emitter map, specular map, and diffuse map(all set to Coordinates: UV). I tried using the script you have so generously provided everyone and followed the instructions to the best of my ability. But when I take the new .egg into pview.exe the only map that seems to be working is my emitter map. Could you take a look and please tell me what I am doing wrong? Here are a couple screen shots of the cube, first is how it's supposed to look, second is how it looks in pview:
Here's what my .egg looks like:
- Code: Select all
<CoordinateSystem> { Z-up } <Material> Panel_Material { <Scalar> diffr { 0.640 } <Scalar> diffg { 0.640 } <Scalar> diffb { 0.640 } <Scalar> specr { 0.500 } <Scalar> specg { 0.500 } <Scalar> specb { 0.500 } <Scalar> shininess { 37.0 } <Scalar> emitr { 0.000 } <Scalar> emitg { 0.000 } <Scalar> emitb { 0.000 } }
<Texture> Spec { "/c/Projects/eggTests/Panel_Spec.png" }
<Texture> Emitter { "/c/Projects/eggTests/Panel_Illum.png" }
<Texture> Diffuse { "/c/Projects/eggTests/Panel_Diffuse.png" }
<Texture> Normal { "/c/Projects/eggTests/Panel_Norm.png" <Scalar> envtype { NORMAL } }
<Group> Cube { <Transform> { <Matrix4> { 1.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 1.000 0.000 0.000 0.000 0.000 1.000 } } <VertexPool> Cube { <Vertex> 0 { 1.000 1.000 -1.000 <UV> { 0.000 0.000 <Tangent> { 0.363 -0.893 0.265 } <Binormal> { -0.845 -0.496 -0.201 } } } <Vertex> 1 { 1.000 -1.000 -1.000 <UV> { 1.000 0.000 <Tangent> { 0.196 -0.535 0.822 } <Binormal> { -0.822 -0.535 -0.196 } } } <Vertex> 2 { -1.000 -1.000 -1.000 <UV> { 1.000 1.000 <Tangent> { -0.094 -0.656 0.749 } <Binormal> { -0.749 0.656 0.094 } } } <Vertex> 3 { -1.000 1.000 -1.000 <UV> { 0.000 1.000 <Tangent> { -0.000 -0.707 -0.707 } <Binormal> { -0.959 0.167 0.229 } } } <Vertex> 4 { 1.000 1.000 1.000 <UV> { 0.000 0.000 <Tangent> { -0.893 0.363 -0.265 } <Binormal> { -0.496 -0.845 0.201 } } } <Vertex> 5 { -1.000 1.000 1.000 <UV> { 1.000 0.000 <Tangent> { -0.509 -0.695 0.509 } <Binormal> { -0.509 0.509 -0.695 } } } <Vertex> 6 { -1.000 -1.000 1.000 <UV> { 1.000 1.000 <Tangent> { -0.496 0.201 0.845 } <Binormal> { -0.893 -0.265 -0.363 } } } <Vertex> 7 { 1.000 -1.000 1.000 <UV> { 0.000 1.000 <Tangent> { -0.535 0.196 0.822 } <Binormal> { -0.535 -0.822 -0.196 } } } <Vertex> 8 { 1.000 1.000 -1.000 <UV> { 0.000 0.000 <Tangent> { 0.363 -0.893 0.265 } <Binormal> { -0.845 -0.496 -0.201 } } } <Vertex> 9 { 1.000 1.000 1.000 <UV> { 1.000 0.000 <Tangent> { -0.893 0.363 -0.265 } <Binormal> { -0.496 -0.845 0.201 } } } <Vertex> 10 { 1.000 -1.000 1.000 <UV> { 1.000 1.000 <Tangent> { -0.535 0.196 0.822 } <Binormal> { -0.535 -0.822 -0.196 } } } <Vertex> 11 { 1.000 -1.000 -1.000 <UV> { 0.000 1.000 <Tangent> { 0.196 -0.535 0.822 } <Binormal> { -0.822 -0.535 -0.196 } } } <Vertex> 12 { 1.000 -1.000 -1.000 <UV> { 0.000 0.000 <Tangent> { 0.196 -0.535 0.822 } <Binormal> { -0.822 -0.535 -0.196 } } } <Vertex> 13 { 1.000 -1.000 1.000 <UV> { 1.000 0.000 <Tangent> { -0.535 0.196 0.822 } <Binormal> { -0.535 -0.822 -0.196 } } } <Vertex> 14 { -1.000 -1.000 1.000 <UV> { 1.000 1.000 <Tangent> { -0.496 0.201 0.845 } <Binormal> { -0.893 -0.265 -0.363 } } } <Vertex> 15 { -1.000 -1.000 -1.000 <UV> { 0.000 1.000 <Tangent> { -0.094 -0.656 0.749 } <Binormal> { -0.749 0.656 0.094 } } } <Vertex> 16 { -1.000 -1.000 -1.000 <UV> { 0.000 0.000 <Tangent> { -0.094 -0.656 0.749 } <Binormal> { -0.749 0.656 0.094 } } } <Vertex> 17 { -1.000 -1.000 1.000 <UV> { 1.000 0.000 <Tangent> { -0.496 0.201 0.845 } <Binormal> { -0.893 -0.265 -0.363 } } } <Vertex> 18 { -1.000 1.000 1.000 <UV> { 1.000 1.000 <Tangent> { -0.509 -0.695 0.509 } <Binormal> { -0.509 0.509 -0.695 } } } <Vertex> 19 { -1.000 1.000 -1.000 <UV> { 0.000 1.000 <Tangent> { -0.000 -0.707 -0.707 } <Binormal> { -0.959 0.167 0.229 } } } <Vertex> 20 { 1.000 1.000 1.000 <UV> { 0.000 0.000 <Tangent> { -0.893 0.363 -0.265 } <Binormal> { -0.496 -0.845 0.201 } } } <Vertex> 21 { 1.000 1.000 -1.000 <UV> { 1.000 0.000 <Tangent> { 0.363 -0.893 0.265 } <Binormal> { -0.845 -0.496 -0.201 } } } <Vertex> 22 { -1.000 1.000 -1.000 <UV> { 1.000 1.000 <Tangent> { -0.000 -0.707 -0.707 } <Binormal> { -0.959 0.167 0.229 } } } <Vertex> 23 { -1.000 1.000 1.000 <UV> { 0.000 1.000 <Tangent> { -0.509 -0.695 0.509 } <Binormal> { -0.509 0.509 -0.695 } } } } <Polygon> { <TRef> { Normal } <TRef> { Diffuse } <TRef> { Emitter } <TRef> { Spec } <MRef> { Panel_Material } <Normal> {0.000 0.000 -1.000} <VertexRef> { 0 1 2 3 <Ref> { Cube }} } <Polygon> { <TRef> { Normal } <TRef> { Diffuse } <TRef> { Emitter } <TRef> { Spec } <MRef> { Panel_Material } <Normal> {0.000 0.000 1.000} <VertexRef> { 4 5 6 7 <Ref> { Cube }} } <Polygon> { <TRef> { Normal } <TRef> { Diffuse } <TRef> { Emitter } <TRef> { Spec } <MRef> { Panel_Material } <Normal> {1.000 -0.000 0.000} <VertexRef> { 8 9 10 11 <Ref> { Cube }} } <Polygon> { <TRef> { Normal } <TRef> { Diffuse } <TRef> { Emitter } <TRef> { Spec } <MRef> { Panel_Material } <Normal> {-0.000 -1.000 -0.000} <VertexRef> { 12 13 14 15 <Ref> { Cube }} } <Polygon> { <TRef> { Normal } <TRef> { Diffuse } <TRef> { Emitter } <TRef> { Spec } <MRef> { Panel_Material } <Normal> {-1.000 0.000 -0.000} <VertexRef> { 16 17 18 19 <Ref> { Cube }} } <Polygon> { <TRef> { Normal } <TRef> { Diffuse } <TRef> { Emitter } <TRef> { Spec } <MRef> { Panel_Material } <Normal> {0.000 1.000 0.000} <VertexRef> { 20 21 22 23 <Ref> { Cube }} } }
Any help on this would be greatly appreciated!
Thanks muchly,
~B-Man
Righteous! Righteous!
-
b-man
-
- Posts: 5
- Joined: Thu Sep 15, 2011 11:05 am
by ThomasEgi » Thu Sep 15, 2011 12:12 pm
i ran into the same problem. but when exporting multiple meshes with different materials at once. it seems to assign all textures to all faces.
-

ThomasEgi
-
- Posts: 2147
- Joined: Fri Jul 28, 2006 10:43 am
- Location: Germany,Koblenz
by b-man » Thu Sep 15, 2011 12:34 pm
ThomasEgi wrote:i ran into the same problem. but when exporting multiple meshes with different materials at once. it seems to assign all textures to all faces.
So what you're saying is that it's basically applying every map type as a color map?
Is there something special I need to do in blender to flag the different map types?
And I probably should have asked this first: what can Panda3D handle shader-wise? Does it only support basic diffuse textures? Or can it handle specular, emitter, and normal maps too?
Thanks,
~B-Man
Righteous! Righteous!
-
b-man
-
- Posts: 5
- Joined: Thu Sep 15, 2011 11:05 am
by ThomasEgi » Thu Sep 15, 2011 12:48 pm
panda can deal with anything you teach your shader to process. i think the autoshader works with diffuse, spec, normal and glow at least. from what it looks like. it applies all textures to all meshes.
it does seem to tag the normal maps correctly, the diffuse don't need any special tags. spec and glow probably are not handled correctly yet.
-

ThomasEgi
-
- Posts: 2147
- Joined: Fri Jul 28, 2006 10:43 am
- Location: Germany,Koblenz
by b-man » Thu Sep 15, 2011 1:00 pm
ThomasEgi wrote:panda can deal with anything you teach your shader to process. i think the autoshader works with diffuse, spec, normal and glow at least. from what it looks like. it applies all textures to all meshes.
it does seem to tag the normal maps correctly, the diffuse don't need any special tags. spec and glow probably are not handled correctly yet.
Cool. I just tried exporting again. This time I left out the glow and spec and it shows the diffuse correctly now, but I don't see any sign of a normal map being applied in pview (I pressed 'l' to show lights and still nothing but the color map). Does the pview not support normal maps?
Sorry, ignore the greyed out bit, didn't realize you had to turn on per-pixel lighting
Also is there a way I can apply the spec and glow map after I use the yabee.py to export the .egg?
Thanks,
~B-Man
Last edited by b-man on Thu Sep 15, 2011 1:09 pm, edited 2 times in total.
Righteous! Righteous!
-
b-man
-
- Posts: 5
- Joined: Thu Sep 15, 2011 11:05 am
by drwr » Thu Sep 15, 2011 1:05 pm
You have to also press 'p' in pview to enable per-pixel lighting for the normal maps.
David
-
drwr
-
- Posts: 11253
- Joined: Fri Feb 13, 2004 12:42 pm
- Location: Glendale, CA
by b-man » Thu Sep 15, 2011 1:13 pm
drwr wrote:You have to also press 'p' in pview to enable per-pixel lighting for the normal maps.
David
Thank-you, didn't realize I needed to turn it on  .
I have another question that may be out of the scope of this thread, but: How do you add collision surfaces to the models? Is there a special naming convention for the meshes so that they turn into collision surfaces upon export?
Thanks,
~B-Man
Righteous! Righteous!
-
b-man
-
- Posts: 5
- Joined: Thu Sep 15, 2011 11:05 am
by ninth » Fri Sep 16, 2011 7:23 am
At the moment, are not exported envtypes. I'm working on it. ) For your particular case needs to be written envtypes by hand. Like this:
- Code: Select all
<Texture> Spec { "/c/Projects/eggTests/Panel_Spec.png" <Scalar> envtype { GLOSS } }
<Texture> Emitter { "/c/Projects/eggTests/Panel_Illum.png" <Scalar> envtype { GLOW } }
<Texture> Diffuse { "/c/Projects/eggTests/Panel_Diffuse.png" <Scalar> envtype { MODULATE } }
<Texture> Normal { "/c/Projects/eggTests/Panel_Norm.png" <Scalar> envtype { NORMAL } }
Vodka, bears, balalaika... hmm... sorry for my English =)
-
ninth
-
- Posts: 373
- Joined: Fri Jan 23, 2009 9:06 am
- Location: Russia
by b-man » Fri Sep 16, 2011 9:52 am
ninth wrote:At the moment, are not exported envtypes. I'm working on it. ) For your particular case needs to be written envtypes by hand. Like this: - Code: Select all
<Texture> Spec { "/c/Projects/eggTests/Panel_Spec.png" <Scalar> envtype { GLOSS } }
<Texture> Emitter { "/c/Projects/eggTests/Panel_Illum.png" <Scalar> envtype { GLOW } }
<Texture> Diffuse { "/c/Projects/eggTests/Panel_Diffuse.png" <Scalar> envtype { MODULATE } }
<Texture> Normal { "/c/Projects/eggTests/Panel_Norm.png" <Scalar> envtype { NORMAL } }
Awesome! Thank you very much!
I'll give this a shot.
~B-Man
Righteous! Righteous!
-
b-man
-
- Posts: 5
- Joined: Thu Sep 15, 2011 11:05 am
by ninth » Fri Sep 16, 2011 10:46 am
As for collision, you need to add "<ObjectType> { type }" entry into <Group>. Object types described in the Confauto.prc file. Simply set type to barrier to get invisible collision mesh. Also you can add your own type in Confauto.
Vodka, bears, balalaika... hmm... sorry for my English =)
-
ninth
-
- Posts: 373
- Joined: Fri Jan 23, 2009 9:06 am
- Location: Russia
by ninth » Tue Sep 20, 2011 5:45 pm
Rev 11 for Blender 2.59
- Fix matrix*vector operations for use with Blender 2.59
- Add vertex color export
- Add variable to switch tangent space calculation: inner calculation; calculation through egg-trans; disable TBS
- Change texture export.
I could not appropriately reproduce the Blender's texture blend types to Panda's envtypes, so I split texture exporting into 'SIMPLE' and 'BAKE' modes, and added varable to switch it.
'SIMPLE' - export all texture layers as MODULATE.
Except:
use map normal == NORMAL
use map specular == GLOSS
use map emit == GLOW
'BAKE' - bake textures depending on the BAKE_LAYERS dictionary settings. It's untested "voodoo magic", so I advise to save your model before using this option :)
Also the glow and the gloss textures are baking into the b/w intensity map, but Panda used alpha for this texture types, therefore you need to convert black color into alpha after exporting.
Vodka, bears, balalaika... hmm... sorry for my English =)
-
ninth
-
- Posts: 373
- Joined: Fri Jan 23, 2009 9:06 am
- Location: Russia
by Mr.Brown » Wed Sep 21, 2011 12:21 pm
Sorry for the noob question, but how do I run Rev11?
I tried pasting yabee.py into the text editor, but then it can't find the other files.
Is there some blender guru incantation I am leaving out? 
-
Mr.Brown
-
- Posts: 5
- Joined: Wed Sep 21, 2011 12:16 pm
by coppertop » Wed Sep 21, 2011 12:35 pm
Instead of pasting it, go into Text -> Open Text Block and load the file from there.
-

coppertop
-
- Posts: 526
- Joined: Sat Apr 18, 2009 5:48 am
by Mr.Brown » Wed Sep 21, 2011 1:08 pm
coppertop wrote:Instead of pasting it, go into Text -> Open Text Block and load the file from there.
Thanks, works perfectly now. 
-
Mr.Brown
-
- Posts: 5
- Joined: Wed Sep 21, 2011 12:16 pm
by ambyra » Mon Oct 03, 2011 2:14 pm
This is the bone roll problem I've been having. Has anyone else had this problem with animated meshes?
The bone roll property in bone edit mode affects the animation when I export to egg. If the roll isn't what the exporter expects, the animation is twisted, with limbs in the wrong directions. Here's a file that explains, with blend files and egg animations. There is a text in the zip that describes how to recreate the problem.
http://sites.google.com/site/ambyra/all/boneRoll.zip
a copy if the first doesn't work.
http://www.mediafire.com/?azh0cfb4fhc9i2b
-
ambyra
-
- Posts: 130
- Joined: Sat Sep 20, 2008 5:47 pm
by aquCHAOS » Tue Oct 04, 2011 9:18 am
great job!
however, i met a problem when trying to export the blender file into egg format. The problem especially occurs for the duplicated models.
for example, I have a cube, which can be exported correctly, then I duplicate the cube with alt+D or shift+D, then try to export them both or one of them, there is always a script error.
Here is the error message:
File "//home/aqu/.blender/scripts/YABEE 11/yabee_libs/texture_processor.py", line 189, in bake img_path = paths[key] KeyError: 'Sphere.001_gloss'
BTW, if you rename the duplicated model then export it, it probably will success sometimes.
-
aquCHAOS
-
- Posts: 2
- Joined: Tue Oct 04, 2011 9:10 am
by ninth » Tue Oct 04, 2011 11:12 pm
Ok. Thanks, i'll check this.
Vodka, bears, balalaika... hmm... sorry for my English =)
-
ninth
-
- Posts: 373
- Joined: Fri Jan 23, 2009 9:06 am
- Location: Russia
by aquCHAOS » Mon Oct 10, 2011 4:34 am
hi ninth,
there is another problem with the exporter: it does generate the normal map image correctly but the normal map does not have any effect in pview. (i just roughly test it in pview with l and p)
-
aquCHAOS
-
- Posts: 2
- Joined: Tue Oct 04, 2011 9:10 am
by ninth » Wed Oct 12, 2011 4:18 pm
ambyra
You have used rev 9.1. Try to use 10 or 11. I think I have fix this bug in the last revision.
aquCHAOS
1. I can't to reproduce the bug with duplicate object. Can you make a .blend example file?
2. Try to disable Glow export - the normal map effect can overlapped by the glow.
Vodka, bears, balalaika... hmm... sorry for my English =)
-
ninth
-
- Posts: 373
- Joined: Fri Jan 23, 2009 9:06 am
- Location: Russia
by Alviss » Fri Oct 14, 2011 3:45 am
Hi!
Im having a problem using YABEE.
i get a Python script error when i try to run the script. But nothing shows up in the Console, and the output'd egg file is occasionally empty, or just says: <CoordinateSystem> { Z-up }
(just scroll down to get past the useless thumbnail)
Im using,
YABEE rev 11
Python 1.6.5
Panda 1.7.2
Blender 2.59
-
Alviss
-
- Posts: 39
- Joined: Tue Dec 14, 2010 3:38 pm
by ninth » Fri Oct 14, 2011 6:23 am
To see anything in the console, you should run Blender from the console (windows command prompt in your case).
Win+R -> cmd
Please, try it an see what it says.
Vodka, bears, balalaika... hmm... sorry for my English =)
-
ninth
-
- Posts: 373
- Joined: Fri Jan 23, 2009 9:06 am
- Location: Russia
by Gatou » Fri Oct 14, 2011 12:22 pm
Hello
I have an error when I try to run the script with a basic cube.
Im using,
YABEE rev 11
Blender 2.59 64 bits
-
Gatou
-
- Posts: 19
- Joined: Fri Oct 14, 2011 12:14 pm
- Location: France
by Alviss » Fri Oct 14, 2011 12:26 pm
Heres the printout
- Code: Select all
C:\Coding\Games\Tauris\lib\data\shapes\cruiser0.blend RELOADING MODULES PATH C:\Program Files\Blender Foundation\Blender\backup not exist. Trying to mak e path WRITE main EGG to C:\Program Files\Blender Foundation\Blender\backup\cruiser0.eg g Traceback (most recent call last): File "C:\Coding\Games\Tauris\lib\data\shapes\cruiser0.blend\yabee.py", line 89 , in <module> BAKE_LAYERS) File "C:\Users\owner\AppData\Roaming\Blender Foundation\Blender\2.59\scripts\a ddons\yabee_libs\egg_writer.py", line 1008, in write_out file.write(get_egg_materials_str()) File "C:\Users\owner\AppData\Roaming\Blender Foundation\Blender\2.59\scripts\a ddons\yabee_libs\egg_writer.py", line 914, in get_egg_materials_str used_textures = tb.bake(BAKE_LAYERS) File "C:\Users\owner\AppData\Roaming\Blender Foundation\Blender\2.59\scripts\a ddons\yabee_libs\texture_processor.py", line 158, in bake assigned_data = self._prepare_images(btype, params[0]) File "C:\Users\owner\AppData\Roaming\Blender Foundation\Blender\2.59\scripts\a ddons\yabee_libs\texture_processor.py", line 113, in _prepare_images active_uv_idx = obj.data.uv_textures[:].index(active_uv) ValueError: None is not in list
-
Alviss
-
- Posts: 39
- Joined: Tue Dec 14, 2010 3:38 pm
by ninth » Fri Oct 14, 2011 1:44 pm
Gatou, Alviss
Fixed. I have update archive. But error was caused by a lack of UV layer, so to see the textures on your model you steel should unwrap UV.
Vodka, bears, balalaika... hmm... sorry for my English =)
-
ninth
-
- Posts: 373
- Joined: Fri Jan 23, 2009 9:06 am
- Location: Russia
Return to Pipeline
Who is online
Users browsing this forum: No registered users and 0 guests
| | |