November 17 2019 19:20:26
Navigation
· Home
· Articles
· Downloads
· FAQ
· Discussion Forum
· Web Links
· News Categories
· Contact Me
· Photo Gallery
· Search
· Gameservers
Languages
Users Online
· Guests Online: 5

· Members Online: 0

· Total Members: 1,057
· Newest Member: Soul of Minh
Teamspeak 3
Last Seen Users
· VictorMyson< 5 mins
· GONZO00:59:09
· Homi01:15:27
· Ho Chi Minh01:47:53
· Hoods04:03:33
· apfelbaum12:22:01
· sonic21:15:48
· martyr 1 day
· The ACE 2 days
· Intruder 3 days
· Croocker 5 days
· Vietmin 1 week
· Confused Master 1 week
· WEZ 2 weeks
· fayi 2 weeks

View Thread: Intrusion « SITREP »
Vietcong.Info » Vietcong General Discussion » Maps & Mapping
Who is here? 1 Guest
Current Rating: (Total: 0 ratings)  
 Print Thread
Intrusion « SITREP »
Intruder
Hi,

As some of you already know, I'm trying to release the next version of Intrusion (Intrusion_beta_2) as soon as possible...
Many months ago, after to have found and fixed many bugs, I decided to go further by increasing all "the details" for the best immersion and gameplay... Everything was working correctly and I really thought I was rather close a public release, but I was wrong! During our last beta tests, we found another bug!!!

The bug:
The first time the players are loading the map, everything is working normaly and as it should. However, once the FIRST bot is killed, it becomes impossible for a (new) player/rejoiner to load the map. The map will crash the game to the desktop at the very end of the loading! But if we "restarmap" the map (> new bots), the players can load and respawn on the map, again...
In fact, the only way to load the map WITH the bug is by using the "trick" we all know, by putting the game to the desktop during the map's loading!

The fix?:
Because we had no idea of what was causing that bug, I decided to create many different versions of the map (no lightmaps, no waypoints,...), by hoping to find the culprit... To make it short, it's only when we tested the version where I deleted around 1.000 objects (random number, just for the test, which is huge!) that the bug was GONE!!! Don't ask me what is the link between the bots, the objects and the desktop, to create that bug (or not), because I have NO idea! If some of you have ideas, you're the welcome to share them! lol
So apparently, the map has no bug but it just became "too big" for what the game engine can handle...(?)


Of course, I could have written in the readme file provided with the map, to just put the game to the desktop during the map's loading, to be able to play it normaly but this is not how it's supposed to work! And with the maps loading via a server, that information may never be read by the players...
So, after all those long hours spent in the placement of my objects, I'm now deleting them, one by one, to try to find back a map without the bug! So far, I already deleted (more or less) 300 objects but the bug is still there! Grrr...

Note that I saved a map version with "all the details" just in case someone finds a fix for that bug in the future...


Let's hope I'll have better news to announce you for the next time! Wink



Intruder
Edited by Intruder on 17-10-2019 00:44
Signaturewww.vietcong.info/portal/images/ranks/Member_of_the_Month1011.pngwww.vietcong.info/portal/images/ranks/Member_of_the_Month_6.png
  x 2
 
Silent Bob
Intruder wrote:
The bug:


Is it possible to merge/link some objects so the total number of objects is smaller than before?

Did you try a different gamemode script ?
 
www.vietcong.info
martyr
More questions sorry...

Is this only happening in COOP mode?

Can you share your .inc (mplevel etc) and game mode and script files?
Signature________________________________________________________________________

"From every kill grow, from every death learn"
 
http://www.clanofminh.vcclan.net/minh/
Intruder
Silent Bob wrote:

Is it possible to merge/link some objects so the total number of objects is smaller than before?

Hmmm, excepted you know a method I don't, I don't think it's possible the way I have built Intrusion...

Did you try a different gamemode script ?

Not really... My Discovery mode (same map, only without the bots) has no trouble for example...
I want to precise again that the Coop mode has no problem in fact, as long as we are on the map, from the start, and we're not trying to re/join after the first vc kill... That's why it took us so much time before to discover there was a bug... And because the game is not crashing if we go to the desktop during the loading, I guess it's not a coop script problem also (or another one)... But maybe I'm wrong!

--------------------------------------------------

martyr wrote:

Is this only happening in COOP mode

