PDA

Просмотр полной версии : Писать скрипты для phx.


Nickers
04.03.2011, 13:06
Отвечаем на вопросы пользователей по скрипто-писанию.

Хотел создать мануал по написанию скриптов под ПХ, который уж 5 лет никто написать не может (Я не встречал), но сталкнулся с проблемой, что большинство тех, кто еще не научились писать скрипты попросту не знают языка... Описывать с нуля каждую функцию это ппц... Гораздо легче объяснять "Детям Фри или Турбо паскаля" (Таким же как я)

И поэтому я решил создать эту тему, где можно задавать свои вопросы по скриптам (Именно по написанию/корректировке ваших проектов), но я знаю далеко не все и мне б нужна помощь других Активных участников форума)))

Ну начнем пожалуй... Задавайте сюда свои вопросы по скриптам.
Можно по чужим, например изменение их в каком-либо направлении...


Полезное:

Основное:
Что нужно знать. (http://coderx.ru/showthread.php?t=10) (Основы)
Полезные функции. (http://coderx.ru/showthread.php?t=15) (Сборник полезностей)
Переделать скрипт под другую версию (http://coderx.ru/showpost.php?p=125432&postcount=125)
Плагины в phx. (http://coderx.ru/showthread.php?t=890)

База инвентаря:
Способ №1 (Простой) (http://coderx.ru/showpost.php?p=146039&postcount=8)
Способ №2 (http://coderx.ru/showpost.php?p=146210&postcount=20)
Способ №3 (Геморой) (http://coderx.ru/showpost.php?p=146266&postcount=25)

Работа с таймером:
1) В общем. (http://zhyk.ru/forum/showpost.php?p=455465&postcount=1) (Не нашел на Coderx'e дай-те ссылку)
2) Из темы:
Простейший пример таймера. (http://coderx.ru/showpost.php?p=149183&postcount=50)
Посылка пакета. (http://coderx.ru/showpost.php?p=149192&postcount=52)

Скрипты-боты:
Сборник (http://coderx.ru/showthread.php?t=14)
Локомотив от Alexus (http://coderx.ru/showthread.php?t=334)

Автозаточка:
NLObp (http://coderx.ru/showthread.php?t=476)
mks (http://coderx.ru/showthread.php?t=1684)
TAMBIK (http://coderx.ru/showthread.php?t=2237)
-----------------------

Перебор MultiSell Пакетов (Теория) (http://coderx.ru/showpost.php?p=159909&postcount=4)

supernewbie
04.03.2011, 13:31
серф ввв.ло2супершматка.клан.су нужен скрипт тип точиш 1 раз он точит дальше напиши плис я сам нуб

Добавлено через 30 секунд
хроники интрлуд

PS лучше пусть темки плодят, чем венегред тут устраивать

dyh9l
04.03.2011, 15:17
Имхо тема была бы полезная (как минимум мне) , но нужен человек который бы адекватно мог реагировать и отвечал на вопросы заданные пользователям, а не кричать какой он тупой и отправлять его читать книжку, найдутся ли такие люди и ты сам готов к этому ??

p.s: есстесно что пример supernewbie не исключение, и с такими тоже надо будет как то бороться, и каждый раз объеснять что coderx не чит-портал.

Лан, стартану я, у меня есть скрипт на заточку (не NLObP, а приватный так скажем), нужна помощь в реализовании заточки вещей до сейва простыми точками, в дальнейшем блесс, приду с работы, скину скрипт в лс, а вобще если бы ты мне смог объеснить прямо тут на словах, чтоб я сам смог поправить, было бы еще лучше ;)

supernewbie
04.03.2011, 16:08
приду с работы
:D где работаешь то хоть?)

dyh9l
04.03.2011, 16:18
в компьютерной фирме)) учеба закончилась, щас полгода проработать, защитить диплом и бб гл

Nickers
04.03.2011, 18:31
Имхо тема была бы полезная (как минимум мне) , но нужен человек который бы адекватно мог реагировать и отвечал на вопросы заданные пользователям, а не кричать какой он тупой и отправлять его читать книжку, найдутся ли такие люди и ты сам готов к этому ??
Я сам готов но тут 2 минуса:
1й - время... из-за учебы его мало =))
2й то что я сам нуб ппц и с нуля скрипт на точку не напишу...
Я знаю как он работает и (Например) могу в готовом скрипте разобратся и поменять его например для другой цели...

Обязательно нужен человек, который буит мне помогать, если у мну моцка или сил не хватает...

Лично я бешено гуглю, если у меня проблемы в чем-то)) Но со скриптами хватает тут полазить и пару чужих скриптов разобрать...

Добавлено через 4 минуты
Кстати вполне возможно помогать людям не знакомых с языком, но с мозгом в наличии... Для этого требуется объяснение пары функций и просто алгоритм работы скрипта, что гораздо легче чем писать Справочник по паскалю с уклоном на ПХ (Можно книгу написать <<Паскаль для ПХ как 2 пальца абассать>>)

Добавлено через 4 минуты
Лан, стартану я, у меня есть скрипт на заточку (не NLObP, а приватный так скажем), нужна помощь в реализовании заточки вещей до сейва простыми точками, в дальнейшем блесс, приду с работы, скину скрипт в лс, а вобще если бы ты мне смог объеснить прямо тут на словах, чтоб я сам смог поправить, было бы еще лучше
Ну это нужно на скрипт глянуть))

dyh9l
05.03.2011, 03:36
го лучше новый состряпаем) я вот тут чото начал, ну и конечно же запинки, над узнать как то ObjectID всех скролов которые в сумке и которые будут в дальнейшем покупатся)
const
name = 'secret' ;
rbID = 858 ;
enchlvl = 7;
var
EnchantTimer:TTimer;
a,ObjectIDrb:integer;
procedure Init;
begin
a:=1;
EnchantTimer:=TTimer.Create(nil);
EnchantTimer.Ontimer:=@Enchant;
EnchantTimer.Interval:=1100;
EnchantTimer.Enabled:=false;
end;
procedure Free;
begin
EnchantTimer.free;
end;
procedure Enchant;
begin
case a of
1: begin // первые 2 действия заточка простым скролом
buf:=#$14;
// WriteD(тут объект ид у скрола);
WriteD(0);
SendToServerEx(name);
a:=2;
end;

2: begin
buf:=#$58;
WriteD(ObjectIDrb);
WriteD(0);
SendToServerEx(name);
EnchantTimer.Enabled:=false;
end;

3: begin //Заточка блесс скролом
buf:=#$14;
// WriteD(тут объект ид у скрола);
WriteD(0);
SendToServerEx(name);
a:=4;
end;

4: begin
buf:=#$58;
WriteD(ObjectIDrb);
WriteD(0);
SendToServerEx(name);
EnchantTimer.Enabled:=false;
end;

end;
end;
procedure InvertoryUpdate;
begin
if (ReadD(12)=rbID) then
begin
ObjectIDrb:=ReadD(8);
case ReadH(30) of
0..5: begin a:=1; EnchantTimer.Enabled:=true; end;
5..enchlvl: begin a:=3; EnchantTimer.Enabled:=true; end;
end;
end;
if (ReadD(42)=rbID) then
begin
case ReadH(60) of
0..5: begin a:=1; EnchantTimer.Enabled:=true; end;
5..enchlvl: begin a:=3; EnchantTimer.Enabled:=true; end;
end;
end;
end;
begin
if (connectname=name) and (fromserver) then
case pck[1] of
#$27: InvertoryUpdate;
end;
end.

Nickers
05.03.2011, 08:27
Давай ка вместо 1го "Инвентари Апдейт" вставим вот это для начала))
procedure CreateItemBase;
var
i, j, ListCount: integer;
begin
for i:=1 to max do begin
//очищаем масив
ItemBase[1,i]:=0; //OID
ItemBase[2,i]:=0; //ID
ItemBase[3,i]:=0; //kol-vo
ItemBase[4,i]:=0; //lvl
end;
j:=4;
ListCount:=ReadH(j);
j:=8;
for i:=1 to ListCount do begin
itemBase[1,i]:=ReadD(j); //OID
itemBase[2,i]:=ReadD(j); //ItemID
itemBase[3,i]:=ReadD(j); //кол-во
inc(j,10);
itemBase[4,i]:=ReadH(j);//EnchantLevel
inc(j,12);
end;
end;
//......................................
//************************************************** ****************************
procedure InventoryUpdate; //пакет 27, обновляет базу ObjectID по ItemID
var
i, ii, j, OID, ID, Count, ListCount, UpdType, lvl: integer;
add : boolean;
begin
add:=false;
ListCount:=ReadH(2);
j:=4;
for ii:=1 to ListCount do begin
add:=false;
UpdType:=ReadH(j);
ReadH(j); //ItemType1
OID:=ReadD(j); //ObjectID
ID:=ReadD(j); //ItemID
Count:=ReadD(j); //кол-во
inc(j,10);
lvl:=ReadH(j);
case UpdType of
1: begin
for i:=1 to max do begin
if (ItemBase[1,i]=0) and (add=false) then begin
ItemBase[1,i]:=OID;
ItemBase[2,i]:=ID;
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
add:=true;
end;
end;
end;
2: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[3,i]:=Count;
ItemBase[4,i]:=lvl;
end;
end;
end;
3: begin
for i:=1 to max do begin
if ItemBase[1,i]=OID then begin
ItemBase[1,i]:=0;
ItemBase[2,i]:=0;
ItemBase[3,i]:=0;
ItemBase[4,i]:=0;
end;
end;
end;
end;
inc(j,10);
end;
end;

