Вернуться   CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг
Войти через OpenID

Скриптинг Форум посвещенный созданию скриптов для L2PacketHack

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 06.08.2009, 18:39   #41
Рыцарь
 
Аватар для TAMBIK
 
Регистрация: 03.03.2009
Сообщений: 773
Сказал Спасибо: 361
Имеет 300 спасибок в 168 сообщенях
TAMBIK на пути к лучшему
По умолчанию function / procedure

Код:
function EncodeDate(Year, Month, Day: Word): TDateTime  
перевод года, месяца и дня в формат даты

procedure DecodeDate(Date: TDateTime; var Year, Month, Day: Word) 
Перевод даты в года, месяц и день

function EncodeTime(Hour, Min, Sec, MSec: Word): TDateTime  
Перевод часов, минут и секунд в формат времени

procedure DecodeTime(Time: TDateTime; var Hour, Min, Sec, MSec: Word) 
Перевод времени в часы, минуты и секунды

function Date: TDateTime  
Текущая дата

function Time: TDateTime  
Текущее время

function Now: TDateTime 
Текущие дата и время

function DayOfWeek(aDate: DateTime): Integer  
День недели

function IsLeapYear(Year: Word): Boolean  
Високосный год

function DaysInMonth(nYear, nMonth: Integer): Integer 
Дней в месяце

function IntToStr(i: Integer): String 
Перевод целого в строку

function FloatToStr(e: Extended): String  
Перевод числа с плавающей запятой в строку

function DateToStr(e: Extended): String 
Перевод даты в строку

function TimeToStr(e: Extended): String 
Перевод времени в строку

function DateTimeToStr(e: Extended): String 
Перевод даты и времени в строку
  
function VarToStr(v: Variant): String
Перевод variant в строку

function StrToInt(s: String): Integer 
Перевод строки в целое

function StrToFloat(s: String): Extended  
Перевод строки в число с плавающей запятой

function StrToDate(s: String): Extended 
Перевод строки в дату

function StrToTime(s: String): Extended 
Перевод строки во время

function StrToDateTime(s: String): Extended 
Перевод строки в дату и время

function Round(e: Extended): Integer  
Округление до ближайшего

function Trunc(e: Extended): Integer  
Округление до меньшего

function Int(e: Extended): Integer  
Возвращает целую часть

function Frac(X: Extended): Extended  
Возвращает дробную часть

function Sqrt(e: Extended): Extended  
Возвращает квадратный корень

function Abs(e: Extended): Extended 
Возвращает модуль числа

function Sin(e: Extended): Extended 
Синус

function Cos(e: Extended): Extended 
Косинус

function ArcTan(X: Extended): Extended  
Арктангенс

function Tan(X: Extended): Extended 
Тангенс

function Exp(X: Extended): Extended 
Экспонента

function Ln(X: Extended): Extended  
Натуральный логарифм

function Pi: Extended 
Число Пи
__________________
Тут не форум гадалок, если ты делаешь все правильно и по пунктам - то все должно работать
TAMBIK вне форума   Ответить с цитированием
За это сообщение TAMBIK нажился спасибкой от:
Старый 13.08.2009, 12:46   #42
Рыцарь
 
Аватар для TAMBIK
 
Регистрация: 03.03.2009
Сообщений: 773
Сказал Спасибо: 361
Имеет 300 спасибок в 168 сообщенях
TAMBIK на пути к лучшему
По умолчанию является ли символ

что то нашел может пригодится
Код:
Как определить, является ли символ буквой русского алфавита, буквой английского алфавита, является ли символ цифрой?

Как определить, является ли символ буквой русского алфавита?

function isAlphaRu( c: Char ): boolean;
begin
   Result := Ord( c ) in [168,184,192..223,224..255];
end;

Как определить, является ли символ буквой английского алфавита?

function isAlphaEn( c: Char ): boolean;
begin
   Result := Ord( c ) in [65..90,97..122];
end;

Как определить, является ли символ цифрой?

