PDA

Просмотр полной версии : Интересный скрипт!


pmen
21.05.2009, 01:08
Привет всем вот я написал скриптик на регенерацию хп мп цп! Вот мне интересно можно ли сделать этот скрипт не используя ValidatePosition?
Например типо скрипта на Автоаугумент! Или как например по вашему можно модифицировать скрипт?Да! Вот еще каогда сервер рестартается то мне приходится переписывать пакеты....а как сделать чтобы скрипт запоминал сам данные пакеты? Хроники Интерлуде!

QaK
21.05.2009, 09:17
Привет всем вот я написал скриптик на регенерацию хп мп цп! Вот мне интересно можно ли сделать этот скрипт не используя ValidatePosition?при чем тут вообще ValidatePosition?
Или как например по вашему можно модифицировать скрипт?скрипт можно модифицировать безконечно.Например: убрать тупое переписывание пакета, а оформить грамотно процедурку. Как это делать - объяснять не буду, кури примеры скриптов.
З.Ы. ты бы хоть хроники написал чтоли.

Fer123
21.05.2009, 09:46
Когда сервер рестартается назначается новые обджектИД нпц. Поэтому твой пакет 04=Action:d(ObjectID)d(OriginX)d(OriginY)d(OriginZ )c(ShiftFlag)
уже не рабоатет

mks
21.05.2009, 09:59
#$Ж#$Э#$С#$Т#$ь

pmen
21.05.2009, 11:23
Я смотрел примеры! Пакеты это запросы к баферу! Незнаю как сделать чтобы он запоминал именно то что мне нужно....а не какой другой request или action.. Примеры уже все перекурил! Я в этом новичек....(

QaK
21.05.2009, 11:34
pmen, сначала идет выделение нужного НПЦ как написал Fer123, чтобы получить нужный О_ИД нужного нпц даже если рестартанул - нужно вести мониторинг всех нпц в округе, при старте скрипта сделать релогин, после входа в мир ла2 ловить пакеты NPCInfo и собирать из них информацию: Имя перса и его О_ИД, и потом, соответственно подставлять в пакет нужный О_ИД нужного НПЦ, примеры плохо курил.

pmen
21.05.2009, 12:25
Я говорю я еще нубик в этом ((

Вот смотрите я сделать небольшую вещь и скрипт стал работать лучше и быстрее! Я чесно неочень понимаю еще( Можете показать на деле как оптимизировать скрипт!?

Fer123
21.05.2009, 12:38
Ну во-первых поменяй вот такие записи
#$21+#$6E+#$00+#$70+#$00+#$63+#$00+#$5F+#$00+ #$32+#$00+#$36+#$00+#$38+#$00+#$34+#$00+#$37+#$00+ #$37+#$00+#$39+#$00+#$31+#$00+#$30+#$00+#$5F+#$00+ #$72+#$00+#$65+#$00+#$73+#$00+#$74+#$00+#$6F+#$00+ #$72+#$00+#$65+#$00+#$20+#$00+#$68+#$00+#$70+#$00+ #$20+#$00+#$31+#$00+#$00+#$00;
на

buf:=#$21;
WriteS('npc_268477910_restore hp 1');
SendToServer;

Здесь 268477910 как раз тот самы ОбджекИД который надо мониторить по пакетам NPCInfo

pmen
21.05.2009, 12:51
Вот я заменил как ты сказал и на этом выбивает еррор



Добавлено через 1 минуту
А все я поправил нужно было ковычки поставить =)

Добавлено через 1 минуту
Видите я в этом скрипте использую пакет на Validate Positin? А можно от него както избавиться?)

Fer123
21.05.2009, 12:56
хмм а зачем он вообще нужен?

pmen
21.05.2009, 12:59
хмм а зачем он вообще нужен?

Это место расположение бафера....Я птылся просто убрать пакет этот но не получалось...скрипт без него не работает

QaK
21.05.2009, 13:02
pmen, на деле показать = зделать все за тебя, учись переводить строки, в ПНХ есть специальная штука для этого.

pmen
21.05.2009, 13:04
вот я уже учусь ! Спасибо Fer123 перевел в нормальный вид пару строк)

Добавлено через 1 минуту
Вот Fer123 мне показал эту функцию и я ее уже знаю и могу использовать=) Просто я еще многое незнаю и может что-то на ваш взгляд в скрипте можно изменить?

QaK
21.05.2009, 13:04
validateposition - это не место бафера, это клиент отсылает свои координаты на сервак, для сравнения.

pmen
21.05.2009, 13:06
validateposition - это не место бафера, это клиент отсылает свои координаты на сервак, для сравнения.
Да ты прав сорри) Я использую ValidatePosition для того чтобы сервер думал что я нахожусь рядом с бафером

QaK
21.05.2009, 13:06
Вот Fer123 мне показал эту функцию и я ее уже знаю и могу использовать=)а почитать мануал, для написания скрипта, чтобы самому все нужные для себя функции/процедуры найти?

