ылетает когда? У меня траблы при выборе чара. Приспособился делать, по совету людей, так: запускаю ПКХ, снимаю галочку ПЕРЕХВАТ, запускаю Ла2, ввожу логин/пароль, выбираю сервер, ставлю галочку ПЕРЕХВАТ, выбираю чара, выбираю скрипт и запускаю его. Так у меня практически всегда работает.
хм ну стакой методикой проще додумывать что там л2пнх шлёт клиенту :)
b]Lafine[/b],
Хочется узнать как изменить его под себя....
Тоесть - что заменить чтоб манорить другого моба и другими семенами? (пример - голденсода и еуесерчер под дионом)
И еще если я не туран мне надо бы бафы закоментировать...какую именно часть чтоб ниче лишнего незадеть?
Хочется узнать как изменить его под себя....
Тоесть - что заменить чтоб манорить другого моба и другими семенами? (пример - голденсода и еуесерчер под дионом). И еще если я не туран мне надо бы бафы закоментировать...какую именно часть чтоб ниче лишнего незадеть?
Изменяй константы.
Код:
const
MOB=1000794; // имя моба Blade Stakato 41x2 - ID моба+1000000, берем в npcs.ini
Seed=5221; //Chilly Cobol - семечки, берем в itemsid.ini
Harvester=5125; //Harvester
MaxMobCount=2;
SpiritofOgre='2F 6D 00 00 00 00 00 00 00 00'; //баф
HealingPotion=1061; //ID бутылки лечения
Измени значения координаты Z при каче на других мобах (не знаю правда почему Z)
Код:
//Если приходит пакет NPCInfo от сервера, то проверяем чтобы это был нужный нам моб и находился в нужной области
//координат, то запоминаем ИД моба в массив.
if FromServer and (pck[1]=#$16) then begin
//Думаю тут надо пояснить что и как. Параметр -7750 и -8184 это координаты по оси Z.
//Сделано это для того чтобы персонаж не отвлекался на других мобов в округи, а занимался только этими двумя :)
if (ReadD(6)=MOB) and (ReadD(22)<-7750) and (ReadD(22)>-8184) then begin
count:=0;
for i:=1 to MaxMobCount do begin
if (MobID[i]=ReadD(2)) then count:=i;
end;
if (count = 0) then begin
for i:=1 to MaxMobCount do begin
if (MobID[i]=0) then begin
MobID[i]:=ReadD(2);
break;
end;
end;
end;
Закоменти этот кусок, чтобы не бафаться
Код:
//Тут проверяем закончилось ли действие Баффа и если закончилось то еще раз используем
if FromServer and (pck[1]=#$7F) then begin
buf:=Hstr(SpiritofOgre);
SendToServer;
Attack(MobInWarID,0,0,0);
end;
Добавлено спустя 39 минут 47 секунд:
Захожу на полянку недалеко от верхнего выхода Диона.
Запускаю скрипт, запускаю в клиенте соц действие YES
Открывается рюкзак, навожу на моба и жму на семечку....
Убивается моб и все ниче непроисходит...
Пробовал заманорить так 2моба и дальше сам он не действовал...
--------
Собственно вот срипт с моими правками...
Банки уменьшил под свое ХП (хоя вообще никчему, мобы почти некоцают меня)
Координаты Z изменил конечно но подозреваю что немного нетак...
Код:
//Скрипт для манора в Садах Евы турантом 47 лвла. Включаем скрипт и потом социальное YES для начала работы
// убиваем пару Стакато и дальше он сам сражается.
const
MOB=1000265; // Monster Eye Searcher 265
Seed=5020; //golden coda
Harvester=5125; //Harvester
MaxMobCount=2;
SpiritofOgre='2F 6D 00 00 00 00 00 00 00 00';
HealingPotion=1061;
var
MobID: array [1..MaxMobCount] of integer;
i,count:integer;
CurHP,MaxHP:integer;
MobName, MobX, MobY, MobZ:integer;
MobInWarID, MobInWarName: integer; // ИД моба и Имя моба(номер моба)
SocialID:integer; // ИД соц действия
status : boolean; // Начинать работать или нет
SeedID:Integer;
HarvesterID: integer;
HealingPotionID:integer;
procedure Init; //Вызывается при включении скрипта
begin
MobID[1]:=0;
MobID[2]:=0;
MobInWarID:=0;
end;
procedure Free; //Вызывается при выключении скрипта
begin
end;
procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения
begin
end;
procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения
begin
end;
procedure SendMsg(Msg:string);
begin
buf:=#$4A;
WriteD(0);
WriteD(1);
WriteS('ПОМОШНИК ПВП');
WriteS(Msg);
SendToClient;
end;
function ItemSearch(ItemName:integer):Cardinal;
var i,y:integer;
TempName:Cardinal;
begin
result:=0;
i:=1;
while i<Length(pck)-4 do begin
y:=i;
TempName:=ReadD(y);
Inc(i);
if TempName=ItemName then begin
result:=ReadD(y-8);
end;
end;
end;
procedure Target(ObjectID: Integer);
begin
buf:=#$04;
WriteD(ObjectID);
WriteD(0);
WriteD(0);
WriteD(0);
WriteC(1);
SendToServer;
end;
procedure UseItem(ItemID:integer);
begin
buf:=#$14;
WriteD(ItemID);
WriteD(0);
SendToServer;
end;
procedure Attack(TargetID,TargetX,TargetY,TargetZ:integer);
begin
buf:=#$04;
WriteD(TargetID);
WriteD(TargetX);
WriteD(TargetY);
WriteD(TargetZ);
WriteD(0);
SendToServer;
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromClient and (pck[1]=#$1B) then
begin
SocialID:=ReadD(2);
case SocialID of
//социальное действие Yes для начала манора
6:begin
Status:=true;
buf:=#$0f;
SendToServer;
end;
//социальное действие No для окончания
5:begin
Status:=false;
end;
end;
end;
//пакет просмотра инвентаря. Находим ИД семян, харвестера и бутылок для дальнейшего использования.
if FromServer and (pck[1] = #$1B) then begin
SeedID:=ItemSearch(Seed);
HarvesterID:=ItemSearch(Harvester);
HealingPotionID:=ItemSearch(HealingPotion);
end;
//Пакет InventoryUpdate - не вписывал пока. Как только разберусь с самим пакетом, так сразу и сделаю
if FromServer and (pck[1] = #$27) then begin
// temp:=ItemSearch(GreaterCPP);
// if temp <> 0 then GreaterCPID:=temp;
// temp:= ItemSearch(GreaterHP);
// if temp <> 0 then GreaterHPID:=temp;
// temp:= ItemSearch(QuickHP);
// if temp <> 0 then QuickHPID:= temp;
// ShowHTML(IntToStr(GreaterCPID)+' '+IntToStr(GreaterHPID)+' '
// +IntToStr(QuickHPID))
end;
//Если приходит пакет NPCInfo от сервера, то проверяем чтобы это был нужный нам моб и находился в нужной области
//координат, то запоминаем ИД моба в массив.
if FromServer and (pck[1]=#$16) then begin
//Думаю тут надо пояснить что и как. Параметр -7750 и -8184 это координаты по оси Z.
//Сделано это для того чтобы персонаж не отвлекался на других мобов в округи, а занимался только этими двумя :)
if (ReadD(6)=MOB) and (ReadD(22)<-3300) and (ReadD(22)>-3632) then begin
count:=0;
for i:=1 to MaxMobCount do begin
if (MobID[i]=ReadD(2)) then count:=i;
end;
if (count = 0) then begin
for i:=1 to MaxMobCount do begin
if (MobID[i]=0) then begin
MobID[i]:=ReadD(2);
break;
end;
end;
end;
// MobID:=ReadD(2);
// MobName:=ReadD(6);
// MobX:=ReadD(14);
// MobY:=ReadD(18);
// MobZ:=ReadD(22);
// Sendmsg(IntToStr(MobID[1]));
// Sendmsg(IntToStr(MobID[2]));
// SendMsg(IntToStr(MobInWarID));
// Attack(MobID,MobX,MobY,MobZ);
end;
end;
//Если приходит пакет удаления объекта и ИД объекта равен мобу в массиве, то удаляем ИД с массива
if FromServer and (pck[1]=#$12) then begin
for i:=1 to MaxMobCount do begin
if (MobID[i]=ReadD(2)) then MobID[i]:=0;
end;
end;
//Тут я под пакет MoveToLocation спрятал выборку следующего моба для атаки. Спрятал в этот пакет, потому что
//двигаются часто кто нить рядом, а ставить при обработке при любом пакете - слишком нагружать скрипт
if FromServer and (pck[1]=#$01) then begin
For i:=1 to MaxMobCount do begin
if MobID[i]<>0 then begin
MobInWarID:=MobID[i];
Attack(MobInWarID,0,0,0);
end;
end;
end;
// ПРиходит побтверждение что цель выбрана и атакуем цель
if FromServer and (pck[1]=#$A6) then begin
if (ReadD(2)=MobInWarID) then Attack(MobInWarID,0,0,0);
end;
//Пока у моба не 0 ХП забрасываем семечку. Если данные о своих ХП то смотрим и выпиваем бутылку
if FromServer and (pck[1]=#$0E) then begin
if (ReadD(2)=MobInWarID) then begin
if (ReadD(14)<>0) and (SeedID<>0) then UseItem(SeedID);
end;
if (pck[6]=#$04) then begin
CurHP:=ReadD(14);
MaxHP:=ReadD(22);
if (CurHP<500) then UseItem(HealingPotionID);
end;
end;
if FromServer and (pck[1]=#$16) then begin
if (ReadD(2)=MobInWarID) and (HarvesterID<>0) then UseItem(HarvesterID);
end;
// Тут проверяем закончилось ли действие Баффа и если закончилось то еще раз используем
// if FromServer and (pck[1]=#$7F) then begin
// buf:=Hstr(SpiritofOgre);
// SendToServer;
// Attack(MobInWarID,0,0,0);
// end;
// SendMsg(IntToStr(MobID));
// SendMsg(IntToStr(MobName));
end.
Настройте плиз скрипт на этих мобов что я указал на эти семечки и на это место ПОЖАЛУСТА!!
Я уж сравнивая - погляжу что и как там исправлять если что...
нефиг в каждом посте искать вопрос исчи тему или создавай новую, и пости там нефиг захломлять флудо темы месагами не в тему, ппц чё я ща написал модер снеси флуд :) что б неповадно было
Люди, неужели я так многого прошу... Вы же скриптеры вам что так помочь трудно?
Вечерком гляну, потерпи.
Код:
//Скрипт для манора by Lafine
//modified by NLObP
//Включаем скрипт и потом социальное YES для начала работы
{
Скрипт распространяется как есть, и я не несу ответственности
за то, что ВЫ натворили у себя, его используя.
}
//***************************************************************
const
Name='Mathilda'; //имя чара для которого включаем скрипт
MobID=1000265; //ID моба Monster Eye Searcher 265 + 1000000
SeedID=5025; //Golden Coda
HarvesterID=5125;
HPotionID=1060;
MaxMobCount=20;
PercentHP=70; //% HP при котором начинать пить бутылки
MEsit=55; //при каком количестве хп в % надо сесть и подкопить хп
MEup=90; //при каком количестве хп в % надо встать после отдыха
//установить константу в зависимости от типа игры (С4 или Интерлюд)
IL=true; //true - IL, false - C4
//***************************************************************
var
MobsObjectID: array [1..MaxMobCount] of integer;
offs1, i, count:integer;
//мои
CurHP, MaxHP, MyID, x, y, z, but, sidim, vstaem : integer;
//МОбов
MobX, MobY, MobZ : integer;
status, sit : boolean; //Начинать работать или нет
SeedObjectID, HarvesterObjectID, HPotionObjectID : integer;
timer1: TTimer;
//***************************************************************
procedure Init; //Вызывается при включении скрипта
begin
if il then begin
//CharInfo
offs1:=48; //44 для С4, 48 для IL
end else begin
offs1:=44;
end;
count:=1;
timer1:=TTimer.Create(nil);
timer1.OnTimer:=@OnTimer1;
timer1.enabled:=true; //таймер по умолчанию включен
timer1.interval:=5000; //через каждые 5сек будем обновлять
sit:=false;
status:=false;
end;
//***************************************************************
procedure Free; //Вызывается при выключении скрипта
begin
for i:=1 to MaxMobCount do begin
MobsObjectID[i]:=0;
end;
timer1.free;
end;
//***************************************************************
procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения
begin
end;
//***************************************************************
procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения
begin
end;
//******************************************************************************
//сообщения в приват, на сервер не отправляются
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
//***************************************************************
procedure OnTimer1(Sender: TObject);
begin
if (CurHP<but) and (HPotionObjectID<>0) then begin
UseItem(HPotionObjectID);
end;
if (CurHP<sidim) and (sit=false) then begin
buf:=HStr('45 00 00 00 00 00 00 00 00 00 '); //сесть
SendToServerEx(Name);
sit:=true;
end;
if (CurHP>vstaem) and (sit=true) then begin
buf:=HStr('45 00 00 00 00 00 00 00 00 00 '); //встать
SendToServerEx(Name);
sit:=false;
end;
end;
//***************************************************************
function ItemSearch(ItemName:integer):Cardinal;
var i,y:integer;
TempName:Cardinal;
begin
result:=0;
i:=1;
while i<Length(pck)-4 do begin
y:=i;
TempName:=ReadD(y);
Inc(i);
if TempName=ItemName then begin
result:=ReadD(y-8);
end;
end;
end;
//***************************************************************
procedure Target(ObjectID : Integer);
begin
buf:=#$04;
WriteD(ObjectID);
WriteD(x);
WriteD(y);
WriteD(z);
WriteC(0);
SendToServerEx(Name);
end;
//***************************************************************
procedure UseItem(ObjectID : integer);
begin
buf:=#$14;
WriteD(ObjectID);
WriteD(0);
SendToServerEx(Name);
end;
//***************************************************************
//2F=RequestMagicSkillUse:dMagicID)d(CtrlPressed)b(ShiftPressed)
procedure MagicSkillUse(MagicID:integer);
begin
buf:=#$2F;
WriteD(MagicID);
WriteD(0);
WriteC(0);
SendToServerEx(Name);
end;
//***************************************************************
procedure StatsUpdate;
var
i: integer;
begin
for i:=0 to ReadD(6)-1 do begin
case pck[i*8+10] of
#$09: CurHP:=ReadD(i*8+14);
#$0A: MaxHP:=ReadD(i*8+14);
end;
end;
if (MaxHP<>0) then begin // вычисляем процентное соотношение хп
but:=Round((MaxHP/100)*PercentHP); // при каком количестве хп юзать бутылку лечения
sidim:=Round((MaxHP/100)*MEsit); // при каком количестве хп надо сесть и подкопить хп
vstaem:=Round((MaxHP/100)*MEup); // при каком количестве хп надо встать после отдыха
end;
end;
//******************************************************************************
// вызывается при приходе каждого пакета, если скрипт включен
//******************************************************************************
begin
//****************************************************************************
//не обрабатываем пустые пакеты
if pck='' then exit;
//****************************************************************************
if (ConnectName=Name) and FromServer then begin
case pck[1] of
//Тут я под пакет MoveToLocation спрятал выборку следующего моба для атаки. Спрятал в этот пакет, потому что
//двигаются часто кто нить рядом, а ставить при обработке при любом пакете - слишком нагружать скрипт
#$01: begin
For i:=1 to MaxMobCount do begin
if MobsObjectID[i]<>0 then begin
Say('Target...');
Target(MobsObjectID[i]);
// if (SeedObjectID<>0) then UseItem(SeedObjectID);
// say('Use Seed');
// count:=i;
end;
end;
end;
#$04: begin
Say('Запомнил координаты и ID');
//пакет с инфой о моём чаре
i:=2;
X:=ReadD(i); //получаю координату х моего чара
Y:=ReadD(i); //получаю координату у моего чара
Z:=ReadD(i); //получаю координату z моего чара
//Запоминаем ИД
i:=18;
MyID:=ReadD(i); //получаю ид моего чара
//смещение переменное, зависит от имени (LenName*2+2)
i:=i+(Length(Name)*2+2)+offs1; //44 для С4, 48 для IL
MaxHP:=ReadD(i);
CurHP:=ReadD(i);
end;
//принят пакет Die
#$06: begin
if (MobsObjectID[count]=ReadD(2)) and (HarvesterObjectID<>0) then begin
UseItem(HarvesterObjectID);
say('Use Harvester');
end;
end;
//StatsUpdate
#$0E: begin
//Пока у моба не 0 ХП забрасываем семечку. Если данные о своих ХП то смотрим и выпиваем бутылку
if (MyID=ReadD(2)) then StatsUpdate; //обновление информации о хп
if (MobsObjectID[count]=ReadD(2)) then
if (ReadD(14)<>0) and (SeedObjectID<>0) then begin
UseItem(SeedObjectID);
say('Use Seed');
end;
end;
//принят пакет DeleteObject
#$12: begin
for i:=1 to MaxMobCount do begin
if (MobsObjectID[i]=ReadD(2)) then MobsObjectID[i]:=0;
end;
end;
//Если приходит пакет NPCInfo от сервера, то проверяем чтобы это был нужный нам моб
//и находился в нужной области координат, то запоминаем ИД моба в массив.
//16=NpcInfo:h(ObjectID)d(NpcTypeID)d(IsAttackable)d(X)d(Y)d(Z)d(Heading)d(d)
//d(Maspd)d(Paspd)d(runSpd)d(walkSpd)d(swimRSpd)d(swimWSpd)d(flRSpd)d(flWSpd)
//d(FlyRSpd)d(FlyWSpd)f(ProperMul)f(Paspd)f(CollisRadius)f(CollisHeight)d(RHand)
//d(d)d(LHand)b(nameabove)b(isRun)b(isInFight)b(isAlikeDead)b(isSummoned)s(Name)
//s(Title)d(d)d(d)d(karma?)d(abnEffect)d(d)d(d)d(d)d(d)b(c)b(Team)f(collisRadius)
//f(collisHeight)d(d)
#$16: begin
say('NPCInfo...');
//если можно атаковать
if (MobID=ReadD(6)) and (ReadD(10)=1) and (pck[120]=#$00) then begin
//перебираем базу и ищем свободную ячейку в ней
for i:=1 to MaxMobCount do begin
//запоминаем моба в свободную ячейку
if (MobsObjectID[i]=0) or (MobsObjectID[i]<>ReadD(2)) then begin
MobsObjectID[i]:=ReadD(2);
count:=i;
Say('count='+inttostr(count)+' i='+inttostr(i));
break;
end;
end;
end;
end;
//Если приходит пакет удаления объекта и ИД объекта равен мобу в массиве, то удаляем ИД с массива
//пакет просмотра инвентаря. Находим ИД семян, харвестера и бутылок для дальнейшего использования
#$1B: begin
SeedObjectID:=ItemSearch(SeedID);
HarvesterObjectID:=ItemSearch(HarvesterID);
HPotionObjectID:=ItemSearch(HPotionID);
end;
//InventoryUpdate
#$27: begin
case ReadD(12) of
1060,1061: begin //Healing Potion, Lesser Healing Potion
if HPotionObjectID=0 then begin
HPotionObjectID:=ReadD(8);
Say('Запомнили ID HPotion...');
end;
end;
5125: begin //Harvester
if HarvesterObjectID=0 then begin
HarvesterObjectID:=ReadD(8);
Say('Запомнили ID Harvester...');
end;
end;
5025: begin //Golden Coda
if SeedObjectID=0 then begin
SeedObjectID:=ReadD(8);
Say('Запомнили ID Seed...');
end;
end;
end;
end;
{ //Тут проверяем закончилось ли действие Баффа и если закончилось то еще раз используем
#$7F: begin
end;
} //приходит побтверждение что цель выбрана и атакуем цель
{ #$A6: begin
if (MobsObjectID[count]=ReadD(2)) then begin
Target(MobsObjectID[count]);
say('Attack...');
end;
end;
} end;
end;
//****************************************************************************
if (ConnectName=Name) and FromClient then begin
case pck[1] of
#$1B: begin
case ReadD(2) of
//социальное действие Yes для начала манора
$06: begin
//не передаем серверу
pck:='';
Status:=true;
//RequestItemList
buf:=#$0F;
SendToServerEx(Name);
end;
//социальное действие No для окончания
$05: begin
//не передаем серверу
pck:='';
Status:=false;
end;
end;
end;
//ValidatePosition пакет от клиента с моими кординатами
#$48: begin
X:=ReadD(2); //получаю координату х
Y:=ReadD(6); //получаю координату у
Z:=ReadD(10); //получаю координату z
end;
end;
end;
end.