Yes... The map has my usual Coop, Coop' and Discovery modes only... Coop and Coop' modes are crashing but the Discovery one is ok.

Can you share your .inc (mplevel etc) and game mode and script files?

But all my scripts are the "default" ones in fact... I don't have the skill to create custom scripts with special "features". Usually, I'm using the scripts from my older maps because I never got problems with them. However, after all that time and those long years in mapping, maybe I missed something important! I'll check them again and will post them if they are not the ones by "default"...

--------------------------------------------------

For information, the latest datas from the map, at its highest level were:

Textures: 525 (48.2 MB)
Light maps: 1632 (33.1 MB)
Collisions: 13.75 MB
Used BESses: 8506
Lights: 3
Waypoints: 2173
Events: 293

And the actual datas, in my search of a lighter and working version are:

Textures: 517 (48 MB)
Light maps: 1499 (32.1 MB)
Collisions: 13.33 MB
Used BESses: 7842
Lights: 3
Waypoints: 2341
Events: 293


Thank you for your interest! :)



Intruder
Signaturewww.vietcong.info/portal/images/ranks/Member_of_the_Month1011.pngwww.vietcong.info/portal/images/ranks/Member_of_the_Month_6.png
 
xhc
send coop.c and bot's .c files usied in that map
I will find there some lines to exclude possibility that issue is in .c files, but I think, this could be map issue (editor work), don't know more this time...
  x 1
 
http://moddb.com/members/xhc
The ACE
Light maps could be an issue.
Signature
home.planet.nl/~opden067/Image/headbitch1.gif
 
http://theace.favos.nl/
Intruder
The ACE wrote:

Light maps could be an issue.

Indeed, lightmaps could create that kind of problem but during our latest big tests, I also made a map version without lightmaps and the game was still crashing... So I guess we can exclude them from the list.

--------------------------------------------------

After many more tests and checks, I found missmatches in my vc groups (scripts) and "players" in the Editor... I really don't know what happend but apparently something went wrong during the process! Frown
I first need to fix that mess before to go further because it may be the only reason why the game is crashing!!! Shock

See you next time with good news... I really hope!


Edit:
It's still not fixed! Frown
I need to do more tests because the crashes are not consistent now. Sometimes it crashes, sometimes not!
I have the bad feeling to fight with more bugs at the same time...



Intruder
Edited by Intruder on 04-11-2019 23:20
Signaturewww.vietcong.info/portal/images/ranks/Member_of_the_Month1011.pngwww.vietcong.info/portal/images/ranks/Member_of_the_Month_6.png
 
Intruder
xhc wrote:

send coop.c and bot's .c files usied in that map
I will find there some lines to exclude possibility that issue is in .c files, but I think, this could be map issue (editor work), don't know more this time...

Just in case and to be sure my Coop.c file is free of errors...

Download source  Code
/*
   Eric multiplayer script - Coop
*/

#include <inc\sc_global.h>
#include <inc\sc_def.h>




#define GVAR_GPHASE            500

//#define RECOVER_TIME   15.0f      // time to global recover
#define NORECOV_TIME   3.0f      // disable time of recoverplace after recovering someone there

#define REC_WPNAME_US   "USSpawn_coop_%d"
#define REC_MAX         64

dword gRecs = 0;
s_SC_MP_Recover gRec[REC_MAX];
float gRecTimer[REC_MAX];

float gNextRecover = 0.0f;

dword gEndRule;
dword gEndValue;
float gTime;

#define GPHASE_BEGIN         1
#define GPHASE_GAME            2
#define GPHASE_DONE            3
#define GPHASE_FAILED         4

dword gPhase = GPHASE_BEGIN;
float gPhase_timer = 5.0f;
dword gPhase_send = 0;

BOOL gValidSide0 = FALSE;

dword gRecoverTime = 0;
dword gRecoverLimit = 0;

float gAllNoAiRecover  = 0.0f;

BOOL SRV_CheckEndRule(float time){

   switch(gEndRule){
      case SC_MP_ENDRULE_TIME:         

         if (gValidSide0) gTime += time;
         SC_MP_EndRule_SetTimeLeft(gTime,gValidSide0);

         if (gTime>gEndValue){
            SC_MP_LoadNextMap();
            return TRUE;
         }

         break;

      default:
         SC_message("EndRule unsopported: %d",gEndRule);
         break;

   }// switch(gEndRule)

   return FALSE;

}// void SRV_CheckEndRule(float time)


