Просмотр полной версии : вопрос: передача данных между скриптами.
nezabudkin
22.04.2008, 13:45
Вот интересно, а есть ли какой-нибудь механизм передачи данных или параметров между скриптами?
Пример: нужно передать переменную из скрипта_a в скрипт_b. как ?
В пакетхаке штатной функции или переменной такой нету...
Можно через файл, но это жесть :)
Наверное, можно через форму, но я х.з. как это сделать...
Можно дописывать данные в какой-нить пакет, например в начало пакета, или в конец, а потом убирать их, но тогда не совсем понятно, чего с длинной пакета делать? Да и не удобно так делать...
Или имеется хорошее и красивое решение проблемы?
еще варианты - объединить скрипты или через буфер обмена наверное еще можно))
Пока только мысль с Pck приходит. он один для всех. ну еще и Buf.
nezabudkin
22.04.2008, 15:13
Пока только мысль с Pck приходит. он один для всех. ну еще и Buf.
Ты имеешь ввиду загнать нужные данные в buf, и тогда в следующем по порядку скрипте можно будет эти данные прочитать?
Надо попробовать!
NLObP, nezabudkin, с buf непрокатит, он непередаётся между скриптами
собсно и смысл данного действия неясен
ИМХО через Say2 замаскировав под базар, лично я так делал =)
ИМХО через Say2 замаскировав под базар, лично я так делал =)
Покажи кучочек скрипта, плиз, можно в теме "Полезные функции".
if FromServer and (ConnectName=PPbafer) and (pck[1]=#$4A) and (ReadD(6)=s)
then begin i:=10;
if ReadS(i)=BuffHunter then //say('iaa!!! Iieo?eeinu');
begin
if ReadS(i)='афф' then begin buf:=#$04;
WriteD(TargetID);
WriteD(tx);
WriteD(ty);
WriteD(tz);
buf:=buf+#$00;
SendToServerEx(PPbafer);
Timer1.Enabled:=True;
end;
if ReadS(i)='офф' then begin buf:=#$09;
SendToClientEx(PPbafer);
end;
end;
end;
где S константа чата :) ну тут всё понятно (с) QaK
Добавлено через 1 минуту
ну месагу как отправить когда что то надо думаю проблем нет?
NLObP, nezabudkin, с buf непрокатит, он непередаётся между скриптами собсно и смысл данного действия неясен
спорно...
сверх в низ по списку переменная PCK - проходит еще как.. в первом скрипте по списку если ее отмодерить(при определенном значении)- а в последнем убить (при определенном значении) то в можно с ее помощью передать значения какието между скриптами..
я ето тестил 2-мя скриптами.. в начале и в конце списка шмфровал и дешифровал трафик.. переменную PCK дешифрировал а потом шифровал в конце списка..
почему бы и нет?
но имхо велосипед какойто.. зачем ето надо? хотя в теории возможно..
Тоже задавался таким вопросом.
Объясню, для чего это может быть нужно:
Если написать самый первый скрипт, который читает статы чара, мобов вокруг и т.д., все, что может понадобиться. То в другие скрипты можно просто передавать эти данные. Таким образом, уменьшается количество дублирования кода (не надо в каждом макросе писать один и тот же обработчик для сохранения нужных данных) и увеличивается производительность, т.к. обработка этих пакетов будет производиться всего один раз на пакет, а не в каждом скрипте по новой.
Если к этому еще была бы возможность подключать в скрипте другие скрипты (аналог uses в делфи), было бы вообще супер, можно было бы разбор переданных данных описать в одном макросе и вызывать там где нужно.
Так что, если бы разработчики добавили такую функциональность в движок phx, было бы супер.
З.ы. особой сложности в этом не вижу.
lexayar, узай длл пишутся в дельфе, вызываются в скрипт хотя лично я не понимаю когда написал сбор данных в бинарнике то нах вообще скрипты. =)
lexayar, узай длл пишутся в дельфе, вызываются в скрипт хотя лично я не понимаю когда написал сбор данных в бинарнике то нах вообще скрипты. =)
Тогда вопрос, в длл при этом будет передаваться TPluginStruct ?
К тому же ДЛЛ решит только проблему с подключением модулей (из тех, которые я описал), да и не очень это удобно, ИМХО.
Конечно круче было бы все писать в ДЛЛ (в плане возможностей), но на то скрипты и предназначены, чтобы упрощать разработку простой функциональности.
Если к этому еще была бы возможность подключать в скрипте другие скрипты (аналог uses в делфи),и так можно
К тому же ДЛЛ решит только проблему с подключением модулей (из тех, которые я описал), да и не очень это удобно, ИМХО.с фигали неудобно-то? Та же фигня, только с боку =) + функционал разширяется огого, по сравнению со скриптами.
и так можно
с фигали неудобно-то? Та же фигня, только с боку =) + функционал разширяется огого, по сравнению со скриптами.
В том то и дело, что сбоку, а сбоку не удобно:) Про функционал я писал что прибавляется, но для мелких задач (а таких большинство), удобнее скриптом писать.
Чтоб что то в длл подправить, надо делфи запускать, компилять и т.д., особенно если несколько клиентов игры запущено, и без этого все тормозит:)
Да и еще, для полноценной работы в длл нужно как то передать объект TPluginStruct, и события, как это сделано в плагинах к пакетхаку. С событиями проще, но нужно все это ручками сейчас в макросе вызывать.
Могу ошибаться, не проверял, но сомневаюсь, что сейчас все это передается в ДЛЛ.
и так можно
Так то можно, но копи пастом в каждом скрипте заниматься задолбывает.
Почти в каждом скрипте нужна база инвентаря, статы чара, иногда мобов вокруг. Ну и функции для работы с ними. Вспомогательные Функции: пауза, сообщения и т.д.
Могу ошибаться, не проверял, но сомневаюсь, что сейчас все это передается в ДЛЛ.ты ошибаешься, все прекрасно передается в плугин =) а вообще после внедрения возможности нормального присобачивания плугинов скрипты ИМХО свое отжили ...
неулавливаю суть проблемы - почему такие сложности при передачи переменных между скриптами? ну прочтите же fs.rtf
вот пример:
scr1.txt
var
Buffer : integer;
procedure Init;
begin
Buffer :=1;
end;
begin
end.scr2.txt
uses 'Scripts\scr1.txt';
var
res : integer;
procedure Init;
begin
res := Buffer;
end;
begin
end.
проверте - при запуске во втором скрипте res = 1;
QaK, Мы о разных вещах сейчас говорим, речь шла не о плагине, а о вызове функций реализованных в dll из скрипта, чтоб хранить в dll данные. Про плагины я вкурсе, что туда все передается.
Добавлено через 59 секунд
PanAm, Спасибо, то что надо. Если будет работать, то супер. Реально просто запарило копировать кучу кода в скриптах, когда основная функциональность при этом малую часть занимает.
Мы о разных вещах сейчас говорим, речь шла не о плагине, а о вызове функций реализованных в dll из скрипта, чтоб хранить в dll данные. брр, экая ересь ... надо быть проще - и люди к тебе потянутся ...
брр, экая ересь ...
Не я это предлагал, я просто написал, что это не очень удобно. Про плагины разговора не было, это отдельный вопрос.
В общем разговор уже ни о чем, вопрос решен, думаю тему стоит закрыть уже.
Довольно давно в пакетхаке есть функция для вызова функции из другого скрипта с возвратом результата
function CallSF(ScriptName:String;FunctionName:String;Param s:array of variant):variant
пример использования
//getvars.txt
function getVar (s: string; i: integer): variant;
const x = 5;
begin
Result := 'ваш '+ s +' = '+ IntToStr (i * x);
end;
begin end.
//myscript.txt
procedure Init;
var res: variant;
begin
res := CallSF ('getVars', 'getVar', ['SP', 10]);
sendMSG(res);
end;
begin end.
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot