Мувер
Posted: 03.09.2015 22:00
Как стандартный мувер определяет, что перед ним дверь? Ищет, если не удалось шагнуть? Можно ли вообще увидеть код мувера (new который)? 

Флаг, как я понял, дает какой-нибудь аналог IsWorldCellPassable?Vizit0r wrote:по флагу определяет.
Что это означает?function StepQ(Direction : Byte; Running : Boolean) : Integer
256 - Была предпринята попытка открыть дверь, и чар развернулся в нужном направлении.
GetTileFlags, ConvertIntegerToFlags etcФлаг, как я понял, дает какой-нибудь аналог IsWorldCellPassable?
потому что это скриптовая функция. А кусок, что я тебе скинул - из потрохов стелса, где OpenDoor - булевый параметр той процедуры, где проверяется проходимость точки.Чет OpenDoor как процедура числится
Что это означает?
Code: Select all
// если после трёх попыток дверь осталась на месте, считаем что она залочена.
if (SinDoorID <> $0) and (i >= 3) then
begin
MoverMessage('It seems door is locked.');
Script_SetBadLocation(ToX, ToY);
Exit(-2); // нельзя пройти
end;
Code: Select all
case Step(Dir, Stam > 5) of
1: sync;
5: begin
if (not Dead) and FindDoor(MovePoints[i].X, MovePoints[i].Y) then begin
OpenDoor;
sync;
continue;
end;
if OnCantStep <> nil then
if OnCantStep() then continue;
SetBadLocation(MovePoints[i].X, MovePoints[i].Y);
break;
end;
7: if OnStep <> nil then
if not OnStep() then exit;
else
break;
end;
Code: Select all
function FindDoor(X, Y: integer):boolean;
var
t: word;
begin
while FindAtCoord(X, Y) > 0 do begin
t:= GetType(FindItem);
if (t >= $0675) and (t <= $06F6) then begin
result:= true;
exit;
end;
Ignore(FindItem);
end;
end;
Ага, но мувер я уже передал на StepQ. Быстрее ведь и сам вопрос с дверями решаетVizit0r wrote:со stepq все сложно - они шлются пачкой, без ождиания ответа на предыдущие.
нет.