void SRV_CheckUpdate(void){

   if (gPhase_send!=gPhase){

      gPhase_send = gPhase;

      SC_sgi(GVAR_GPHASE,gPhase);

   }// if (gPhase_send!=gPhase)

}// void SRV_CheckUpdate(void)



int ScriptMain(s_SC_NET_info *info)
{
   s_SC_MP_EnumPlayers      enum_pl[64];
   s_SC_MP_SRV_settings   SRVset;
   s_SC_MP_Recover *precov;
   s_SC_MP_hud      hudinfo;
   s_SC_P_getinfo   plinfo;
   dword   i, j, sideA, sideB, num;
   BOOL   valid[2];
   BOOL   alldeath;
   char   txt[32],*itxt;
   ushort *witxt;
   float   val;


   //
   switch(info->message)
   {
      case SC_NET_MES_SERVER_TICK:   
         
         if (SRV_CheckEndRule(info->elapsed_time)) break;

         for (j=0;j<2;j++)
         for (i=0;i<gRecs;i++)
            gRecTimer[i] -= info->elapsed_time;


         if (gRecoverTime<0xffff){
            gNextRecover -= info->elapsed_time;
            if (gNextRecover<0.0f) gNextRecover = (float)gRecoverTime;
         }// if (gRecoverTime<0xffff)
         

      
         if (gAllNoAiRecover>0.0f){
            gAllNoAiRecover -= info->elapsed_time;            
            if (gAllNoAiRecover<=0.0f)
               SC_MP_RecoverAllNoAiPlayers();      
                        
            break;
         }// if (gAllNoAiRecover>0.0f)
         else{
            gAllNoAiRecover -= info->elapsed_time;
         }


         CLEAR(valid);         
         j = 64;
         alldeath = FALSE;

         if (SC_MP_EnumPlayers(enum_pl,&j,SC_MP_ENUMPLAYER_SIDE_ALL)){            

            alldeath = TRUE;

            for (i=0;i<j;i++){
               if (enum_pl[i].status==SC_MP_P_STATUS_INGAME){
                  if (enum_pl[i].side>1) SC_message("coop script wrong side: %d",enum_pl[i].side);
                  else{
                     valid[enum_pl[i].side] = TRUE;
                  }
               }

               if ((enum_pl[i].side==0)&&(enum_pl[i].status==SC_MP_P_STATUS_INGAME)) alldeath = FALSE;

            }// for (i)

            SC_Log(3,"Enum, v[0]: %d   v[1]: %d  alldeath: %d",valid[0],valid[1],alldeath);
               
         }// if (SC_MP_EnumPlayers(enum_pl,&j,SC_MP_ENUMPLAYER_SIDE_ALL))
         else SC_Log(3,"NoEnum");

      
         if ((gPhase==GPHASE_GAME)&&(alldeath)&&(gPhase_timer<0.0f)){
            
            if (gRecoverLimit==0){
               // mission failed
               SC_Log(2,"Set GPHASE_FAILED");
               gPhase = GPHASE_FAILED;
               gPhase_timer = 5.0f;
            }
            else {
               // recover unlimited
               if ((gRecoverTime>=0xffff)&&(gAllNoAiRecover<-5.0f)){
                  gAllNoAiRecover = 4.0f;               
               }
            }

         }// if ((alldeath)&&(gRecoverTime>=0xffff))
         else gAllNoAiRecover = 0.0f;


         gValidSide0 = valid[0];

         switch(gPhase){
            case GPHASE_BEGIN:
               gPhase_timer -= info->elapsed_time;

               if (gPhase_timer<0.0f)
               if ((valid[0])&&(valid[1])){
                  SC_Log(2,"Set GPHASE_GAME");
                  gPhase_timer = 5.0f;
                  gPhase = GPHASE_GAME;                  
               }
               break;
            case GPHASE_GAME:
               gPhase_timer -= info->elapsed_time;

               if (gPhase_timer<0.0f)
               if (!valid[1]){
                  SC_Log(2,"Set GPHASE_DONE");
                  gPhase = GPHASE_DONE;
                  gPhase_timer = 8.0f;
               }// if (!valid[1])
               break;
            case GPHASE_DONE:
            case GPHASE_FAILED:

               gPhase_timer -= info->elapsed_time;
               if (gPhase_timer<0.0f){
                  SC_Log(2,"SC_MP_RestartMission");
                  SC_MP_RestartMission();               //restart
                  gPhase = GPHASE_BEGIN;
                  gPhase_timer = 5.0f;
               }

               break;
         }// switch(gPhase)

         SRV_CheckUpdate();

         break;

      case SC_NET_MES_CLIENT_TICK:

         break;// SC_NET_MES_CLIENT_TICK


      case SC_NET_MES_LEVELPREINIT:
         SC_sgi(GVAR_MP_MISSIONTYPE,GVAR_MP_MISSIONTYPE_COOP);

         gEndRule = info->param1;
         gEndValue = info->param2;
         gTime = 0.0f;

         SC_MP_EnableBotsFromScene(TRUE);

         break;// SC_NET_MES_LEVELPREINIT

      case SC_NET_MES_LEVELINIT:
         
         SC_MP_SRV_SetForceSide(0);


         SC_MP_SRV_SetClassLimit(18,0);
         SC_MP_SRV_SetClassLimit(19,0);
         SC_MP_SRV_SetClassLimit(39,0);

         SC_MP_GetSRVsettings(&SRVset);

         for (i=0;i<6;i++){
            SC_MP_SRV_SetClassLimit(i+1,SRVset.atg_class_limit[i]);
            SC_MP_SRV_SetClassLimit(i+21,SRVset.atg_class_limit[i]);
         }// for (i)


         CLEAR(hudinfo);
         hudinfo.title = 1098;

         hudinfo.sort_by[0] = SC_HUD_MP_SORTBY_KILLS;
         hudinfo.sort_by[1] = SC_HUD_MP_SORTBY_DEATHS | SC_HUD_MP_SORT_DOWNUP;
         hudinfo.sort_by[2] = SC_HUD_MP_SORTBY_PINGS | SC_HUD_MP_SORT_DOWNUP;

         hudinfo.pl_mask = SC_HUD_MP_PL_MASK_KILLS | SC_HUD_MP_PL_MASK_DEATHS | SC_HUD_MP_PL_MASK_CLASS;
         hudinfo.use_sides = TRUE;
         hudinfo.side_name[0] = 1010;
         hudinfo.side_color[0] = 0x440000ff;
         hudinfo.side_name[1] = 1011;
         hudinfo.side_color[1] = 0x44ff0000;
         hudinfo.disableVCside = TRUE;

         hudinfo.side_mask = SC_HUD_MP_SIDE_MASK_FRAGS;
         

         SC_MP_HUD_SetTabInfo(&hudinfo);

         SC_MP_AllowStPwD(TRUE);
         SC_MP_AllowFriendlyFireOFF(TRUE);
         SC_MP_SetItemsNoDisappear(FALSE);  //False=original

         SC_MP_SetChooseValidSides(1);

         if (info->param2){

            if (info->param1){
               // it's server      

               SC_MP_GetSRVsettings(&SRVset);
               gRecoverTime = SRVset.coop_respawn_time;
               gRecoverLimit = SRVset.coop_respawn_limit;

//               SC_MP_SRV_InitWeaponsRecovery(-1.0f);             
               SC_MP_SRV_InitWeaponsRecovery((float)SRVset.dm_weap_resp_time); 
               
               SC_MP_Gvar_SetSynchro(GVAR_GPHASE);               
               
               gRecs = 0;

               for (i=0;i<REC_MAX;i++){      
                  sprintf(txt,REC_WPNAME_US,i);         
                  if (SC_NET_FillRecover(&gRec[gRecs],txt)) gRecs++;               
               }               
#if _GE_VERSION_ >= 133
 
     i = REC_MAX - gRecs;
     SC_MP_GetRecovers(SC_MP_RESPAWN_COOP,&gRec[gRecs],&i);
     gRecs += i;
#endif
               if (gRecs==0) SC_message("no US recover place defined!");

               CLEAR(gRecTimer);

            }// if (info->param1)
         }//if (info->param2)

         if (info->param1)
         {
            //!!! ++ Reinit AI - NEW
            num = 64;
            SC_MP_EnumPlayers(enum_pl, &num, SC_P_SIDE_VC);
            for (i = 0; i < num; i++)
            {
               SC_P_ScriptMessage(enum_pl[i].id, SCM_MP_REINIT, 0);
            }
            //-- Reinit AI - NEW

         }
         break;// SC_NET_MES_LEVELINIT


      case SC_NET_MES_RENDERHUD:

         switch(SC_ggi(GVAR_GPHASE)){

            case GPHASE_DONE:
               j = 1099;
               break;
            case GPHASE_FAILED:
               j = 1049;
               break;

            default:j = 0;break;

         }// switch(SC_ggi(GVAR_GPHASE))

         if (j){
                     
            witxt = SC_Wtxt(j);
            SC_GetScreenRes(&val,NULL);

            val -= SC_Fnt_GetWidthW(witxt,1);

            SC_Fnt_WriteW(val * 0.5f,15,witxt,1,0xffffffff);

         }// if (j)


         break;

      case SC_NET_MES_SERVER_RECOVER_TIME:

         if (info->param2){
               info->fval1 = 0.1f;
         }
         else{
            // killed

            SC_P_GetInfo(info->param1,&plinfo);   
                        
            if (plinfo.side==0){               

               if (gRecoverLimit>0){
                  
                  if (gRecoverTime>=0xffff) info->fval1 = -1.0f;
                  else
                  if (gRecoverTime>0) info->fval1 = gNextRecover;
                     else info->fval1 = 4.0f;                  
               }
               else info->fval1 = -1.0f;
                        
            }
            else info->fval1 = -1.0f;
            
         }

         break;

      case SC_NET_MES_SERVER_RECOVER_PLACE:

         if (info->param1!=0){
            SC_message("No recover for VC");
            break;
         }
         
         precov = (s_SC_MP_Recover*)info->param2;

         i = SC_MP_SRV_GetBestDMrecov(gRec,gRecs,gRecTimer,NORECOV_TIME);
         
         gRecTimer[i] = NORECOV_TIME;
         *precov = gRec[i];
                  
         break;
         

      case SC_NET_MES_SERVER_KILL:


         break;// SC_NET_MES_SERVER_KILL


      case SC_NET_MES_RESTARTMAP:


         CLEAR(gRecTimer);

         gNextRecover = 0.0f;

         gTime = 0;


         gPhase = GPHASE_BEGIN;
         gPhase_timer = 5.0f;
         gPhase_send = 0;

         gValidSide0 = FALSE;

         SC_MP_GetSRVsettings(&SRVset);
         gRecoverTime = SRVset.coop_respawn_time;
         gRecoverLimit = SRVset.coop_respawn_limit;


         gAllNoAiRecover  = 0.0f;
               

         SC_MP_SRV_ClearPlsStats();

         SC_MP_SRV_InitGameAfterInactive();
         SC_MP_RecoverAllAiPlayers();
         SC_MP_RecoverAllNoAiPlayers();         
         

         break;// SC_NET_MES_RESTARTMAP

      case SC_NET_MES_RULESCHANGED:         
         gEndRule = info->param1;
         gEndValue = info->param2;
         gTime = 0.0f;
         break;
         

               
   }// switch(info->message)
   

   return 1;

}// int ScriptMain(void)




Reminder: My Coop mode is...

Coop:
The "classic one" we all know, with...
-Addition of: extra weapons, grenades and bandages...
-The weapons will disappear if you drop them on the ground but...
-Extra weapons will reappear on the map:
To use this feature, set the respawn time in the server "Mode settings".


Thanks for the help!



Intruder
Signaturewww.vietcong.info/portal/images/ranks/Member_of_the_Month1011.pngwww.vietcong.info/portal/images/ranks/Member_of_the_Month_6.png
 
martyr
Intruder wrote:
...The bug:
The first time the players are loading the map, everything is working normaly and as it should. However, once the FIRST bot is killed, it becomes impossible for a (new) player/rejoiner to load the map. The map will crash the game to the desktop at the very end of the loading! But if we "restarmap" the map (> new bots), the players can load and respawn on the map, again...
....
It's still not fixed! Frown
I need to do more tests because the crashes are not consistent now. Sometimes it crashes, sometimes not...


So the current situation is same as beginning but now it only crashes sometimes?

Are you by chance using any of Ando's automatic global variable functionality?
Edited by martyr on 06-11-2019 15:13
Signature________________________________________________________________________

"From every kill grow, from every death learn"
 
http://www.clanofminh.vcclan.net/minh/
Intruder
Indeed...
After to have checked and fixed the mistakes in my scripts, I tested my "light version" of Intrusion (with less objects) and made the same test that will create the crash for sure... I loaded the map, respawned and killed the first bot before to leave for the rejoining, and the map hasn't crashed! So I decided to kill the second bot and the game hasn't crashed at my second rejoining either!
Because I thought the bug was fixed, I decided to re-test my full map version (with all the objects) but the game crashed "as usual"! Damned, so the scripts weren't the problem?!? Let's restart the light version then... And at that moment, after the first vc bot killed, the light version crashed again at the end of the loading!
I don't remember exactly what I made next but I think to have tested all the possibilities of "kills and rejoinings" I could do and concluded I couldn't trust the results of those tests anymore...
The only thing I can note is... The less objects the map has, the more "stable" it seems to be. The "light version" may work or may not but my "full version" will crash for sure. That's why I'm thinking about a certain "limit of something" the game engine can't handled...

