Вернуться   CoderX :: Forums > Другие игры > Aion
Войти через OpenID

Aion Форум посвященный игре Aion

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 25.10.2011, 04:47   #1
Новичок
 
Аватар для Pocuk
 
Регистрация: 25.10.2011
Сообщений: 17
Сказал Спасибо: 7
Имеет 0 спасибок в 0 сообщенях
Pocuk пока неопределено
Смех Скрипт

Всем привет. У меня несколько нубских вопросов по поводу скриптов:
1) как зациклить скрипт? вход в цикл по приходу пакета с клиента и выход по приходу дрогого пакета тоже с клиента.
например:
Код:
begin
if FromClient and (pck=HStr('<пакет запуска цикла>'))
then
<теперь надо запустить цикл и не выходить пока клиент не выдаст другой пакет. Пакеты ето просто действия для запуска и окончания его работы.>
end.
2) как поделить одно значение на другое и сравнять с третьим(уже заданым и задать его как?)?
пример:
Код:
Aa:integer;
Bb:integer;
Cc:integer;
....
begin
Cc := <число>;
Aa := ReadD(12);
Bb := ReadH(20);
if Aa / Bb <= Cc then
begin
...
поделиться оно вообще или нет? у меня именно 4х байтовое значение надо делить на 2х байтовое и сравнить с 4х байтовым.

Делаю первый скрипт, не судите строго

Последний раз редактировалось Pocuk, 25.10.2011 в 04:49.
Pocuk вне форума   Ответить с цитированием
Старый 25.10.2011, 11:29   #2
Местный
 
Аватар для Nickers
 
Регистрация: 23.11.2009
Сообщений: 574
Сказал Спасибо: 134
Имеет 117 спасибок в 82 сообщенях
Nickers пока неопределено
По умолчанию

Pocuk,
Цитата:
как зациклить скрипт?
Цитата:
как поделить одно значение на другое и сравнять с третьим(уже заданым и задать его как?)?
delphi Код:
Const   X=666; //Постоянное значение Var   Timer01 : TTimer;   Y, Z : Integer; Procedure Init; //Выполняется при запуске скрипта. begin  Timer01:=TTimer.Create(nil);  Timer01.OnTimer:=@OnTimer01; //Назначаем выполняемое тело таймера.  Timer01.enabled:=false; //Начальное положение (Выключено)  Timer01.interval:=2000; //Интервал в мс (2000 = 2с.) end; Procedure Free; begin   Timer01.Free; //Освобождаем память из под таймера end; Procedure OnTimer01; //Тело Timer01 (Запускается раз в Timer01.interval) begin //Выполняется каждые 2секунды вне зависимости от пакета #$12   if ((X/Y)=Z) then Y:=X;    end; begin     //Если приходит пакет ID:12 то запускает таймер. (От клиента)     if FromClient and (pck[1]=#$12) then     begin       Timer01.enabled:=true;       Z:=ReadD(10); //Из каждого пакета #$12 забираем нужные значения.       Y:=ReadD(14);     end;     //Если приходит пакет со 2м значением, равным 7ми вырубаем таймер     if FromServer and (ReadD(2)=7) then Timer01.enabled:=false;     //(От Сервера) end.

Добавлено через 8 минут
Цитата:
у меня именно 4х байтовое значение надо делить на 2х байтовое
Если они числа, то при переводе в десятичную систему, это только говорит о том, что 4х байтное число может принимать большие значения.
__________________
Пишу что думаю, но ничего не знаю...
[LameGuard|Скрипты l2phx]

Последний раз редактировалось Nickers, 25.10.2011 в 11:29. Причина: Добавлено сообщение
Nickers вне форума   Ответить с цитированием
За это сообщение Nickers нажился спасибкой от:
Старый 26.10.2011, 03:13   #3
Новичок
 
Аватар для Pocuk
 
Регистрация: 25.10.2011
Сообщений: 17
Сказал Спасибо: 7
Имеет 0 спасибок в 0 сообщенях
Pocuk пока неопределено
Печаль

Большое спасибо! потестирую и отпишусь.

UPD: скрипт зависает на:
Код:
    begin
      Timer01.enabled:=true;
вибывает ошибку сам л2пх - Access violation at address 132A61E9 in module 'l2ph.exe'. Read of address 00000000.
(игра не зависает) но л2пх не реагирует ни на что, спасает быстрое нажатие ОК и выключение скрипта.
Может проблема в том что Procedure Free; не задействовали?

Добавлено через 12 часов 15 минут
сильно упростил скрипт ради интереса и он перестал выдавать ошибку, но и функцию свою не исполняет:

Код:
...
Procedure OnTimer01; //Тело Timer01 (Запускается раз в Timer01.interval)
begin //Выполняется каждые 2секунды вне зависимости от пакета запуска таймера.
         //отправляем пакет 'EE FF' (На сервер)
         buf:=HStr('EE FF');
         SendToServer;
         pck:='';
end;
begin
    //Если приходит пакет 'AA BB' то запускает таймер. (От клиента)
    if FromClient and (pck=HStr('AA BB')) then Timer01.enabled:=true;
    //Если приходит пакет 'CC DD' то вырубаем таймер. (От клиента)
    if FromClient and (pck=HStr('CC DD')) then Timer01.enabled:=false; 
end.
я думаю после прихода АА ВВ от клиента должен отправляться на сервер EE FF каждие 2 сек. но ето не работает.

Последний раз редактировалось Pocuk, 26.10.2011 в 03:16. Причина: Добавлено сообщение
Pocuk вне форума   Ответить с цитированием
Старый 26.10.2011, 03:50   #4
Местный
 
Регистрация: 11.06.2010
Сообщений: 644
Сказал Спасибо: 119
Имеет 85 спасибок в 77 сообщенях
dyh9l пока неопределено
По умолчанию