function GetItem(ID, FieldIn, FieldOut : integer) : integer;
var
i : integer;
begin
for i:=1 to max do
if ItemBase[FieldIn,i]=ID then begin
result:=ItemBase[FieldOut,i]; // itemOID
exit;
end;
result:=0;
end;

Var:
Const
Name='ArchDevil'; //Афффтор
Max=300;
var
ItemBase : array[1..4,1..max] of integer; //ItemOID, ItemID, Kol-vo, ItemLvl
timer:TTimer;

Во 1х мне так удобней чесн слово)))
во 2х GetItem оч полезная функция...

--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------

узнать как то ObjectID всех скролов которые в сумке
GetItem(ID,2,1); //ID Вещи, тоесть скролла, не меняется.
Функция выдает ОИД вещи с ИД "ID".

--------------------------------------------------------------------------------------------------------------------------------
Думаю всех не обязательно узнавать и прост по 1му вытаскивать по мере работы скрипта, но если пока буим делать появится проблема сможем переделать, чтоб он сразу ВСЕ скроллы в Массив записывал (Нада в чужих скриптах по копаться, посмотреть как у них там, но сейчас не могу... вечером)
--------------------------------------------------------------------------------------------------------------------------------

supernewbie
05.03.2011, 08:41
госпади, как же вам отстойно без классов и рекордов)

Nickers
05.03.2011, 10:55
А нах тут рекорды? Массивов вполне достаточно...
Или дай пример через классы/рекорды я разберу... Ну пока у мну и без них не возникало пороблем...

Добавлено через 45 секунд
(Я не знаком с классами)

supernewbie
05.03.2011, 11:41
да какие тут могут быть примеры) вообще, по-хорошему, надо делать так:
1. Создание картины мира (совсем по-хорошему абсолютно полную)
2. И потом по этим данным уже делать действия которые тебе нужны.

через массивы то конечно можно все что угодно сделать)
но TList и класс скажем
TL2Item=class
public
OID,ID:integer;
Count:int64;
Enachant:smallint;
isEquipped:boolean; //и тд
end;

так удобнее, согласись

ну а тут судя по всему придется делать массивы, потом опять же массив нпсов, массив текущего мультиселла, расшифровщик хтмла(наверное) и думаю этого хватит.

Nickers
05.03.2011, 14:36
Все гораздо проще на мой взгляд...
Я не лазил у NLObP, но в скрипте TAMBIK'a лазил...
Скрипт простой (Тут я имею виду сам алгоритм скрипта на Энчант, а не конкретного автора), до ужаса...
Если Пакет Юз итем=> Записываем ИД скролла (ИЗ пакета берет ОИД, через ГетИтем получаем ИД)
Если пакет Актион (04 вродя), то записываются все нужные даные
Пакет Мультиселла-> Записываем

Потом в циклах: Поиск через ГетИтем Скролла(Записан ИД), Проверка че из этого получилось(Энчант-лвл), Проверка скок там еще свитков (Если мало то: Актион->Мультиселл) если норм, то по новой...

Ну и там всякие навороты типо сист сообщений, Энчант-лвл-макс в чат...
(Я считаю определение ИД скролла по Юзитем пакету тож наворотом, но эт удобна =))