function isDigit( c: Char ): boolean;
begin
   Result := Ord( c ) in [48..57];
end;
Код:
procedure Inc(var i: Integer; incr: Integer = 1)  
Инкремент

procedure Dec(var i: Integer; decr: Integer = 1)  
Декремент

procedure RaiseException(Param: String) 
Генерация исключения

procedure ShowMessage(Msg: Variant) 
Вывод сообщения

procedure Randomize 
Инициализация генератора псевдослучайных чисел

function Random: Extended 
Генерация псевдослучайного числа

function ValidInt(cInt: String): Boolean  
Проверка валидности целого в строке

function ValidFloat(cFlt: String): Boolean  
Проверка валидности цисла с плавающей запятой в строке

function ValidDate(cDate: String): Boolean  
Проверка валидности даты в строке

function CreateOleObject(ClassName: String): Variant
Создание OLE-объекта

function VarArrayCreate(Bounds: Array; Typ: Integer): Variant
Создание динамического массива
__________________
Тут не форум гадалок, если ты делаешь все правильно и по пунктам - то все должно работать

Последний раз редактировалось TAMBIK, 13.08.2009 в 13:19.
TAMBIK вне форума   Ответить с цитированием
За это сообщение TAMBIK нажился спасибкой от:
Старый 01.06.2010, 14:17   #43
Новичок
 
Регистрация: 03.01.2009
Сообщений: 12
Сказал Спасибо: 4
Имеет 1 спасибку в 1 сообщении
Rifleman пока неопределено
Сообщение Макрос средствами пакетхака

Решил выложить свою разработку. Может, кому пригодится. Для Hellbound'а.
Суть кода: В массиве задаётся последовательность действий, это может быть просто пакет в формате строки (например '39 2A 01 00 00 00 00 00 00 00'), либо какая-то спец команда (например 'Attack').
Далее, по таймеру считываются последовательно строки массива, и то, что там записано отправляется на выполнение. Т.к. время на выполнение скилла может быть различное в зависимости от ситуации, то для такого случая я ввёл динамически изменяющееся время у таймера. Как только от серва приходит пакет с использованием скилла, скрипт считывает время использования и задаёт его таймеру + некоторая поправка.
Код:
Const
   NICK='Указываете ваш ник';
var
 tmrActions:  TTimer; // Таймер для последовательность действий
 Actions:    Array[0..10, 0..2] of String;  //Массив действий. 
{Записываются в ячейки массива пакеты, которые нужно послать. Далее, по таймеру посылается следующий пакет из списка.
 Первый индекс массива - номер действия, второй индекс: 
 0 - собственно действие, 1 - Параметр действия (напр. Ид скилла), 2 - время таймера до следующего действия
}
 MyID, : Integer;
 NumAct:     Integer; // Номер текущего действия
 IsSkill: Boolean; // Показывает, используем ли мы скилл в данный момент

Procedure UseSkill(ID: Integer); // Процедура использования скилла
begin
  buf:=#$39;
  WriteD(ID);
  WriteD(0);
  WriteC(0);
  SendToServerEX(NICK);
end;

Procedure OntmrAction(Sender: TObject); 
begin
   Case Actions[NumAct, 0] of // Сдесь мы определяем тип действия.
   'Attack': begin // Атаковать текущую цель
                
             end;

   'Use':    begin // Использование предмета
                UseItem(StrToInt(Actions[NumAct, 1])); // Эта процедура может быть разная, потому не привожу
             end;

   'Skill':  begin // Использование скилла
                UseSkill(StrToInt(Actions[NumAct, 1]));
                IsSkill:= True;
             end;
   '-1':     begin // Останов макроса
                NumAct:=0;
                tmrActions.Enabled:=False;
                Times:=0;
                exit;
             end;
   else begin // Если же не приведена внутренняя команда, то просто отсылаем пакет
                buf:= Hstr(Actions[NumAct, 0]); 
                SendToServerEX(NICK);
        end;
   end;
   NumAct:= NumAct+1; 
   If (IsSkill=False) then tmrActions.Interval:= StrToInt(Actions[NumAct, 2]); // Изменяем время у таймера до следующего пункта
   //В случае скилла время изменяется считыванием нужного пакета
