Первые успехи

Вместо эпиграфа - "Да уже что-то получилось!".
А именно игрок может зарегистрироваться, и пройти тестовый лабиринт "Подвал старейшины".

Ну про саму ссылку на тестовый лабиринт было ранее,

Для использования шаблонов пришлось написать кой-какой код, для замены переменных в тексте.

if (!strcmp(params->Branch("action")->Char(),"getmap"))
{
/* запрос на карту в окресностях игрока */
int mazeid = userList[userid].mazeid;
char *map = new char[SEE_RADIUS*10]; /*не очень гут, но на первое время пойдет*/
bool ok=packMap(mazeid,userList[userid].x,userList[userid].y,map); //упаковываем карту
if (ok)
{
char *temp = new char[strlen(map)+30];
sprintf(temp,"http_done=1|http_data=error|0|mapdata|%s|",map);//отсылаем во Flash
out=temp;
delete [] temp;
}
else out=makeFlashError("Ошибка данных");
delete [] map;
}
else
if (!strcmp(params->Branch("action")->Char(),"init"))
{
/* первичная иницилизация данных, передаем размеры лабиринта и положение игрока */
/* думаю, также передавать сразу и кусочек карты */
int mazeid = userList[userid].mazeid;
int w,h;
int r=getMaze(mazeid,NULL,&w,&h);
if (r==0)
{
char temp[512];
sprintf(temp,"http_done=1&http_data=error|0|mapsize|%d,%d|heropos|%d,%d|",w,h,userList[userid].x,userList[userid].y);
out=temp;
}
else
if (r==-1) out=makeFlashError("Ошибка данных");
else out=makeFlashError("Неизвестная ошибка");
}
else
if (!strcmp(params->Branch("action")->Char(),"enter"))
{
int mazeid=0;
if (userList[userid].mazeid)
{
mazeid = userList[userid].mazeid;
}
else
{
if (!strcmp(params->Branch("mazeid")->Char(),"new_test_arena"))
{
char data[7];
makeMaze(STD_LABIRINT_WIDTH,STD_LABIRINT_HEIGHT,&mazeid,NULL,-1,-1,data);
mazeList[mazeid].lastTime = time(0);
mazeList[mazeid].currentId = -1;
TMazeCreature c;
c.Type = 0;
c.Id = userid;
c.x = data[2];
c.y = data[3];
c.HP=1;
mazeList[mazeid].creatures.push_back(c);
userList[userid].x = c.x;
userList[userid].y = c.y;
}
/* тут конечно проверка что игрок может попасть в лабиринт, но это будет позднее*/
else mazeid=params->Branch("mazeid")->Integer();

activeMaze.insert(mazeid);
}
char buffer[128];
sprintf(buffer,"redirect/maze?mazeid=%d",mazeid);
out=buffer;
userList[userid].mazeid = mazeid;
}
else
{
if (!userList[userid].mazeid) out="redirect/game";
else
{
string s=loadTemplate("maze");
map_as_hash h;
char temp[30];
sprintf(temp,"%d",userList[userid].mazeid);
h["MAZEID"] = temp;
sprintf(temp,"%d",userid);
h["USERID"] = temp;
h["SESSIONID"] =session;

char *so;
patternProcessing((char*)s.c_str(),h,&so); /* Делаем замену переменных mazeid,userid и sessionid */
out=so;
delete [] so;
}
}

Что еще, ах да, во Flash я решил отказаться от передачи переменных явно, как-то не нравился этот способ, теперь передаю - специальные данные, которые хоть и надо парсить, зато можно передавать сразу несколько команд.

Собираюсь на днях, запустить тестовый сервер, уже начал компилить под Linux, но ошибок оказалось тьма, сижу разбираюсь.