Добавлено через 3 минуты
dyh9l, Мы на какие хроники то делаем?

Добавлено через 11 минут
Подсчет свитков тамбик устроил вот так:
sumskrol:=Getsumitem(skrolID,3,4);
//где 3-Ид скролла, 4-кол-во, а GetsumItem:
function Getsumitem(Obj,up,down:integer): integer;
var
i: integer;
begin
Result:= 0; //В начале у нас 0
for i:=1 to max do
if (BaseItems[i,up]=Obj) then begin
Result:=Result+BaseItems[i,down];
end;
end;
//TAMBIK(c)
Как видно обходится без массива со всеми скроллами...
А функция лишь для подсчета... (Оч удобно)

dyh9l
05.03.2011, 15:03
Nickers, c4

Добавлено через 9 минут
пойду тоже тамбика покурю)

Nickers
05.03.2011, 16:52
В принципе можно скрипт тамбика переделать, а потом на с4 перегнать...
Добавить в Конст Сейф-Энчант-лвл, ИД Обычного скролла и в механизме энчанта вставить Case До сейва и после сев-энч-лвл (2 разных пути, 2 разных ИД)
Беагин
Если лвл
<3 : хуня:=скролл;
>3 : хуня:=блессскролл;
Эндь;
Точить(хуню);
Эндь;

dyh9l
05.03.2011, 17:11
нехочу редактировать чужие скрипты) давай новый сделаем)

supernewbie
05.03.2011, 17:54
Nickers, советую начинать качать клиент с4)

Nickers
05.03.2011, 18:11
supernewbie, Ога ппц влом))

dyh9l
05.03.2011, 18:28
supernewbie, злой ты человек..

supernewbie
05.03.2011, 19:32
:to_become_senile:

NLObP
05.03.2011, 23:11
Так более универсально - для C4

var
ItemID, ItemOID, ItemEnch: integer; //ItemID затачиваемого предмета
//ITEMs
BaseItems: array[1..maxitems, 1..12] of integer; //все предметы в инвентаре

//......................................
Procedure ItemList; //создание базы предметов
var
i, j, count : integer;
values : array[0..8] of variant;
begin
count:=round((length(pck)-5)/ReadH(4));
for j:=1 to 12 do for i:=1 to maxitems do BaseItems[i,j]:=0;
for i:=0 to ReadH(4)-1 do
begin
readmask('hdddhhhdh', 6+i*count, values);
BaseItems[i+1,2]:=values[1]; //OID
BaseItems[i+1,3]:=values[2]; //ItemID
BaseItems[i+1,5]:=values[3]; //Amount (кол-во предметов)
BaseItems[i+1,10]:=values[8]; //EnchLvl
end;
end;
//......................................
Procedure InventoryUpdate;
var
i, j, obj, count : integer;
values : array[0..9] of variant;
begin
count:=round((length(pck)-3)/ReadH(2));
for i:=0 to ReadH(2)-1 do
begin
readmask('hhdddhhhdh', 4+i*count, values);
case values[0] of
1: obj:=0;
2: obj:=values[2];
3: begin
for i:=1 to maxitems do
if BaseItems[i,2]=values[2] then
begin
for j:=1 to 12 do BaseItems[i,j]:=0;
break;
end;
continue;
end;
end;
for i:=1 to maxitems do
if BaseItems[i,2]=obj then
begin
BaseItems[i,2]:=values[2]; //OID
BaseItems[i,3]:=values[3]; //ItemID
BaseItems[i,5]:=values[4]; //Amount
BaseItems[i,10]:=values[9]; //EnchLvl
break;
end;
end;
end;


Тоже самое для Freya
//......................................
Procedure ItemList; //создание базы предметов
var
i, j, count : integer;
values : array[0..8] of variant;
begin
count:=round((length(pck)-5)/ReadH(4));
for j:=1 to 12 do for i:=1 to maxitems do BaseItems[i,j]:=0;
for i:=0 to ReadH(4)-1 do
begin
readmask('dddqhhhdh', 6+i*count, values);
BaseItems[i+1,2]:=values[0];
BaseItems[i+1,3]:=values[1];
BaseItems[i+1,5]:=values[3];
BaseItems[i+1,10]:=values[8];
end;
end;
//......................................
Procedure InventoryUpdate;
var
i, j, obj, count : integer;
values : array[0..9] of variant;
begin
count:=round((length(pck)-3)/ReadH(2));
for i:=0 to ReadH(2)-1 do
begin
readmask('hdddqhhhdh', 4+i*count, values);
case values[0] of
1: obj:=0;
2: obj:=values[1];
3: begin
for i:=1 to maxitems do
if BaseItems[i,2]=values[1] then
begin
for j:=1 to 12 do BaseItems[i,j]:=0;
break;
end;
continue;
end;
end;
for i:=1 to maxitems do
if BaseItems[i,2]=obj then
begin
BaseItems[i,2]:=values[1];
BaseItems[i,3]:=values[2];
BaseItems[i,5]:=values[4];
BaseItems[i,10]:=values[9];
break;
end;
end;
end;

supernewbie
06.03.2011, 10:23
BaseItems: array[1..maxitems, 1..12] of integer; - не круто. 12 интеджеров у вещи, а используются по ходу только 4 это раз, а во-вторых массив не динамический, что тоже не круто. В-третьих что-то не видно добавления итема через ИнвентарьАпдейт, стоит просто 1: obj:=0;, дальше я так понял его просто ищут в инвентаре по oid'у, не находят и... всё?

Fer123
06.03.2011, 12:08
А зачем динамический если больше maxitems вещей не может быть.
Все что не используется можно легко убрать.
При obj:=0 ищется первая не занятая ячейка массива и ей присваивается новый обжект ид и все остальное.

supernewbie
06.03.2011, 12:21
оу, интересно интересно)
ну скажем у меня вещей в инвентаре 10 всего, а массив на 80, ну ладно.. каг хатите..

Добавлено через 1 минуту
итем лист тоже не особенно, очищать массив, заполнять массив..
хотя тут по-моему и так сойдет..

NLObP
06.03.2011, 12:25
supernewbie, давай свой вариант. Посмотрим, покритикуем. =)

supernewbie
06.03.2011, 12:26
хех) окей, где-то писал... ща найду..

const
Name='OldMen';
offset=68;

var
Inventory:array of variant;

