Page 1 of 1

нужна помощь с глобальными переменными

Posted: 02.07.2009 17:54
by alpi
Всем привет! Несказанно рад как возобновлению работы форума, так и тому, что теперь можно не напрягая Visitor'a, спросить мнения и совета у других участников форума.
Пожалуйста, помогите неофиту в устранении ошибок и оптимизации скриптов :) что мог сделал, но дальше не хватает знаний
Столкнулся с проблемой при использовании глобальных переменных между примерно 10-14 аккаунтами.
Есть два скрипта : первый запущен на ~10 чарах и ищет плееров по типу в заданном радиусе. Если находит - через глобальную переменную передает во второй скрипт, который передает сообщение о нахождении персонажа в эфир.
Проблема в том, что передается далеко не все и не всегда. То есть чар находится в первом скрипте, но второй скрипт не получает переменную. Подозреваю, что что-то напутано с задержками, пробовал по-разному, но не особо помогло...
этот скрипт запущен на "сателитах"

Code: Select all


      
   while (timer < timec + min) do
    begin 
     for i := 0 to 3 do
      begin
        tmp_obj := FindType(findinfo[i].id,ground);
		 wait(20);
		  res := GetGlobal('stealth','reset?');
           if (tmp_obj <> 0) and (res = 'no') then begin
                               SetGlobal('stealth',findinfo[i].var_name+myname,GetName(tmp_obj));
                                SetGlobal('stealth',myname+'_findmsg','1');
                                 AddToSystemJournal('найден(а) '+GetName(tmp_obj));
                                  Ignore(tmp_obj);
                                   tmp_obj := 0;
                                    wait(300);
                               end
         else begin SetGlobal('stealth',findinfo[i].var_name+myname,''); Ignore(tmp_obj); wait(100); end;
      end;
     

    end; 
  until false;
end.
этот скрипт передает сообщения в эфир

Code: Select all

   for i := 0 to 12 do 
    begin 
   
     location := GetGlobal('stealth',SPY[i]);
	  wait(10);
	  
	  chr_name := GetGlobal('stealth','man_'+SPY[i]);
	   if (chr_name <> '') then begin UOSay(Chr(39)+'asay Обнаружен '+chr_name+' в '+location); SetGlobal('stealth','reset?','yes'); wait(30); chr_name := ''; end
		else begin SetGlobal('stealth','reset?','no'); wait(20); end;
	  chr_name := GetGlobal('stealth','woman_'+SPY[i]);
	   if (chr_name <> '') then begin UOSay(Chr(39)+'asay Обнаружена '+chr_name+' в '+location); SetGlobal('stealth','reset?','yes'); wait(30); chr_name := ''; end
	    else begin SetGlobal('stealth','reset?','no'); wait(20); end;
	  chr_name := GetGlobal('stealth','portal_'+SPY[i]);
	   if (chr_name <> '') then begin UOSay(Chr(39)+'asay Открыт портал в '+location); SetGlobal('stealth','reset?','yes'); wait(30); chr_name := ''; end
	    else begin SetGlobal('stealth','reset?','no'); wait(20); end;
	  chr_name := GetGlobal('stealth','ghost_'+SPY[i]);
	   if (chr_name <> '') then begin UOSay(Chr(39)+'asay Обнаружен призрак '+chr_name+' в '+location); SetGlobal('stealth','reset?','yes'); wait(30); chr_name := ''; end
	    else begin SetGlobal('stealth','reset?','no'); wait(20); end;

end;
 
end.
Киньте свежим взглядом кто поопытнее меня будет пожалуйста :roll:
Буду рад любым комментариям/указаниям.

Posted: 19.07.2009 7:47
by MAKAPEBu4
Начни с "калиграфии" в коде.

Code: Select all

if (chr_name <> '') then begin UOSay(Chr(39)+'asay Обнаружен '+chr_name+' в '+location); SetGlobal('stealth','reset?','yes'); wait(30); chr_name := ''; end 
      else begin SetGlobal('stealth','reset?','no'); wait(20); end; 
Можна записать как

Code: Select all

if (chr_name <> '') then
begin
  UOSay(Chr(39)+'asay Обнаружен '+chr_name+' в '+location);
  SetGlobal('stealth','reset?','yes');
  wait(30);
  chr_name := '';
end else
begin
  SetGlobal('stealth','reset?','no');
  wait(20);
end;
Понятно, что в первом случае можна секономить уйму бамаги, но во втором все будет намного читабельнее ИМХО
Продолжи, тем что перестань забивать постоянно в глобальную переменную что либо, ее желательно трогаль в случаях когда это нужно делать. В приведенном примере у тебя в любом случае что-то пишется в глобальную, как и во многих других частях кода.
И закончи размышлениями, почему тебе кто-то должен помогать делать скрипт и быть добрым по отношению к тебе, если ты в замен никакого добра не приносишь? Как вариант готовый скрипт.
Или если пощитаеш это слишком грубым или нетактичным, слишком наглым или навяжчивым тогда перефразирую... Карнитки нифига не видно по твоим кускам кода, но в целом описал "возможную" проблему.

Posted: 20.07.2009 10:40
by Vizit0r
alpi, забыл как тебя в асе зовут - стукнись втам еще раз

Posted: 20.07.2009 17:14
by alpi
MAKAPEBu4 wrote:Начни с "калиграфии" в коде.
Понятно, что в первом случае можна секономить уйму бамаги, но во втором все будет намного читабельнее ИМХО
В данном скрипте мне удобнее так было записать. Пожалуйста, давай без банальных истин и ЦУ.
MAKAPEBu4 wrote:Продолжи, тем что перестань забивать постоянно в глобальную переменную что либо, ее желательно трогаль в случаях когда это нужно делать. В приведенном примере у тебя в любом случае что-то пишется в глобальную, как и во многих других частях кода.
Именно так. пока не придумал, как это обойти. Дело в том, что у меня опрашивается глобальная переменная в цикле, и если ее не обнулить - то постоянно выдается результат.
MAKAPEBu4 wrote:И закончи размышлениями, почему тебе кто-то должен помогать делать скрипт и быть добрым по отношению к тебе, если ты в замен никакого добра не приносишь? Как вариант готовый скрипт.
поищи по форуму, вдруг что-то да увидишь. И закончи размышлениями: а зачем я столько написал, если я ничем не помог?
MAKAPEBu4 wrote: Или если пощитаеш это слишком грубым или нетактичным, слишком наглым или навяжчивым тогда перефразирую... Карнитки нифига не видно по твоим кускам кода, но в целом описал "возможную" проблему.
это что ? :)
Vizit0r wrote:alpi, забыл как тебя в асе зовут - стукнись втам еще раз
ок