Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7
как реализовать обмен данными из разных скриптов?
как реализовать обмен данными из разных скриптов?
Есть скрипт на лесоруба. Задаешь начальную точку, с нее начинает поиск деревьев, рубит, запоминает и ищет новые. Работает 3 скрипта одновременно. Как между ними сделать обмен инфы о уже рубленых деревьях?
Из идей пока только обмен через файлы. Считаю это неправильным:)
Надо передавать массив уже рубленных деревьев (тип тайла, х, у, z)
Из идей пока только обмен через файлы. Считаю это неправильным:)
Надо передавать массив уже рубленных деревьев (тип тайла, х, у, z)
Last edited by uzver1234 on 08.11.2011 12:02, edited 1 time in total.
Re: как реализовать обмен данными из разных скриптов?
Новый стелс лежит тут. Стелс это произведение искусства!
Re: как реализовать обмен данными из разных скриптов?
Читал.
Как ты предлагаешь передать массив из 100х4 элементов через SetGlobal?
Re: как реализовать обмен данными из разных скриптов?
Сори, поточнее, можно и так. Но как я понял SetGlobal создает переменную 1, не массив и придется обрабатывать 400 строк на скрипт. В моем случа это 1200 переменных с уникальным именем.uzver1234 wrote:Читал.
Как ты предлагаешь передать массив из 100х4 элементов через SetGlobal?
Re: как реализовать обмен данными из разных скриптов?
да, SetGlobal принемает только строку как возможное значение, что бы массив туда загонять придется присать конвертеры из массива в строку и обратно, к примеру знаком | разделять значения из массива а потом StrBreakApart что бы развернуть обратно
Новый стелс лежит тут. Стелс это произведение искусства!
Re: как реализовать обмен данными из разных скриптов?
Тоже идея, попробую на неделе. Если получиться выложу код.Alex wrote:да, SetGlobal принемает только строку как возможное значение, что бы массив туда загонять придется присать конвертеры из массива в строку и обратно, к примеру знаком | разделять значения из массива а потом StrBreakApart что бы развернуть обратно
Есть ограничение на длину строки?
Re: как реализовать обмен данными из разных скриптов?
Я думаю дабы не забивать память сетглобалом, лучше записывать всю нужную информацию в файл, а потом другим скриптом считывать из этого файла. Написать функцию, которая будет загонять данные из файла в массив.
Всё-таки, сетглобал в таких объемах я бы не рискнул использовать
Всё-таки, сетглобал в таких объемах я бы не рискнул использовать
Re: как реализовать обмен данными из разных скриптов?
Около 20 тысяч символов он переварит без проблем, больше не пробовал но как минимум ограничение может быть порядка 65к символов, но скорее всего и такого нет.
Проблемы могут быть при одновременном изменении глобалки несколькими скриптами - какие то изменения могут потеряться, но думаю пара потерянных тайлов это не проблема. А вот с файлами в этом плане проблем может быть больше.
Чтоб себя хоть как то обезопасить я использовал две таких процедурки:
100% гарантии не дают, но количество коллизий уменьшают в разы, первая вызывается перед использованием глобальных переменных, вторая когда все операции с ними завершены.
Проблемы могут быть при одновременном изменении глобалки несколькими скриптами - какие то изменения могут потеряться, но думаю пара потерянных тайлов это не проблема. А вот с файлами в этом плане проблем может быть больше.
Чтоб себя хоть как то обезопасить я использовал две таких процедурки:
Code: Select all
procedure lock(cs : string);
begin
repeat
wait(randomRange(100, 500));
if (getGlobal('stealth', cs) = '') then
begin
setGlobal('stealth', cs, 'lock');
break;
end;
until false;
end;
procedure unlock(cs : string);
begin
setGlobal('stealth', cs, '');
end;
Re: как реализовать обмен данными из разных скриптов?
Отлично.CFA wrote:Около 20 тысяч символов он переварит без проблем, больше не пробовал но как минимум ограничение может быть порядка 65к символов, но скорее всего и такого нет.
Я не буду использовать 1 переменную. На каждый скрипт свою. Надо чтоб скрипт потом еще тер за собой. Именно свои записи.CFA wrote:Проблемы могут быть при одновременном изменении глобалки несколькими скриптами - какие то изменения могут потеряться, но думаю пара потерянных тайлов это не проблема. А вот с файлами в этом плане проблем может быть больше.
Спасибо за идеи, когда напишу реализацию выложу:)
Re: как реализовать обмен данными из разных скриптов?
Code: Select all
procedure SetA;
var
SL:TStringList;
i:Integer;
begin
SL:=TStringList.Create;
for i:=0 to Length(TMPA)-1 do
SL.Append(TimeToStr(TMPA[i].time)+' '+IntToStr(TMPA[i].tile )+' '+IntToStr(TMPA[i].x)+' '+IntToStr(TMPA[i].y)+' '+IntToStr(TMPA[i].z));
SetGlobal('stealth','TestVar1',SL.Text);
SL.free;
end;
Code: Select all
procedure GetA;
var
List : TStringList;
i : integer;
s : string;
begin
List := TStringList.Create;
List.text:=GetGlobal('stealth','TestVar1');
SetLength(TMPA,1);
for i := 0 to List.Count-1 do begin
s := List.strings[i] + ' ';
TMPA[i].time := StrToTime(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
TMPA[i].tile := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
TMPA[i].x := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
TMPA[i].y := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
TMPA[i].z := StrToInt(Copy(s,1,Pos(' ',s)-1));
Delete(s,1,Pos(' ',s));
end;
end;