Жесткий скриптингРаздел для обсуждения готовых и тестируемых скриптов
Внимание! В разделе введена жесткая модерация, темы и сообщения публикуются только после проверки модераторами
Активируем скрипт, в клиенте должно появиться окошко чата.
"Соц. Да" - снятие аугмента и аугментирование.
В инвентаре должна быть только одна пуха с данным ID.
delphi Код:
const
Name='Mamy'; // ник
ItemID=6608; // пуха
LifeID=8762; // лайфстон
GemsID=2131; // гемстон
GemsAmount=25; //кол-во гемовmax=100; // инвентарьvar
LifeBase:array[1..max] ofinteger;
ColvoLife,ColvoGems,Life,Item,Gems,SocialID,augid:integer;
procedure Init;
var i:integer;
begin
buf:=hstr('0F');
SendToServerEx(Name);
end;
procedure Free;
var i:integer;
beginfor i:=1tomaxdo
LifeBase[i]:=0;
end;
function StrToHex(packet: string):string;
var
i:integer;
tmp:byte;
function ByteToHex(b: byte): Char;
beginif b<10then result:=chr(b+$30)else result:=chr(b+$37);
end;
begin
result:='';
for i:=1tolength(packet)dobegin
tmp:=ord(packet[i])div16;
result:=result+ByteToHex(tmp);
tmp:=ord(packet[i]) - tmp*16;
result:=result+ByteToHex(tmp)+' ';
end;
end;
functioninttohex(n:integer):string;
var i:integer;
t:string;
a:array[0..15] ofchar;
begin
a[0]:='0';
a[1]:='1';
a[2]:='2';
a[3]:='3';
a[4]:='4';
a[5]:='5';
a[6]:='6';
a[7]:='7';
a[8]:='8';
a[9]:='9';
a[10]:='A';
a[11]:='B';
a[12]:='C';
a[13]:='D';
a[14]:='E';
a[15]:='F';
result:='';
t:='';
i:=0;
while n<>0dobeginif(i mod2=0)and(i>0)thenbegin
result:=result+t+' ';
t:='';
end;
t:=a[n mod16]+t;
n:=n div16;
inc(i);
end;
result:=result+t;
end;
procedure Say;
var i:integer;
s:string;
begin
s:='<tr><td>LS='+inttostr(ColvoLife)+' (*'+inttostr(GemsAmount)+'='+inttostr(ColvoLife*GemsAmount)+')</td></tr>';
s:=s+'<tr><td>Gems='+inttostr(ColvoGems)+' (/'+inttostr(GemsAmount)+'='+inttostr(ColvoGems div GemsAmount)+')</td></tr>';
s:=s+'<tr><td>---</td></tr>';
if Item=0then
s:=s+'<tr><td>No Weapon</td></tr>'elseif augid>0then
s:=s+'<tr><td>Augmented ('+inttohex(augid)+')</td></tr>'else
s:=s+'<tr><td>Not augmented</td></tr>';
buf:=hstr('0F 01 00 00 00');
WriteS('<html><body><br><table width=100%>'+s+'</table><br><br><br><br><br><br>'+
'"Social Yes" - Cancel Augment(if augmented) and Augment(if you have enough gems and LSs)<br>'+
'"Social No" - Show this help<br><br>'+
'Sometimes client dont get packet InventoryUpdate and you see "Not augment" when weapon is augmented.'+
' Simply press [Tab] twice or wear weapon.<br><br>'+
'(c) raid aka Mamy</body></html>');
// '(c) raid aka Mamy<br>'+strtohex(pck)+'</body></html>');
WriteD(0);
SendToClientEx(Name);
end;
procedure CreateItemBase;
var i,ss,j,ObjID,ItmID,ListCount,count,aug:integer;
begin
Item:=0;
ss:=1;
j:=4;
ListCount:=ReadH(j);
if ListCount>max then ListCount:=max;
j:=8;
for i:=1to ListCount dobegin
ObjID:=ReadD(j);
ItmID:=ReadD(j);
Count:=ReadD(j);
j:=j+14;
aug:=ReadD(j);
case ItmID of
LifeID: begin
LifeBase[ss]:=ObjID;
inc(ss);
end;
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
j:=j+6;
end;
ColvoLife:=ss-1;
Say;
end;
procedure UpdateItemBase;
var i,ii,j,ObjID,ItmID,ListCount,Count,UpdType,aug: integer;
begin
ListCount:=ReadH(2);
j:=4;
for i:=1to ListCount dobegin
UpdType:=ReadH(j);
j:=j+2;
ObjID:=ReadD(j);
ItmID:=ReadD(j);
Count:=ReadD(j);
j:=j+14;
aug:=ReadD(j);
case UpdType of1:case ItmID of
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
LifeID: beginfor ii:=1tomaxdoif LifeBase[ii]=0thenbegin
LifeBase[ii]:=ObjID;
ColvoLife:=ColvoLife+1;
break;
end;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
2:case ItmID of
ItemID: begin
Item:=ObjID;
augid:=aug;
end;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
end;
3:case ItmID of
ItemID:
Item:=0;
GemsID: begin
Gems:=ObjID;
ColvoGems:=Count;
end;
LifeID: beginfor ii:=1tomaxdoif LifeBase[ii]=ObjID thenbegin
LifeBase[ii]:=0;
ColvoLife:=ColvoLife-1;
end;
end;
end;
end;
j:=j+6;
end;
Say;
end;
function GetNextLife: integer;
var i:integer;
begin
Result:=-1;
for i:=1tomaxdobeginif(LifeBase[i]<>0)thenbegin
Result:=LifeBase[i];
exit;
end;
end;
end;
procedure Augment;
begin
buf:=hstr('D0 29 00');
WriteD(Item);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2A 00');
WriteD(Item);
WriteD(Life);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2B 00');
WriteD(Item);
WriteD(Life);
WriteD(Gems);
WriteD(GemsAmount);
SendToServerEx(Name);
delay(100);
buf:=hstr('D0 2C 00');
WriteD(Item);
WriteD(Life);
WriteD(Gems);
WriteD(GemsAmount);
SendToServerEx(Name);
end;
procedure DisAugment;
begin
buf:=hstr('D0 2D 00');
WriteD(Item);
SendToServerEx(Name);
buf:=hstr('D0 2E 00');
WriteD(Item);
SendToServerEx(Name);
end;
beginif pck=''thenexit;
if FromClient and(ConnectName=Name)and(pck[1]=#$1B)thenbegin
SocialID:=ReadD(2);
pck:='';
case SocialID of7: begin
buf:=hstr('A7 2A A0 00 00 80 84 1E 00 0A 00 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(Name);
buf:=hstr('A7 29 A0 00 00 40 0D 03 00 FA 00 00 00 00 00 00 00 00 00 00');
SendToServerEx(Name);
exit;
end;
6: beginif augid>0thenbegin
DisAugment;
delay(300);
end;
Life:=GetNextLife;
if(Life=-1)or(ColvoGems<GemsAmount)or(ColvoLife<1)thenexit;
Augment;
exit;
end;
5: begin
Say;
exit;
end;
end;
end;
if FromServer thencase pck[1] of
#$1B: CreateItemBase;
#$27: UpdateItemBase;
end;
end.
__________________ Emo-chan style.
Последний раз редактировалось raid, 02.07.2008 в 11:27.
добавить проверку на аргумент ) получившийся если нет и кул скрипт затариться геймами кристаллами этими и ловить аргумент нужный
Я так и не понял как узнать полученный аугмент, единственное что в голову пришло: одевать пуху и смотреть изменение в скиллах(это я реализовал)
По моим тестам во время нажатия кнопки "аугмент" и после нее, инфа об ауге не приходит... значет можно узнать какие ауги ты можешь получить не аугментируя пухи...
Я так и не понял как узнать полученный аугмент, единственное что в голову пришло: одевать пуху и смотреть изменение в скиллах(это я реализовал)
По моим тестам во время нажатия кнопки "аугмент" и после нее, инфа об ауге не приходит... значет можно узнать какие ауги ты можешь получить не аугментируя пухи...
Полученый агумент приходит в пакете inventoryupdate
0034 d AugId: 174800762
а клиент уже по полученому ид показывает инфу об агументе
Предлагаю вашему вниманию переделанный скрипт mks на аугментацию, кусочек взят из кода Slaventy на открытие окошек в клиенте, откорректирован под Gracia Final (Java):
Код:
const
nik='ваш ник';
var
WeaponID, LsID, GemID, GemCount: integer;
procedure Init; //Вызывается при включении скрипта
begin
end;
procedure OnTimer01(Sender: TObject);
begin
end;
procedure Free; //Вызывается при выключении скрипта
begin
end;
procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединения
begin
end;
procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединения
begin
end;
//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
if FromClient and (pck[1]=#$D0) then
begin
WeaponID:=ReadD(4);
LsID:=ReadD(8);
GemID:=ReadD(12);
GemCount:=ReadD(16);
end;
//Cancel Augment
if FromClient and (pck = HStr('56 0D 00 00 00 00 00 00 00 00 ')) then //56 0D 00 00 00 00 00 00 00 00 (Social No)
begin
buf:=hstr('FE 52 00 ');//окно удаления арГ
SendToClient;
delay(300);
pck:='';
Buf:=#$D0#$42#$00;
WriteD(WeaponID);
SendToServerEx(nik);
Buf:=#$D0#$43#$00;
WriteD(WeaponID);
SendToServerEx(nik);
end;
//Augment
if FromClient and (pck = HStr('56 0C 00 00 00 00 00 00 00 00 ')) then //56 0C 00 00 00 00 00 00 00 00 (Social Yes)
begin
buf:=hstr('FE 51 00 ');//окно Арг
SendToClient;
delay(300);
pck:='';
Buf:=#$D0#$26#$00;
WriteD(WeaponID);
SendToServerEx(nik);
delay(50);
Buf:=#$D0#$27#$00;
WriteD(WeaponID);
WriteD(LsID);
SendToServerEx(nik);
delay(50);
Buf:=#$D0#$28#$00;
WriteD(WeaponID);
WriteD(LsID);
WriteD(GemID);
WriteD(GemCount);
SendToServerEx(nik);
delay(50);
Buf:=#$D0#$41#$00;
WriteD(WeaponID);
WriteD(LsID);
WriteD(GemID);
WriteD(GemCount);
SendToServerEx(nik);
end;
end.
аналогичный скрипт, только ид випона, лсов, гемов, кол-во гемов не надо вводить, включаем скрипт и аугментируем пуху вручную 1раз, скприпт считывает все нужные данные для аугментации и ее снятия, далее 2соц действие вытащить лс, 1е соц действие вставить, писал для грации 2, на других хорониках не проверял
delphi Код:
const
nik='ник';
var
WeaponID, LsID, GemID, GemCount: integer;
procedure Init; //Вызывается при включении скриптаbeginend;
procedure OnTimer01(Sender: TObject);
beginend;
procedure Free; //Вызывается при выключении скриптаbeginend;
procedure OnConnect(WithClient: Boolean); //Вызывается при установке соединенияbeginend;
procedure OnDisonnect(WithClient: Boolean); //Вызывается при потере соединенияbeginend;
//основная часть скрипта//вызывается при приходе каждого пакета если скрипт включенbeginif FromClient and(pck[1]=#$D0)thenbegin
WeaponID:=ReadD(4);
LsID:=ReadD(8);
GemID:=ReadD(12);
GemCount:=ReadD(16);
end;
//Cancel Augmentif FromClient and(pck=#$34#$03#$00#$00#$00)thenbegin
pck:='';
Buf:=#$D0#$45#$00;
WriteD(WeaponID);
SendToServerEx(nik);
Buf:=#$D0#$46#$00;
WriteD(WeaponID);
SendToServerEx(nik);
end;
//Augmentif FromClient and(pck=#$34#$02#$00#$00#$00)thenbegin
pck:='';
Buf:=#$D0#$44#$00;
WriteD(WeaponID);
WriteD(LsID);
WriteD(GemID);
WriteD(GemCount);
SendToServerEx(nik);
end;
end.
Последний раз редактировалось mks, 20.04.2009 в 19:58.