pmen
21.05.2009, 13:17
Я читал! Просто не все функции понимаю как использовать

Добавлено через 10 минут
Так как вы думаете что еще можно заменить?

NLObP
21.05.2009, 13:39
Можете показать на деле как оптимизировать скрипт!?

Можно попробовать
buf:=#$04+#$D6+#$A5+#$00+#$10+#$80+#$41+#$02+#$00+ #$F0+#$22+#$FF+#$FF+#$23+#$F5+#$FF+#$FF+#$00;
заменить на
buf:=hstr('04 D6 A5 00 10 80 41 02 00 F0 22 FF FF 23 F5 FF FF 00');

Добавлено через 6 минут
Ну во-первых поменяй вот такие записи

на

buf:=#$21;
WriteS('npc_268477910_restore hp 1');
SendToServer;

Здесь 268477910 как раз тот самы ОбджекИД который надо мониторить по пакетам NPCInfo

Я вот так мониторил

begin
--8<--
//16=NpcInfo
#$16: begin
msg.Lines.Add('S>Пакет NpcInfo #$16'+inttostr(ReadD(2)));
// OID ID
AppendNpc(ReadD(2), ReadD(6)); //добавляем в базу данных
if (FishermanID=ReadD(6)-kID) then begin
EditFishermanOID.text:=inttostr(ReadD(2));
FishermanOID:=strtoint(EditFishermanOID.text);
if java then begin
//java
getbuylist:='npc_'+inttostr(FishermanOID)+'_Buy 411';
getselllist:='npc_'+inttostr(FishermanOID)+'_Sell' ;
getmultisell:='npc_'+inttostr(FishermanOID)+'_mult isell 009';
end;
end;
end;
--8<--

pmen
21.05.2009, 13:42
Вот что у меня получилось=)



[/QUOTE]

J-Fobos
21.05.2009, 14:05
Да ты прав сорри) Я использую ValidatePosition для того чтобы сервер думал что я нахожусь рядом с бафером
if FromClient and (pck[1]=#$48) then ValidatePosition:=pck;
С такой строчкой ValidatePosition запоминается постоянно. В переменной ValidatePosition всегда будут ваши реальные координаты, а не координаты того места что рядом с бафером. Обьясните плиз зачем отсылать этот пакет.

pmen
21.05.2009, 15:19
А как можно оптимизировать это

buf:=hstr('04 D6 A5 00 10 80 41 02 00 F0 22 FF FF 23 F5 FF FF 00'); //открытие окна бафера

и это
buf:=hstr('48 80 41 02 00 F0 22 FF FF 23 F5 FF FF 87 CC 00 00 00 00 00 00');//validateposition
Неодскажете?)

pmen
22.05.2009, 17:24
я щас немного подделал скрипт и он вообще летает! Но все же 1 трудность.....Object id нужно менять

