Здравствуйте, гость ( Вход | Регистрация )

> Помогите Оптимизировать Скрипт
EL-GReeN
сообщение 25.1.2012, 22:00
Сообщение #1


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Этот скрипт должен выполнятся постоянно с паузой между строк 0 или 1
но в людных местах он со временем виснет, не знаю особенностей пилота поэтому не могу определить узкое место.

Код
//Подобие инжектовского InJournal, в массиве %journal хранятся последние 100 сообщение
set %journal[100]
:re
set $tmp lastmsg
if ($tmp != %journal[1]) //если последнее сообщение не равно последнему в массиве значит это новое сообщение
for #a 1 99 1 //сдвиг всего массива на 1
set %journal[#a+1] %journal[#a]
end_for
set %journal[1] $tmp
end_if
goto re


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
EL-GReeN
сообщение 13.2.2012, 16:11
Сообщение #2


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Снова все переделал работает еще быстрее, но появилась ошибка при обращении к массиву из другого скрипта2, такая же как на скрине выше конкретно на этой строке:
set #asd PosEx($mess %j.9[#a]) //если нашлось сообщение
при том не сразу и скрипт может проработать несколько минут
скрипт1

Код

set priority 0
set linedelay 0
set %j[10]
set #if2 1
:re
readmem #if1 0xCE3228 d //чтение указателя 1
if (#if1 != #if2) //если адреса не равны значит есть новое сообщение
readmem #decCount #if1 d             //чтение указателя 2
readmem $lmess #decCount s 120       //чтение сообщения
for #a 1 9 1 //сдвиг всего массива на 1
    set #b #a + 1
    set %j[#a] %j[#b]
    //set logging %j[#a]
end_for
set %j[10] $lmess
end_if
set #if2 #if1
goto re


скрипт2

Код

//что то делаем и нужно ждать пока не появится сообщение о том что готово
set $mess All kill please
gosub waitmess
end_script

:waitmess //$mess
//set %j[10]
start_script 0
set #tmp linedelay
set linedelay 0
set #asd 0
:rere123
for #a 1 10 1              //перебор всего массива
    //if (#avl.0 = 1) //pause_script 0
    set #asd PosEx($mess %j.0[#a]) //если нашлось сообщение
    //end_if //resume_script 0
    if (#asd > 0)
       stop_script 0
       goto next123
    end_if
end_for
goto rere123
:next123
set linedelay #tmp
return



--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения



Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 18.7.2025, 10:44
Designed by Nickostyle