поновее ПХ юзать
__________________
dyh9l вне форума   Ответить с цитированием
Старый 26.10.2011, 13:41   #5
Новичок
 
Аватар для Pocuk
 
Регистрация: 25.10.2011
Сообщений: 17
Сказал Спасибо: 7
Имеет 0 спасибок в 0 сообщенях
Pocuk пока неопределено
По умолчанию

полазил по форуму, нашол тему http://coderx.ru/showthread.php?t=119
заменил SendToServer; на SendToServerEx(ConnectName);
заработало... только спрощенный скрипт заработал, основной еще нет

л2пх юзаю 170 версию

UPD: основной скрипт дальше выдает ошибку, думаю связано ето с вычислениями, а именно - мне надо в Procedure OnTimer01; (в цикле проще говоря) сделать постояную отсылку пакетов на сервер, после чего проверять что пришло с сервера, если ето нужний пакет тогда с него читаем:
Код:
Aa:integer;
Bb:integer;
Cc:integer;
Cc := <число>;
...
Procedure OnTimer01;
begin
buf := HStr(Хх);
SendToServerEx(ConnectName);
pck:='';
if FromServer and (pck[1]=#$00) then
    begin
    Aa := ReadD(12);
    Bb := ReadH(20);
    if ((Aa/Bb)=Сс) then
       begin
       Kill
       end;
    end;
end;
...
так вот опять вопрос - как записать ето <число> "Сс"?? у меня "Аа" будет иметь например такой вид - 00 48 E8 01 (DWord - 32000000), "Bb" - 10 00 (DWord - 16) и мне надо поделить "Аа" на "Bb" (мне наперед известно что всегда выйдет целое число) и сравнять с "Сс". Чтобы скрипт делал ето как if ((32000000/16)=<число>) then ...

UPD2: с числами разобрался, проблема не в них, а гдето в коде:
Код:
...
Procedure OnTimer01;
begin
buf := HStr(Хх);
SendToServerEx(ConnectName);
pck:='';
if FromServer and (pck[1]=#$00) then
    begin
    Aa := ReadD(12);
    Bb := ReadH(20);
    if ((Aa/Bb)=Сс) then
       begin
       Kill
       end;
    end;
end;
...
а именно "if FromServer and (pck[1]=#$00) then" не работает, но
Код:
buf := HStr(Хх);
SendToServerEx(ConnectName);
pck:='';
работает.

Добавлено через 9 часов 40 минут
что то мне подсказывает что надо второй цикл для "if FromServer and (pck[1]=#$00) then"

Последний раз редактировалось Pocuk, 26.10.2011 в 13:41. Причина: Добавлено сообщение
Pocuk вне форума   Ответить с цитированием
Старый 26.10.2011, 15:56   #6
Местный
 
Аватар для Pinko
 
Регистрация: 31.05.2011
Сообщений: 130
Сказал Спасибо: 287
Имеет 23 спасибок в 22 сообщенях
Pinko пока неопределено
По умолчанию

Код:
...
Procedure OnTimer01;
begin
buf := HStr(Хх);
SendToServerEx(ConnectName);
pck:='';
end;
begin
if FromServer and (pck[1]=#$00) then
    begin
    Aa := ReadD(12);
    Bb := ReadH(20);
    if ((Aa/Bb)=Сс) then
       begin
       Kill
       end;
    end;
end;
...
как то так
__________________
Никого нельзя ничему научить,
но всему можно научиться

народная мудрость

"Если любишь в жизни риск - форматируй жесткий диск!"
Pinko вне форума   Ответить с цитированием
За это сообщение Pinko нажился спасибкой от:
Старый 27.10.2011, 03:41   #7
Новичок
 
Аватар для Pocuk
 
Регистрация: 25.10.2011
Сообщений: 17
Сказал Спасибо: 7
Имеет 0 спасибок в 0 сообщенях
Pocuk пока неопределено
По умолчанию

все работает, всем спасибо
Pocuk вне форума   Ответить с цитированием
Старый 06.11.2011, 18:49   #8
Новичок
 
Аватар для Pocuk
 
Регистрация: 25.10.2011
Сообщений: 17
Сказал Спасибо: 7
Имеет 0 спасибок в 0 сообщенях
Pocuk пока неопределено
По умолчанию

не хотел создавать новую тему потому задам вопрос здесь:
как задать неравенство?
вот пример:
Код:
...
     if FromClient and (pck[1]=#$AA) and (ReadD(5)"не равно"ItemID1) and (ReadD(5)"не равно"ItemID2) then
...

Последний раз редактировалось Pocuk, 08.11.2011 в 17:25.
Pocuk вне форума   Ответить с цитированием
Старый 06.11.2011, 19:44   #9
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,224
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию

PHP код:
<> 
? в крайнем случае расписать на несколько иф


PHP код:
if FromClient and (pck[1]=#$AA) then
   
if ReadD(5) == ItemID1 then ничего
   
else (if ReadD(5) == ItemID2 then ничего
           
else (бла бла бла)
          ) 
__________________
хочу картинку в подпись!
SeregaZ вне форума   Ответить с цитированием
За это сообщение SeregaZ нажился спасибкой от:
Старый 09.01.2012, 02:46   #10
Новичок
 
Аватар для Pocuk
 
Регистрация: 25.10.2011
Сообщений: 17
Сказал Спасибо: 7
Имеет 0 спасибок в 0 сообщенях
Pocuk пока неопределено
По умолчанию

опять пишу скрипт, нужна команда или процедура или пример для выдачи случайных чисел, если кто знает помогите пожалуйста!
Pocuk вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Другие игры > Aion



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 11:26.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!