Добавлено через 2 минуты
Никак с мониторингом норм не разберусь(

J-Fobos
22.05.2009, 17:41
pmen, ответьте на вопрос в посте #20 и скажу как мониторить =р

pmen
22.05.2009, 18:15
Короче! Посмотрите внимательно..Сначало скрипт запоминает мой ValidatePositionя ,затем посылает ValidatePosition (я стою у бафера) серверу чтобы он думал что я у бафера,а в конце посылается раннее запомненый ValidatePosition.Без этой функции после использовании скрипта я уходил в инвиз, а эта функция после исполнения скрипта возвращает меня на место и я не изчезаю!

Добавлено через 1 минуту
Так что поможете с тем чтобы я не мучался с заменой obj.id
Вот моя последняя версия скрипта


Добавлено через 10 минут
Можете Мониторинг внедрить в этот скрипт( а то бесит менять obj.Id

Добавлено через 16 минут
Да вот еще 1 проблемка...Меня иногда,когда я использую скрипт, тпшит к баферу...Как этого избежать

J-Fobos
22.05.2009, 18:35
Сразу хочу сказать что тот вариант который предлагает нло очень хорош и универсален. Я предлагаю вариант чуть попроще, но не настолько универсальный и удобный.

Для того чтоб каждый раз не менять objectid будем записывать в переменную при запуске скрипта. Брать его будем из пакета Actoin (#$1F это для камаел и выше). В скрипт добавляем процедуру:
procedure Init; //Вызывается при включении скрипта
begin
SendMsc('Возьмите в таргет бафера');
b:=false;
end;

В главный блок добавляем условие:
if FromClient and (pck[1]=#$1F)and (not b) then
begin
a:=ReadD(2);
SendMsc('ObjectID = '+inttostr(a));
b:=true;
end;

В условие где уже диалог идет добавим and(b) чтоб если ObjectID не был определен диаог не открывался. Сами команды где ObjectID будет использоватся будут выглядеть например так:
WriteS('npc_'+inttostr(a)+'_restore mp 1');

ps: насчет тп к баферу я хз

pmen
22.05.2009, 18:49
У меня хроники интерлудии

Fer123
22.05.2009, 19:05
Расскажи подробно что происходит когда ты летишь к баферу черный экран или ты рядом с ним появляешься?

pmen
22.05.2009, 19:12
Просто игра подвисает....и я оказываюсь у бафера...а иногда просто под городом

Добавлено через 4 минуты
Сможете почмочь с мониторингом....а то никак не вкурю( как не крути ошибки синтаксиса

J-Fobos
22.05.2009, 19:33
Если ИЛ то гляньте какой id у пакета Actoin и замените в скрите.

pmen
22.05.2009, 19:57
"Action" ?

Добавлено через 9 минут
Вот так правильно???

Добавлено через 9 минут
Спасибо огромное! Все получилось!!И вот последний вопрос! А можно как-то в самом Action ,чтобы Obj.ID тоже заменялся??

buf:=hstr('04 D2 A6 00 10 80 41 02 00 F0 22 FF FF 23 F5 FF FF 00');

J-Fobos
22.05.2009, 20:26
buf:=#$04;
WriteD(a);
и так далее, лучше читайте тему Что нужно знать для написания скриптов (http://coderx.ru/showthread.php?t=10)

pmen
22.05.2009, 22:10
buf:=#$04;
WriteD(a);
и так далее, лучше читайте тему Что нужно знать для написания скриптов (http://coderx.ru/showthread.php?t=10)

Проблема в том щас то что отсылается 04 D2 A6 00 10 а остальная часть пакета нет..Как сделать полную отсылку
04 D2 A6 00 10 80 41 02 00 F0 22 FF FF 23 F5 FF FF 00'

Grinch
22.05.2009, 22:20
:shout: реакция на прочтение все темы!!!!!
что надо знать автору:
1. понять как разберается пакет типа ReadD() ReadS() и подобная дребедень. ну очень много примеров от простых до посложней
2. понять как запоминать и выбирать данные в масив и соответсвенно из него
3. Научиться строить свою мысль тоесть разбить действия на компоненты.
пример нам нужно запомнить О_ид бафера:
способ А. ручной
if pck(1)=04 and FromServer and x1=true then begin Ox_id:=ReadD(2); Oy_id:=ReadD(6); Oz_id:=ReadD(10); x1:=false end;
во самый простой метод камнями не кидать писал с коленки последний раз это делал месяца 3 назад :)
что тут мы делаем:
если мы получаем пакет Актион от сервера когда флаг x1 труе то мы запоминаем из пакета последовательно по 4 байта О_ид и координаты и потом опускаем флаг и теперь без проблем можем тыкать по другим НПЦ и мобам зная что пока мы в игре мы знаем обжект ид. ну тут надо все переменые объявить и по сообщению в чат флаг подымать вот типа решили проблему
Способ Б описан выше другими прогерами

Добавлено через 5 минут
зы так же можно зная ИД НПЦ сделать фильт пакета НПЦинфо и запомнить теже данные из него в этом случае нам будет пофигу как мы получим пакет с нужным нам нпц мы его запомним и будем запомнать столько раз сколько будет приходить этот пакет

pmen
23.05.2009, 00:03
Все) Я практически закончил писать скрипт!!

Insane*
23.05.2009, 14:56
Мда, прикольно, это чит-тематика запрещена?=) Что за сервер, если не секрет?
По скрипту хз, что нагородили. Валидэйт зачем в скрипте отлавливать?
Там проверки вообще другие должны быть.
//Работает на сервер где есть у бафера регенерация хп мп цп

Работает на кривояве.

n1ce?!
23.05.2009, 15:03
Мда, прикольно, это чит-тематика запрещена?=) Что за сервер, если не секрет?
По скрипту хз, что нагородили. Валидэйт зачем в скрипте отлавливать?
Там проверки вообще другие должны быть.

Работает на кривояве.

Примерно таким скриптом у меня был андеад,на la2real.net,там я не скажу что кривая ява)
С последним обновлением от Fyrre,с l2phx не зайти=/ Даже лсп не помогает=/

Insane*
23.05.2009, 15:13
n1ce?!, я неделю-две назад прекрасно заходил....
И тоже там с андедом набегался, пока некий "Сухарик" не слил всю инфу нубу-админу и не ПОМОГ пофиксить (и то, я не уверен что до конца).
А реал - жутко кривая ява до сих пор, багов там немерено.

Vklu4atel^^
23.05.2009, 23:32
при чем тут вообще ValidatePosition?
скрипт можно модифицировать безконечно.Например: убрать тупое переписывание пакета, а оформить грамотно процедурку. Как это делать - объяснять не буду, кури примеры скриптов.
З.Ы. ты бы хоть хроники написал чтоли.

а как сделать чтобы скрипт запоминал сам данные пакеты? Хроники Интерлуде!

Он написал!

QaK
24.05.2009, 09:58
запоминал сам данные пакеты?какие "данные пакеты"? Хроники он после дописал.