end;

procedure Init; //Вызывается при включении скрипта
begin
  tmrActions:= TTimer.Create(nil);
  tmrActions.OnTimer:= @OntmrAction;
  tmrActions.Enabled:= False;
  tmrActions.Interval:= 200;

  // 6590 - Angel Slayer
  // 6602 - Demon Splinter  (один из ))))
  // 425 - Hawk Spirit Totem
  // Макрос представляет из себя: Одеть Сплинтеры, потом юзнуть Хавка, одеть АС, начать атаку
  Actions[0, 0]:='Use';
  Actions[0, 1]:='6602';
  Actions[0, 2]:='300';  // Задаём время до следующего пункта, в мс

  Actions[1, 0]:='Skill';
  Actions[1, 1]:='425';
  Actions[1, 2]:='2000'; // В принципе, можно и не ставить

  Actions[2, 0]:='Use';
  Actions[2, 1]:='6590';
  Actions[2, 2]:='300';

  Actions[3, 0]:='Attack';
  Actions[3, 1]:='';
  Actions[3, 2]:='300';

  Actions[4, 0]:='-1';

  MyID:= -1;
end;

procedure Free; //Вызывается при выключении скрипта
begin
  tmrActions.free; 
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
  if pck='' then exit;

  if FromServer and (ConnectName=NICK) then case pck[1] of
    #$32: Begin    // User Info
             If (MyID <> -1) then exit;
             MyID:=ReadD(18); // запоминаем наш ИД
          end;
    #$11: begin;  // Инвентаризация барахла в карманах
             InventoryCreate; // Инвентаризацию берите, какая удобнее
          end;
    #$21: Begin  // Обновление инвентаря
             InventoryUpdate;
          End;
    #$48: begin // MagicSkillUse 
             If (ReadD(2)<>MyID) Or (IsSkill=False) then Exit; // Если не мы юзаем - не обрабатываем
             tmrActions.Interval:= ReadD(18)+100; // Изменяем время у таймера с учётом времени произношения скилла, 100 - небольшая добавка, чтоб лучше работало
             IsSkill:= False;
          end;
  end;
end.
P.S. Из кода выкинул весь мусор, что мне был нужен, просьба очень "внимательно следить за запятыми в десятичных дробях" ©Р. Хайнлайн

Последний раз редактировалось Rifleman, 01.06.2010 в 14:33.
Rifleman вне форума   Ответить с цитированием
За это сообщение Rifleman нажился спасибкой от:
Старый 29.07.2010, 02:30   #44
Местный
 
Аватар для Breadfan
 
Регистрация: 29.04.2008
Сообщений: 831
Сказал Спасибо: 80
Имеет 230 спасибок в 169 сообщенях
Breadfan пока неопределено
По умолчанию

Автобег в указанную сторону: запустить скрипт, нажать "Приветствие", ткнуть мышкой в нужную сторону - бежит не останавливаясь пока не упрется. На ходу возможно изменение направления\шага пробежки. Интерлюд.
Оффтоп
__________________
На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."

А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Breadfan вне форума   Ответить с цитированием
За это сообщение Breadfan нажился спасибкой от:
Старый 26.01.2012, 16:37   #45
Новичок
 
Регистрация: 22.01.2012
Сообщений: 3
Сказал Спасибо: 1
Имеет 2 спасибок в 2 сообщенях
brotherrus пока неопределено
По умолчанию

