Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Неправильное определение количества предметов в контейнерах.

тут можно задать вопрос по скриптингу
Post Reply
Gunter
Neophyte
Neophyte
Posts: 14
Joined: 16.02.2012 18:18

Неправильное определение количества предметов в контейнерах.

Post by Gunter »

Почему-то скрипт по-разному определяет количество удочек, находящихся на лодке, хотя их никто не убирает и никто не добавляет, они просто лежат на лодке на палубе, на лодке в сундуке и у персонажа в бекпаке.
10:32:33:608 [Fishermann]: Character Ololo Connected.
10:32:34:596 [Fishermann]: Compiling
10:32:34:611 [Fishermann]: Compiled succesfully
10:32:35:756 [Fishermann]: UseObject error: Object not found.
10:32:59:929 [Fishermann]: Взял удочку с бэкпака, осталось 0, а всего 57
10:33:29:424 [Fishermann]: Compiling
10:33:29:435 [Fishermann]: Compiled succesfully
10:57:04:512 [Fishermann]: Осталось еды: 416
11:03:27:668 [Fishermann]: Character Ololo Disconnected.
11:03:49:834 [Fishermann]: Character Ololo Connected.
11:03:49:896 [Fishermann]: Взял удочку с бэкпака, осталось 3, а всего 7
11:27:40:951 [Fishermann]: Осталось еды: 415
Количество удочек в контейнерах определяется аналогично - иногда правильно, иногда косячит. Вот кусок скрипта, который проверяет наличие удочек:

Code: Select all

Procedure Change;
var 
chb, chg, chcont : integer;
begin
if not dead then
begin
 CheckSave;
 finddistance:=2;
 chg:=CountGround($0DBF);
 chb:=Count($0DBF);
 chcont:=CountEX($0DBF,$FFFF,PoleBag);
 //AddToSystemJournal('В паке '+inttostr(chb)+' удочек!');
 //AddToSystemJournal('На полу '+inttostr(chg)+' удочек!');
 //AddToSystemJournal('В контейнере '+inttostr(chcont)+' удочек!');
 {CountEx(ObjType,Color: Word; Container: Cardinal): Integer}
 if (chb> 0) and (ObjAtLayer(LhandLayer) <= 0) then
 begin
  findtype ($0DBF, backpack);     {$0DBF - удочка рыболовная}
  Equip(LhandLayer,finditem);
  AddToSystemJournal('Взял удочку с бэкпака, осталось '+inttostr(chb-1)+', а всего '+inttostr(chg+chb+chcont-1)); 
  wait (1000);
 end;
 if (chg> 0) and (ObjAtLayer(LhandLayer) <= 0) then 
 begin
  findtype ($0DBF, ground);       {$0DBF - удочка рыболовная}
  Equip(LhandLayer,finditem)
  AddToSystemJournal('Взял удочку с пола, осталось '+inttostr(chg-1)+', а всего '+inttostr(chg+chb+chcont-1)); 
  wait (1000);
 end;
 if (chcont> 0) and (ObjAtLayer(LhandLayer) <= 0) then
 begin
  findtype ($0DBF, PoleBag);     {$0DBF - удочка рыболовная}
  Equip(LhandLayer,finditem);
  AddToSystemJournal('Взял удочку с контейнера, осталось '+inttostr(chcont-1)+', а всего '+inttostr(chg+chb+chcont-1)); 
  wait (1000);
 end;
 if (chb+chg+chcont)<1 then 
 begin
  AddToSystemJournal('Не нашел удочек! Выхожу... '); 
  checksave;
 end;

end;
Wait(1000);
end;
MuDaCk
Apprentice
Apprentice
Posts: 393
Joined: 10.10.2006 0:03
Contact:

Re: Неправильное определение количества предметов в контейне

Post by MuDaCk »

Code: Select all

 chcont:=CountEX($0DBF,$FFFF,PoleBag);
вот это у меня всегда безотказно показывает точное кол-во предметов. Возможно, особенность сервера(удаляют предметы, которые не перемещаются за промежуток времени etc.)
My name is Игорёшка Image
Пишу скрипты за едуImage
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Неправильное определение количества предметов в контейне

Post by Vizit0r »

CountEx выдает общее кол-во найденных вещей. найденных через FindType.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Gunter
Neophyte
Neophyte
Posts: 14
Joined: 16.02.2012 18:18

Re: Неправильное определение количества предметов в контейне

Post by Gunter »

Видимо я плохо описал суть проблемы.
Суть в том, что:
Если удочка сломалась, идет проверка на наличие удочек в трех контейнерах: бекпак, земля и сундук. Найденную удочку персонаж одевает. Но если был дисконект, то проверка на наличие удочек работает криво. То есть, как видно из примера, сначала нашлось 57 удочек, а потом 7. При этом их общее количество не менялось. Может быть причина в лагах сервера, но мне непончтно, почему команда поиска находит неверные цифры. Может требуется задержка между командами?
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Неправильное определение количества предметов в контейне

Post by Vizit0r »

11:03:49:834 [Fishermann]: Character Ololo Connected.
11:03:49:896 [Fishermann]: Взял удочку с бэкпака, осталось 3, а всего 7
полсекунды с момента коннекта(и то, на самом деле меньше) - это не так уж много, мир мог не успеть прогрузиться полностью - инфа про удочки банально не пришли еще от сервера, вот и не найдено.

Так что пример плохой.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Nearga
Novice
Novice
Posts: 58
Joined: 04.03.2012 22:03
Location: DRW
Contact:

Re: Неправильное определение количества предметов в контейне

Post by Nearga »

+1
11:03:49:834 [Fishermann]: Character Ololo Connected.
11:03:49:896 [Fishermann]: Взял удочку с бэкпака, осталось 3, а всего 7
Согласен, тут поиск удочек начинается почти сразу после коннекта - однозначно весь мир не прогрузился.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Неправильное определение количества предметов в контейне

Post by Vizit0r »

+1 к тому, что я написал перед этим?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Tomers
Novice
Novice
Posts: 99
Joined: 06.08.2009 11:51

Re: Неправильное определение количества предметов в контейне

Post by Tomers »

Могу ошибаться, но для поиска предварительно необходимо открыть контейнер, в котором происходит поиск. При дисконекте открытые сундуки закрываются. Да и не нашел в скрипте(приведенной части) действия по открытию сумок.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Неправильное определение количества предметов в контейне

Post by Vizit0r »

ну, бекпак открывается автоматически
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Gunter
Neophyte
Neophyte
Posts: 14
Joined: 16.02.2012 18:18

Re: Неправильное определение количества предметов в контейне

Post by Gunter »

Tomers wrote:Могу ошибаться, но для поиска предварительно необходимо открыть контейнер, в котором происходит поиск. При дисконекте открытые сундуки закрываются. Да и не нашел в скрипте(приведенной части) действия по открытию сумок.
Спасибо, обязательно добавлю это действие в скрипт!
Post Reply