Реализация сундуков

Сделал реализацию открытия сундуков.

На клиенте

var sunduk = _root.maybeOpen(tx,ty);
if (sunduk && dx<=1 && dy<=1)
_root.openChest(tx,ty);

Функция maybeOpen - просто проверяет что на карте в (x,y) находиться сундук (открытый или закрытый), а функция openChest - посылает на сервер сигнал open_chest.

На сервере

case ACT_OPEN_CHEST:
{
int dx = c->x - p1;
int dy = c->y - p2;
if (dx<0) dx=-dx;
if (dy<0) dy=-dy;
if (dx>1 || dy>1) return false;//very far
TMazeObject *chest = getObjectByPos(m,p1,p2);
if (chest)
if (chest->type==MAZE_OBJ_CHEST || chest->type==MAZE_OBJ_OPEN_CHEST)
{
chest->type=MAZE_OBJ_OPEN_CHEST;
int cc=0,dd=0,ee=0;
int *a[]={&cc,&dd,&ee,NULL};
for(int j=0,i=0;i<OBJ_MAX_DATA;i++)
{
if (chest->data[i]) *a[j++]=chest->data[i];
if (a[j]==NULL) break;
}
createNewAction(m,ACT_OPEN_CHEST,c->Id,p2*m->w+p1,cc,dd,ee);
}
}

Вообще подумываю сделать тип у action'а приватный или публичный, что бы приватные доставлялись только конкретным игрокам, т.к. в данном примере пока содержимое сундука придет всем игрокам, конечно на Flash будет фильтрация кто открыл - тому и показывается, но можно перехватить.

И снова на клиенте
В функции playAction

if (type_act == 0x42) //open chest
{
var cid=toint(data_act[0]);
var off=toint(data_act[1]);
if (map[off]==0x27)
{
map[off] = 0x28; // open_chest
need_drawmap=true;
need_makemap=true;
}
if (cid==_root.userid)
{
///выводим окно сундука
}
}

Осталось реализовать вывод предметов и возможность их собирать, также контролировать при проигрывании события next_turn закрывать окно сундука, т.е. когда истечет время хода экран сундука принудительно закроется.

Лабиринты зыби - подвал старосты и сундук с сокровищами

Комментарии

Отличный материал.

Любопытная статья получилась у вас. Добавил Ваш сайт в закладки. Редко попадаются действительно интересные сайты на которых можно встретить столько интересных, полезных и весьма неплохих мыслей, над которыми можно задуматься или применить их на деле. Даже сейчас, после просмотра, в тот момент, когда пишу комментарий, я задумался, о тех вещах, смысл которых мне теперь по другому видится.