procedure Init; //Вызывается при включении скрипта
begin
buf:=#$14;
SendToServerEx(Name);
SetLength(Inventory,0);
end;

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

end;

procedure ItemList;
var
i:integer;
v:variant;
begin
SetLength(Inventory,0);
if ReadH(4)<1 then exit;
for i:=0 to ReadH(4)-1 do
begin
v:=[0,1,2];
v[0]:=ReadD(i*offset+6); //0 - OID
v[1]:=ReadD(i*offset+10); //1 - ItemID
v[2]:=ReadQ(i*offset+18); //2 - Count
SetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
end;

procedure InventoryUpdate;
var
i,j:integer;
v:variant;
begin
if ReadH(2)<1 then exit;
for i:=0 to ReadH(2)-1 do
begin
v:=[0,1,2];
v[0]:=ReadD(i*offset+6);
v[1]:=ReadD(i*offset+10);
v[2]:=ReadQ(i*offset+18);
case ReadH(i*offset+4) of
1: begin
SetLength(Inventory,length(Inventory)+1);
Inventory[length(Inventory)-1]:=v;
end;
2: begin
j:=FindItemByParams(v,0);
if j=-1 then exit;
Inventory[j]:=v;
end;
3: begin
j:=FindItemByParams(v,0);
if j=-1 then exit;
if (j<>length(Inventory)-1) then Inventory[j]:=Inventory[length(Inventory)-1];
SetLength(Inventory,length(Inventory)-1);
end;
end;
end;
end;

function FindItemByParams(v:variant;p:byte) : integer;
var
i:integer;
tempv:variant;
begin
result:=-1;
for i:=0 to length(Inventory)-1 do
begin
tempv:=Inventory[i];
if tempv[p]=v[p] then
begin
result:=i;
exit;
end;
end;
end;

function Say2 : boolean;
var
i:integer;
v:variant;
begin
result:=true;
case ReadS(2) of
'how': CreatureSay('Всего вещей '+inttostr(length(Inventory)));
'say all' :
for i:=0 to length(Inventory)-1 do
begin
v:=Inventory[i];
CreatureSay(IntToStr(i+1)+'. OID='+inttostr(v[0])+'; ItemID='+inttostr(v[1])+'; Count='+inttostr(v[2]));
end;
else result:=false;
end;
if result then pck:='';
end;

procedure CreatureSay(s:string);
begin
buf:=#$4A;
WriteMask('ddss',[0,3,'Инфо',s]);
SendToClientEx(Name);
end;


//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromServer and (ConnectName=Name) then
case pck[1] of
#$11: ItemList;
#$21: InventoryUpdate;
end;
if FromClient and (ConnectName=Name) then
case pck[1] of
#$49: Say2;
end;


end.

Fer123
06.03.2011, 12:41
Интересно.... Когда-то пробовал что-то подобное написать так и не получилось сделать двумерный динамический массив.

Nickers
06.03.2011, 22:29
Не... Мне влом его курить))

Добавлено через 2 часа 15 минут
dyh9l, Мы чет встали... Че ща по скрипту нада делать? Я прост хз с чего начать)) Ты тамбика курнул?

Добавлено через 13 минут
У меня у самого проблема... Гдет нашел скрипт на Аргументацию для ленивых под Грацию, нада переделать под С6

Я так понял афтор специально поместил все сборки пакетов в 1 скрипт... Как они меняются с версиями? Брать ини из ПХ и все подгонять? оО Чет их дахрена...

L2.exe
07.03.2011, 01:49
Мне нужно в бота добавить функцию,что бы в случай смерти он нажимал "в деревню",как я понял,нужно поймать пакет который производит данное действие,далее вставить его в скрип;).Только вот какой пакет и куда его вставлять понятия не имею:confused:
Вот этот бот (http://coderx.ru/attachment.php?attachmentid=1319&d=1277796230)

dyh9l
07.03.2011, 02:54
L2.exe, не встал всматриватся в скрипт, но увидел последние строчки
if MyHP = 0 then // Проверка не убили ли нас...
begin
SendMsg_to_CL('Нас убили...');
log.Lines.Add('Нас убили...');
StopGame;
end;
ну дак и добавь в этот блок отправлять пакет в город
p.s:
buf:=Hstr('пакет');
SendToServerEx(NickName);

Elees
07.03.2011, 21:01
Всем привет! Мене хотелось бы знать.. вот я хачу что б при нажатии на какую нить кнопку(к примеру F4 прям в игре) и что б програмка l2phx отправила пакеты
как можно сделать такой скрипт

и ещё хачу что б пакеты отправлялись с паузай ну скажем с 0.2сек

такое вообще возможно

supernewbie
07.03.2011, 21:31
ну теоретически да

dyh9l
07.03.2011, 22:28
Всем привет! Мене хотелось бы знать.. вот я хачу что б при нажатии на какую нить кнопку(к примеру F4 прям в игре) и что б програмка l2phx отправила пакеты
как можно сделать такой скрипт

и ещё хачу что б пакеты отправлялись с паузай ну скажем с 0.2сек

такое вообще возможно

На кнопку ф4 макрос, а сам скрипт пусть состоит из убийства макроса + какие то нужные тебе действия) я так делал когда на дино бегал и от мобов анти таргет тыкал)

supernewbie
07.03.2011, 22:53
можна и без макроса сообразить :spiteful:

dyh9l
07.03.2011, 22:56
тока душу надо дьяволу продать чтоб начинать сооброжать в этих всяких плагинах

Elees
08.03.2011, 00:32
можна и без макроса сообразить :spiteful:

дело в том что пакет отправляеться (пакет скила) гараздо быстрее чем я тыкаю кнопки, тоесть одновременно все пакеты, одновременно все скилы, а пауза нужна что б невозник вопрос у Админов что в логе 4-5скилов за 1долю секуннды

//J-Fobos: пауза = TTimer

dyh9l
08.03.2011, 02:40
блин жесть нужен скрипт на точку блесами, сонный сломал баюма ... жессть ааа ненавижу

supernewbie, мб допишешь по старой дружбе пару строчек)

supernewbie
08.03.2011, 09:13
давай сюда че есть у тебя там

L2.exe
09.03.2011, 00:50
L2.exe, не встал всматриватся в скрипт, но увидел последние строчки
if MyHP = 0 then // Проверка не убили ли нас...
begin
SendMsg_to_CL('Нас убили...');
log.Lines.Add('Нас убили...');
StopGame;
end;
ну дак и добавь в этот блок отправлять пакет в город
p.s:
buf:=Hstr('пакет');
SendToServerEx(NickName);