Extra info: I made all my tests with a levels and maps folder containing only the map version I was working on.

And no, I haven't used Ando's automatic global variable script(s)...


I still have ideas for more tests to do but as you can see, the task isn't easy to finaly found and fix that damn bug! Angry



Intruder
Signaturewww.vietcong.info/portal/images/ranks/Member_of_the_Month1011.pngwww.vietcong.info/portal/images/ranks/Member_of_the_Month_6.png
 
martyr
Intruder, you are a patient and tenacious man... never give up is what i say :)

I've been reading back through this whole thread from the beginning and decided to try and offer some fresh perspective. Maybe I can spark some new ideas and something new will come to mind to help you with this problem.

But first, I have some preliminary questions. Sorry if they sound stupid...
1. Are you renaming the CBF and DAT files before you play/test or are the names created during finalisation? - I assume the answer is no.
2. Have you replicated the crash while playing in the editor - to see if there is an error message of any kind? - I assume the answer is yes and no there is no error message.

If I assumed correctly, then maybe consider these other ideas. I noticed some clues in your previous comments and they got me thinking again...

Intruder wrote:
when we tested the version where I deleted around 1.000 objects (random number, just for the test, which is huge!) that the bug was GONE!!!

When testing with code, machinery and gaming during my life, I've often found that when I make a big change and it fixes a problem, it might be that only one small part (of the many changes) is actually the problem. So maybe just a few or even just one object is the problem.