Часть моего бота для получения инвентаря (используется только для банок). Может кому пригодится. Использую на известном фришарде с HF P5.
DELPHI Код:
const     InventoryCountMax=250; var     Inventory:array[0..InventoryCountmax,1..3] of integer;     InventoryCount:integer; procedure GetItemsList; var     i:integer; begin     InventoryCount:=readH(4);     for i:=0 to InventoryCountMax do begin         Inventory[i,1]:=0;Inventory[i,2]:=0;Inventory[i,3]:=0;        end;     for i:=0 to InventoryCount do begin         Inventory[i,1]:=ReadD(6+i*68)//ObjID         Inventory[i,2]:=ReadD(10+i*68); //ItemID         Inventory[i,3]:=ReadD(18+i*68); //Count     end; end; function GetFromInventoryByID(id:integer):integer; var     i:integer; begin     result:=-1;     for i:=0 to InventoryCount do begin         if Inventory[i,2]=id then begin             result:=i;             break;         end;     end;    end; function GetFromInventoryByObjID(id:integer):integer; var     i:integer; begin     result:=-1;     for i:=0 to InventoryCount do begin         if Inventory[i,1]=id then begin             result:=i;             break;         end;     end;    end; procedure UpdateInventory; var     i,count,find,ObjID,m:integer; begin     count:=readH(2);     m:=readH(4);     if m=2 then begin         for i:=0 to count do begin             ObjID:=ReadD(6+i*68);             find:=GetFromInventoryByObjID(ObjId);             if find>-1 then begin                 Inventory[find,2]:=ReadD(10+i*68); //ItemID                 Inventory[find,3]:=ReadD(18+i*68); //Count                      end;          end;              end;     if m=3 then begin         for i:=0 to count do begin             ObjID:=ReadD(6+i*68);             find:=GetFromInventoryByObjID(ObjId);             if find>-1 then begin                 Inventory[find,1]:=0;                 Inventory[find,2]:=0;                 Inventory[find,3]:=0;             end;            end;        end;     if m=1 then begin         for i:=0 to count do begin             InventoryCount:=InventoryCount+1;             Inventory[InventoryCount,1]:=ReadD(6+i*68)//ObjID             Inventory[InventoryCount,2]:=ReadD(10+i*68); //ItemID             Inventory[InventoryCount,3]:=ReadD(18+i*68); //Count         end;        end; end;
DELPHI Код:
#$11: GetItemsList; #$21: UpdateInventory;
p.s. спасибо dyh9l за тег делфи)

Последний раз редактировалось brotherrus, 26.01.2012 в 17:02.
brotherrus вне форума   Ответить с цитированием
Старый 26.01.2012, 16:51   #46
Местный
 
Регистрация: 11.06.2010
Сообщений: 644
Сказал Спасибо: 119
Имеет 85 спасибок в 77 сообщенях
dyh9l пока неопределено
По умолчанию

тег делфи [ HIGHLIGHT="DELPHI"][/highlight]
__________________
dyh9l вне форума   Ответить с цитированием
За это сообщение dyh9l нажился спасибкой от:
Старый 01.04.2014, 23:03   #47
Пользователь
 
Регистрация: 01.08.2010
Сообщений: 82
Сказал Спасибо: 49
Имеет 5 спасибок в 4 сообщенях
semiromid пока неопределено
По умолчанию

...........
end;[/code]

StrToHex преобразование
Код:
//(c) xkor
function StrToHex(packet: string):string;
var
  i:integer;
  tmp:byte;

  function ByteToHex(b: byte): Char;
  begin
    if b<10 then result:=chr(b+$30)
      else result:=chr(b+$37);
  end;

begin
  result:='';
  for i:=1 to length(packet) do begin
    tmp:=ord(packet[i]) div 16;
    result:=result+ByteToHex(tmp);
    tmp:=ord(packet[i]) - tmp*16;
    result:=result+ByteToHex(tmp)+' ';
  end;
end;
пример использования
Код:
    hextr2:=hextostr(pck);
    SHOWMESSAGE(hextr2);
[/quote]

Подскажите пожалуйста , как правильно пользоваться этой функцией? У меня при компиляции ошибку выдает .
semiromid вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Скриптинг


Опции темы
Опции просмотра

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

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


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

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

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