Я сделал вот так...но это только начало))

begin
StatusUpdate;
if (MyHP > 0) and (MyHP < HPlevelProcent) then if Wait(time1,DrinkDelay) then DrinkBottle; // пьем бутылки
if MyHP > HPlevelProcent then time1:=1;
if MyHP = 0 then // Проверка не убили ли нас...
begin
SendMsg_to_CL('Нас убили...');
log.Lines.Add('Нас убили...');
buf:=Hstr('00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(NickName');
StopGame;
end;
В каком виде должен быть пакет?в этом?Если не изменяет память это бинарный...:D
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Буду очtнь благодарен если вы скажите мне его ID ;)

dyh9l
09.03.2011, 00:53
SendToServerEx(NickName'); - лишняя ' это веть константа, а в константе у тебя уже есть ' '

L2.exe
09.03.2011, 01:00
SendToServerEx(NickName'); - лишняя ' это веть константа, а в константе у тебя уже есть ' '

Благодарю:good: осталось только пакет тот поймать...

dyh9l
09.03.2011, 01:04
в город?

L2.exe
09.03.2011, 01:15
Благодарю:good: осталось только пакет тот поймать...

Я думаю 01

Добавлено через 39 секунд
в город?

да

dyh9l
09.03.2011, 01:25
умреть и посмотреть не судьба?

L2.exe
09.03.2011, 01:27
умреть и посмотреть не судьба?

Их много проходит...не пойму какой из них

dyh9l
09.03.2011, 01:30
на моем сервере такой
6D 00 00 00 00
Tèï: 0x6D (RequestRestartPoint)
Pàçìåð: 5+2
Âðåìÿ ïðèõîäà: 00:28:05:953
0002 d PointType: res to town ID:0 (0x0000)

L2.exe
13.03.2011, 14:52
begin
UserInfo;
btnInit.enabled:= false;
if MyHP = 0 then // Проверка не убили ли нас...
begin
SendMsg_to_CL('Нас убили...');
log.Lines.Add('Нас убили...');
buf:=Hstr('7D 00 00 00 00');
SendToServerEx(NickName);
end;

Вот,нашёл пакет,поставил,телепортируеться...Но!сбрасываются все настройки...убрал StopGame; Настройки радиуса перестали сбрасываться,но всё равно нужно выполнить команду "start"...
Как сделать что бы он возвращался на заданную позицию?:o

Добавлено через 46 минут
на моем сервере такой
6D 00 00 00 00
Tèï: 0x6D (RequestRestartPoint)
Pàçìåð: 5+2
Âðåìÿ ïðèõîäà: 00:28:05:953
0002 d PointType: res to town ID:0 (0x0000)
Помогло:cool:
Только у меня он такой 7D 00 00 00 00


Ещё проблемка возникла,бот бутыли хп не кушает...Кто сталкивался с этой проблемой выкладывайте решение;)

Breadfan
13.03.2011, 15:11
Выкладываю: покупаешь бутылки - начинает жрать. Вот самое очевидное и верное решение проблемы.
Как вариант - посмотреть готовые решения по поиску итемов в сумке, под определенные хроники. Например в ветке посвященной заточке итемов - эта тема поднималась миллионы раз. Или религия не позволяет? Ведь достаточно подобрать скрипт на заточку - который будет отображать содержимое инвентаря - и выдернуть оттуда процедуры поиска оид\количество итемов.

L2.exe
14.03.2011, 06:18
Выкладываю: покупаешь бутылки - начинает жрать. Вот самое очевидное и верное решение проблемы.
Как вариант - посмотреть готовые решения по поиску итемов в сумке, под определенные хроники. Например в ветке посвященной заточке итемов - эта тема поднималась миллионы раз. Или религия не позволяет? Ведь достаточно подобрать скрипт на заточку - который будет отображать содержимое инвентаря - и выдернуть оттуда процедуры поиска оид\количество итемов.
С учёбы приду посмотрю обязательно;)
Или религия не позволяет?
Верю только в себя...

L2.exe
17.03.2011, 16:16
Хотел что бы бот юзал определённый скил через N промежуток времени,попытался составить скрипт из кусков,но не уверен что будет работать,так как многое для меня ещё не понятно.
Вот,мне нужно что бы он через 20 минут,посылал 39 63 00 00 00 00 00 00 00 00 этот пакет.
За раннее благодарю:cool:

Добавлено через 23 минуты
begin
if FromClient and(pck=HStr('39 63 00 00 00 00 00 00 00 00 ')) then begin - Юзаем скил
SendToServer;
delay(36000);
end;
Вот это должно работать?
Или Вот это?
var
timer:TTimer;
begin
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=true;
timer.interval:=1000; //время задержки
buf:=Hstr('39 63 00 00 00 00 00 00 00 00');
SendToServerEx(NickName);
end;

Nickers
18.03.2011, 08:19
1й вариант мимо 2й почти правильно...
Var
timer:TTimer;

procedure Init; //Вызывается при включении скрипта
begin
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=true;
timer.interval:=1000; //время задержки
end;

procedure Free;
begin
timer.Free; //Освобождаем память (Спасает от ошибок и вообще Эстетически верно)))
end;

procedure OnTimer(Sender: TObject); //Процедура вызывается, если (timer.enabled=true),
begin // каждые timer.interval (мс)
buf:=#$00; //Пакет, который посылаем
SendToServerEx(Name);
end;
Вот так...
timer.enabled:=true;
Если присвоить true-таймер будет выполняться (1й раз выполняется по прошествию времени таймера (Если хочешь чтобы при включении скрипта и потом каждые (время таймера), то просто поставь отправку этого пакета перед этой строчкой timer.enabled:=true; или сразу после нее...
Если timer.enabled:=false; таймер останавливается...
В procedure Init; указываешь начально состояние (При включении скрипта работает или нет)(эта процедура выполняется при включении скрипта)

L2.exe
18.03.2011, 09:47
buf:=#$00; //Пакет, который посылаем


Это в какую систему счислений нужно преобразовать вот этот 39 63 00 00 00 00 00 00 00 00 пакет?

Nickers
18.03.2011, 10:04
пакет вот так:
buf:=#$39#$63#$00#$00#$00#$00#$00#$00#$00#$00;
(Если пакет не меняется)

По хорошему нада так делать:
(Удобно, если пакет изменяется)
buf:=#$39; //ID пакета (1я пара)
ReadD(99); //63 00 00 00
ReadD(0); //00 00 00 00
ReadC(0); //00
SendToServerEx(Name);

L2.exe
18.03.2011, 12:34
пакет вот так:
buf:=#$39#$63#$00#$00#$00#$00#$00#$00#$00#$00;

По хорошему нада так делать:
buf:=#$39;
ReadD([Сюды число - десятичный эквивалент 63 00 00 00]);
ReadD(0);
ReadC(0);
SendToServerEx(Name);
Спасибо ещё раз;),я бы не догадался:confused::D

Nickers
18.03.2011, 13:52
L2.exe, Обращайся))

