Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
Мувер
Re: Мувер
if (tsfDoor in FlagSet) and (TCharacter(fCharObj).Dead or OpenDoor) then
begin
if (not TCharacter(fCharObj).Dead) and OpenDoor then
BlockingItem.DoorID := ObjectInfo^._ID;
end;
по флагу определяет.
там код так переплетен, что надо будет половину стелса выкладывать)))
begin
if (not TCharacter(fCharObj).Dead) and OpenDoor then
BlockingItem.DoorID := ObjectInfo^._ID;
end;
по флагу определяет.
там код так переплетен, что надо будет половину стелса выкладывать)))
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Мувер
Флаг, как я понял, дает какой-нибудь аналог IsWorldCellPassable?Vizit0r wrote:по флагу определяет.
Чет OpenDoor как процедура числится
Что это означает?function StepQ(Direction : Byte; Running : Boolean) : Integer
256 - Была предпринята попытка открыть дверь, и чар развернулся в нужном направлении.
///
Re: Мувер
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;
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Мувер
Все равно OpenDoor мог бы возвращать true, если была предпринята попытка открыть дверь. Зачем это? Если чар встал, но двери перед ним нет, нужно же выполнять другие проверки на проходимость. А как я узнаю, что дверь действительно была виновником? Делать еще один шаг после OpenDoor?
Пока что я сделал так:Где FindDoor:
Пока что я сделал так:
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;
///
Re: Мувер
OpenDoor это серверный макрос - стелс шлет пакет на сервер, а тот уже пробует открыть дверь, результат стелсу не возвращается.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Мувер
Допустим, я забиваю очередь шагов StepQ. Как они отсылаются на сервер? По некому таймеру?
Есть ли какой-нибудь еще способ вычислить, что персонаж закончил движение, не сравнивая (GetX(Self) = PredictedX) and (GetY ...?
Есть ли какой-нибудь еще способ вычислить, что персонаж закончил движение, не сравнивая (GetX(Self) = PredictedX) and (GetY ...?
///
Re: Мувер
со stepq все сложно - они шлются пачкой, без ождиания ответа на предыдущие.
нет.
нет.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Re: Мувер
Ага, но мувер я уже передал на StepQ. Быстрее ведь и сам вопрос с дверями решает Я думал, если слать не по таймеру спидхак получится в случае отсутствия как-либо проверок на сервере.Vizit0r wrote:со stepq все сложно - они шлются пачкой, без ождиания ответа на предыдущие.
нет.
///
Re: Мувер
по таймеру конечно. только без ожидания ответа на предыдущий шаг.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".