Intruder wrote:
Coop and Coop' modes are crashing but the Discovery one is ok.

Very interesting. The only change (as far as I know) in the script for Discovery mode is one function call:
Download source  Code
SC_MP_EnableBotsFromScene(FALSE)


The SDK VietcongScripting.htm file defines this as: This function will enable or disable creation of the AI characters from the player objects in the scene. FALSE by default. The english in this definition is a little confusing but later in the file it confirms it: "...enable or disable AI characters placed in the scene for cooperative modes of the game with the SC_MP_EnableBotsFromScene function.".
So with this in mind, are you still thinking this can only be a problem with objects?

Intruder wrote:
I'm thinking about a certain "limit of something" the game engine can't handle

As i have hinted, my feeling is that this limit is not related directly to a number of objects. More likely to be a particular object or few objects that are somehow linked to a bot script? Or maybe a single object script?

Suggested testing

Well I would be a complete asshole to make these suggestions without having any idea of how to test for them... so here we go. My ideas on testing:

Intruder wrote:
Let's restart the light version then... And at that moment, after the first vc bot killed, the light version crashed again

Do all testing on full version not any light version.

1. To establish if a particular object script is causing the issue, remove any/all of these first and test.

2. Remove bots in groups of 10 - starting with the last 10. Test with each removal. If you can remove them all, does the bug still happen if there are only 3 bots remaining?

3. Run discovery mode and have 3 players join: player A, B and C. Have player A team kill player B then leave the server. Have Player A then rejoin the server. Repeat this test with Player B leaving the server. Repeat this test with Player C leaving the server. Any crash?
Signature________________________________________________________________________

"From every kill grow, from every death learn"
 
http://www.clanofminh.vcclan.net/minh/
Jump to Forum:
Login
Username

Password



Forgotten your password?
Request a new one here.
Render time: 0.19 seconds - 66 Queries 2,656,332 unique visits