Elees
19.03.2011, 17:39
Nickers, помоги плис написать скрипт, что б в игре при нажатии кнопки "5" отправлялись пакеты 4-5шт с паузой между пакетами в 0.2сек, или такой скрипт невозможен?

dyh9l
19.03.2011, 19:26
ыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыыы)
p.s: при нажатии 5, или допустим в чат писалось 5?)

Nickers
20.03.2011, 09:55
Elees, Могу тока на F5 сделать... (Но там буит пару мелких неудобств) Почти уверен, что можно настроить на любую клавишу, но я не умею и это наверняка потребует другие языки, кроме паскаля))

Elees
21.03.2011, 11:08
Elees, Могу тока на F5 сделать... (Но там буит пару мелких неудобств) Почти уверен, что можно настроить на любую клавишу, но я не умею и это наверняка потребует другие языки, кроме паскаля))

ну на Ф5 тоже пойдёт

Nickers
21.03.2011, 11:35
Примерно так... (У мну нету ПХ так-что не исключены ошибки (Не у верен вот в этом месте: ReadS(2)='.lol')

Чтобы заработало:
1) Вписать свой ник в самом верху скрипта.
2) Сверху вписать кол-во пакетов (Сколько раз пошлет).
4) В игре создать макрос с таким содержанием:
#.lol
# Определяет только чат (В группе за флуд не банит и без палева) можно написать просто .lol это не важно...

5) Поставить макрос на F5.

Если возникнут ошибки пиши где и что пишет... Если не корректно работает - отпиши что и как.


Сам скриптег:
const
Name='Nickers'; //Ник
N=5; //Сколько раз послать пакет

Var
timer : TTimer;
packet:string; j:integer;

procedure OnTimer(Sender: TObject);
begin
inc(j);
buf:=packet;
SendToServerEx(Name);
if j=N then
begin
j:=0;
timer.enabled:=false;
end;
end;

procedure Init;
begin
packet:=Hstr('D0 0F 00 D3 04 00 00 91 01 00 00'); // Пакет

timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=200; //0.2 сек
j:=0;
end;

procedure Free;
begin
timer.free;
end;

begin
if fromclient and (pck[1]=#$38) and (ReadS(2)='.lol') then timer.enabled:=true;
end.

L2.exe
22.03.2011, 07:45
Полезный скриптик:this:

Добавлено через 16 часов 48 минут
var act:integer; me1:char; me2:char; me3:char; me4:char; nm:integer; t1:char; t2:char; t3:char; t4:char; nt:integer; shade:integer; mz:integer; pz:integer; tz:integer; hz:integer;

procedure SendMsg(msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(10);
WriteS('');
WriteS(msg);
SendToClient;
end;

begin


//анализ ИД себя

if nm<>1 then
begin
if FromServer and (pck[1]=#$04) then
begin
me1:=pck[18];
me2:=pck[19];
me3:=pck[20];
me4:=pck[21];
nm:= 1;
end;
end;


//защитная часть

if FromClient and (pck[1]=#$1B) and (pck[2]=#$06) then
begin
act:=1;
SendMsg('AT system on');
end;

if FromClient and (pck[1]=#$1B) and (pck[2]=#$05) then
begin
act:=0;
SendMsg('AT system off');
end;

if FromClient and (pck=#$38#$3C#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
mz:=1;
SendMsg('Advanced m.def on')
end;

if FromClient and (pck=#$38#$3C#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
mz:=0;
SendMsg('Advanced m.def off')
end;

if FromClient and (pck=#$38#$3F#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
pz:=1;
SendMsg('Advanced p.def on')
end;

if FromClient and (pck=#$38#$3F#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
pz:=0;
SendMsg('Advanced p.def off')
end;

if FromClient and (pck=#$38#$42#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
tz:=1;
SendMsg('Anti-target on')
end;

if FromClient and (pck=#$38#$42#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
tz:=0;
SendMsg('Anti-target off')
end;

if FromClient and (pck=#$38#$45#$04#$2B#$00#$00#$00#$03#$00#$00#$00) then
begin
hz:=1;
SendMsg('Hit"n"Hide on')
end;

if FromClient and (pck=#$38#$45#$04#$2D#$00#$00#$00#$03#$00#$00#$00) then
begin
hz:=0;
SendMsg('Hit"n"Hide off')
end;

if FromClient and (pck[1]=#$1B) and (pck[2]=#$03) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;

if act=1 then
begin

if tz=1 then
begin
if FromServer and (pck[1]=#$29) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;

if mz=1 then
begin
if FromServer and (pck[1]=#$48) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) and (pck[2] <> me1) and (pck[3] <> me2) and (pck[4] <> me3) and (pck[5] <> me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;

if pz=1 then
begin
if FromServer and (pck[1]=#$05) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) and (pck[2] <> me1) and (pck[3] <> me2) and (pck[4] <> me3) and (pck[5] <> me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;

if hz=1 then
begin
if FromServer and (pck[1]=#$48) and (pck[6] = me1) and (pck[7] = me2) and (pck[8] = me3) and (pck[9] = me4) then
begin
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
end;
end;

end;


//часть таргета

if FromClient and (pck[1]=#$04) then
begin
nt:=1;
t1:=pck[2];
t2:=pck[3];
t3:=pck[4];
t4:=pck[5];
end;

if FromClient and (pck[1]=#$37) then
begin
nt:=0;
end;

if nt=1 then
begin
if FromClient and (pck[1]=#$30) then
begin
buf:=#$04+t1+t2+t3+t4+#$00#$00#$00#$00#$00#$00#$00 #$00#$00#$00#$00#$00#$00;
SendToServer;
buf:=#$A6+t1+t2+t3+t4+#$00#$00;
SendToClient;
end;
end;

if FromClient and (pck[1]=#$1B) and (pck[2]=#$04) then
begin
buf:=#$04+t1+t2+t3+t4+#$00#$00#$00#$00#$00#$00#$00 #$00#$00#$00#$00#$00#$00;
SendToServer;
buf:=#$A6+t1+t2+t3+t4+#$00#$00;
SendToClient;
end;

//shadowmelt

if FromClient and (pck[1]=#$1B) and (pck[2]=#$07) then
begin
shade:=1;
buf:=#$48#$00#$00#$FE#$FF#$7F#$AB#$03#$00#$E9#$F1# $FF#$FF#$88#$D4#$00#$00#$00#$00#$00#$00;
SendToServer;
SendMsg('Skipped to Shadows');
end;

if FromClient and (pck[1]=#$1B) and (pck[2]=#$08) then
begin
shade:=0;
buf:=#$30#$00#$00;
SendToServer;
SendMsg('Reveal from Darkness');
end;

if shade = 1 then
begin
if FromClient and (pck[1]=#$30) then pck:='';
end;

end.
Что тут не так?

Nickers
22.03.2011, 09:56
L2.exe, Что за скрипт, что должен делать, что именно идет не так, есть ли ошибки?

NLObP
22.03.2011, 12:42
L2.exe, все if ... then .... лучше переделать в case ... of, по типу такого:

//************************************************** ******
// вызывается при приходе каждого пакета, если скрипт включен
//************************************************** ******
begin
if pck='' then exit; //не обрабатываем пустые пакеты
if FromServer then
case pck[1] of //ID пакета
#$11: begin
//debugmsg('S>C Пакет ItemListPacket #$11');
ItemList;
end;
#$21: begin
//debugmsg('S>C Пакет InventoryUpdate #$21');
InventoryUpdate;
end;

end
else
case pck[1] of //ID пакета
#$XX: begin
...
end;
#$XX: begin
...
end;
end;
end.


И ещё, не понятно зачем полностью пакет сверять, можно один два характерных байта.

Nickers
22.03.2011, 12:51
Кто-нибудь за тестите скриптик (http://coderx.ru/showpost.php?p=149778&postcount=59))) А то мне самому интересно робит он или нет)

Breadfan
22.03.2011, 13:02
офаю тему, все это есть в Скриптинге да и NLObP решение показал

Nickers
22.03.2011, 13:22
Breadfan, Эмм... Тема вообще-то для вопросов-ответов... и NLObP дал ответ только на последний из них... Там еще 6 страниц есть, уверяю... Тему прошу не закрывать она бесконечна))

Добавлено через 3 минуты
+ 1ю страницу буду обновлять и пополнять... Мне лично не удобно все искать по форуму через аццкий поисковик...
(Ну у меня то все на компе в папочке отсортировано по алфовиту, но другим буит полезно)

Добавлено через 1 минуту
Голосование я не просто так сделал...

L2.exe
22.03.2011, 16:59
НЕ оФфайте тему!!!!!!!!!!!!!!!!!!!!!!!!!:moil:
Она нужна мне как яйца^^

Добавлено через 9 минут
L2.exe, Что за скрипт, что должен делать, что именно идет не так, есть ли ошибки?

Это антитаргет;)
И так управление - нажимает Social Yes, система запущена, но еще не подключены модули... Подключаем те которые нам нужны...

пишем в ПАТИ ЧАТ:

т+ / т- - Включение/Выелючение АВТО антитаргета - таргет сбрасывется когда вас БЕРУТ НА ТАРГЕТ, тоесть он пытается выделить, а вы сбрасываете!

м+ / м- , п+ / п- - дополнительная магическая и физическая защита, непомню уже сам как работает (да у меня и не работает, изза лагучести инета) но знакомый говорит, если включить их в паре, то сбивает каст когда пытаются кастануть на вас заклинание, и "ичезает" прямо во время физической атаки на вас...

х+ / х- - уход в хайд после каждой своей физической атаки

Там есть еще такая штукенция, что после хайда, предыдущий таргет выберется автоматом (этого не видно в клиенте но он выделится, протестите на мобах)

Social Bow / Social Unaware - исчезнуть и появится, ну это кусок скрипта ХИНТА на его антитаргет.}
Ворованый
Работает вроде,сейчас комп перезагружу и попробую !;)

dyh9l
22.03.2011, 17:49
Nickers, стукни в аську 613322590 если не трудно :)
P.s: херня это а не анти-таргет, я один раз в жизни когда додумался до антитаргета это было клева)))

Nickers
22.03.2011, 18:32
dyh9l, Проблема в том, что я там не сижу)) Могу дать асю, но мне лучше в Skype
В чате, конечно... Я мелкий школьник с писклявым голосом :D

L2.exe
22.03.2011, 18:35
dyh9l
В чате, конечно... Я мелкий школьник с писклявым голосом :D

Ухахахах:D:D

Добавлено через 1 минуту
Nickers, стукни в аську 613322590 если не трудно :)
P.s: херня это а не анти-таргет, я один раз в жизни когда додумался до антитаргета это было клева)))
Можешь скинуть,до чего ты додумался?:D

dyh9l
22.03.2011, 19:21
Nickers, ыыыыыыыыыыы, я добавил в скайп)

Nickers
08.04.2011, 17:18
Ап же

L2.exe
21.04.2011, 00:25
а можно сделать так....написать какой нибудь скрипт что бы он блокировал некоторые пакеты?!;)

Nickers
21.04.2011, 08:17
Вроде где-то обсуждалось... Возможно даже здесь... Но я не понимаю зачем это вообще))

L2.exe
21.04.2011, 13:02
Вроде где-то обсуждалось... Возможно даже здесь... Но я не понимаю зачем это вообще))

Помнишь я тебе рассказывал о "загадочном продавце",у меня есть идейки ;)

dyh9l
21.04.2011, 14:02
а можно сделать так....написать какой нибудь скрипт что бы он блокировал некоторые пакеты?!;)
т.к. ты не дал инфы о какиех пакетах идет речь то

begin
if (pck=Hstr('ну тут сам пакет как ты понял')) then pck:='';
//pck:='' - это блочить пакет
end.

L2.exe
21.04.2011, 16:51
т.к. ты не дал инфы о какиех пакетах идет речь то

begin
if (pck=Hstr('ну тут сам пакет как ты понял')) then pck:='';
//pck:='' - это блочить пакет
end.


Благодарю!:cool:

Nickers
21.04.2011, 20:52
о "загадочном продавце"
Мде) Ток помни, что ты можешь действовать только на пакеты, которые идут от тебя (Не дать им дойти) или к тебе (Не на что не влияет)...
Врятли в этом суть)) Но можно отловить пакеты и просто повторить в точности действия(то рас) или с помощью суммона (Это нада тож по координатам смотреть) Удачи тебе))

dyh9l
21.04.2011, 20:54
Угу, допустим, ты убьешь все пакеты NpcInfo и побежишь на поляну с аграми, клиент видеть мобов не будет, но они будут тебя бить

Breadfan
22.04.2011, 08:45
и пох ваще, блочишь нпсинфо в окне с пп\варк - чтоб не рисовали то чего им абсолютно не требуетса - некоторый выигрышь в быстродействии будет.

wimax
22.04.2011, 20:59
dyh9l, клиент кританет проста по крайней мере у меня критует =)

L2.exe
22.04.2011, 21:50
dyh9l, клиент кританет проста по крайней мере у меня критует =)

У меня всё отлично работает:cool:

OpenA1r
14.05.2011, 18:14
Cpasibo)

Diverclaim
15.05.2011, 18:41
Пытаюсь сделать управление скриптом из игры (Aion) и делаю это при помощи эмоций. Проверяю на пакет так:
if FromClient and (ReadC(1)=$C9) and (ReadH(4)=$5015) then
И все отлично срабатывает, НО пакет эмоции все таки проходит на сервер, что мне довольно сильно мешает. Есть ли способ блокировать этот самый пакет эмоции? Заранее спасибо.

dyh9l
15.05.2011, 18:44
pck:='';

Diverclaim
15.05.2011, 21:27
dyh9l Большое спасибо)
Еще вопросик:
В Init я задаю переменную PlayerID (string):

PlayerID := '46 21 3B 00';

Мне она нужна далее в скрипте. Потом когда приходит пакет мне надо сравнить этот PlayerID с 4 байтами в пакете. Я знаю только 1 способ как это можно сделать:

if ReadD(4)=$003B2146 then

Но данный способ не подходит т.к. при другом PlayerID мне надо будет везде менять сравнения. Есть ли другой способ?

dyh9l
15.05.2011, 21:54
а нахера ИД стринговое?)
P.s: очень трудно понять что нужно тебе:(

NLObP
15.05.2011, 23:55
Diverclaim, сделай примерно так


var
PlayerId : integer;
...
procedure Init
Begin
PlayerId:=$003B2146;
end;
...
if PlayerId=ReadD(4) then
...

Diverclaim
16.05.2011, 13:11
Ну id в стринге чтобы удобно было из пакета копировать)
Ладн тогда другой вопрос:
Мне надо задать переменную типа Single (4байта) и записать ее в buf (также как делается в "Преобразованиях"). Нигде не могу найти конвертации single -> string (hex). Подскажите кто знает)

L2.exe
05.12.2011, 18:57
Так,вообщем я захотел подогнать под себя Локомотив от Alexus ,а именно нужны таймеры на скиллы и...что бы он говорил по Русски когда его игрок атаковывает,втыкал весь день в монитор,но конструктор мой работать не хочет:cray:
В делфи не шарю,так что попрошу вас помочь мне;) А то скоро мозг лопнет,от переизбытка новой информации:D


За раннее благодарю:cool:



delphi support (http://delphi.support.uz/)

L2.exe
11.12.2011, 23:46
Так,вообщем я захотел подогнать под себя Локомотив от Alexus ,а именно нужны таймеры на скиллы и...что бы он говорил по Русски когда его игрок атаковывает,втыкал весь день в монитор,но конструктор мой работать не хочет:cray:
В делфи не шарю,так что попрошу вас помочь мне;) А то скоро мозг лопнет,от переизбытка новой информации:D


За раннее благодарю:cool:



delphi support (http://delphi.support.uz/)

Жлобы,как будто все из Израиля:diablo::p

Добавлено через 3 часа 35 минут
Прошу прощения за крайне грубое не знание паскаля,но всё равно,помогите,не проходите мимо...
Как я понял,это основная часть скрипта
begin
if (pck=hstr('62 ED 02 00 00 01 00 00 00 04 00 00 00 9D 01 00 00 08 00 00 00 ')) then
begin
buf:=HsTR('39 9D 01 00 00 00 00 00 00 00 ');
sendtoserverex(NickName);
end;
if (pck=hstr('62 5C 00 00 00 01 00 00 00 04 00 00 00 63 00 00 00 02 00 00 00 ')) then
begin
buf:=HsTR('39 63 00 00 00 00 00 00 00 00 ');
sendtoserverex(NickName);
end;
end.
Что сюда то писать?!
procedure Init; //Вызывается при включении скрипта
begin
???????????
end;

procedure Free; //Вызывается при выключении скрипта
begin
????????????
end;
Если я не прав,подскажите,что ,куда,зачем... можно в кратце:rolleyes:

supernewbie
11.12.2011, 23:49
procedure Init; //Вызывается при включении скрипта
begin
???????????
end;

procedure Free; //Вызывается при выключении скрипта
begin
????????????
end;
что ,куда,зачем
читай комменты епт

L2.exe
21.12.2011, 00:46
читай комменты епт
Пацан,за базаром своим следи.

Pinko
21.12.2011, 15:53
procedure Init; //Вызывается при включении скрипта
begin
???????????
при включении скрипта- выполнить то да се
пр.
стакан пустой
Налить Стакан Водки.
end;

procedure Free; //Вызывается при выключении скрипта
begin
????????????
ежле в то время когда скрипт работает и не кто
НЕ Випил Стакан
али еше налили
ТО
Вылить водку туда где была
чтоби бил стакан пуст
end;

L2.exe
22.12.2011, 23:31
procedure Init; //Вызывается при включении скрипта
begin
???????????
при включении скрипта- выполнить то да се
пр.
стакан пустой
Налить Стакан Водки.
end;

procedure Free; //Вызывается при выключении скрипта
begin
????????????
ежле в то время когда скрипт работает и не кто
НЕ Випил Стакан
али еше налили
ТО
Вылить водку туда где была
чтоби бил стакан пуст
end;

Благодарю)Только с водкой ты переборщил :D: