const
Name='PLAYER1';
fish='2F 20 05 00 00 00 00 00 00 00';
pump='2F 21 05 00 00 00 00 00 00 00';
reel='2F 22 05 00 00 00 00 00 00 00';
var
timer: TTimer;
status, status2, RodInUse:boolean;
Lure, ColvoLure, Shot, ColvoShot, CharObjID: Integer;
SocialID: Integer;
Cmd:string;
//******************************************************************************
//
//******************************************************************************
procedure Init;
begin
Shot:=0;
Status:=false;
Status2:=false;
RodInUse:=false;
timer:=TTimer.Create(nil);
timer.OnTimer:=@OnTimer;
timer.enabled:=false;
timer.interval:=5000;
end;
//******************************************************************************
//
//******************************************************************************
procedure Free;
begin
timer.Free;
end;
//******************************************************************************
Function ObjtoColvo(ItemObjID:integer): integer;
var
i: integer;
begin
if ItemObjID=0 then exit;
for i:=0 to ReadD(4)-1 do begin
if ItemObjID=ReadD(i*28+8) then begin
Result:=ReadD(i*28+16);
exit;
end;
end;
Result:=0;
end;
//******************************************************************************
procedure Say(msg:string);
begin
buf:=hstr('4A 00 00 00 00');
WriteD(2);
WriteS(Name);
WriteS(msg);
SendToClientEx(Name);
end;
//******************************************************************************
procedure UseItem(ObjID:integer);
begin
buf:=#$14;
WriteD(ObjID);
WriteD(00);
SendToServerEx(Name);
end;
//******************************************************************************
procedure Pumping;
begin
if (Shot<>0) and (ColvoShot<>0) then UseItem(Shot);
buf:=HStr(pump);
SendToServerEx(Name);
end;
//******************************************************************************
procedure Reeling;
begin
if (Shot<>0) and (ColvoShot<>0) then UseItem(Shot);
buf:=HStr(reel);
SendToServerEx(Name);
end;
//******************************************************************************
procedure Fishing;
begin
if ColvoLure<>0 then begin
RodInUse:=true;
buf:=HStr(fish);
SendToServerEx(Name);
end
else begin
Status:=false;
Say('mmm!');
exit;
end;
end;
//******************************************************************************
procedure OnTimer(Sender: TObject);
begin
Fishing;
timer.enabled:=false;
end;
//******************************************************************************
// ?????????? ??? ??????? ??????? ??????, ???? ?????? ???????
//******************************************************************************
begin
//?? ???????????? ?????? ??????
if pck='' then exit;
//****************************************************************************
//???? ?? ??????? ?????? ????? ? UserInfo. ?????????? ??????????? ??
if FromServer and (ConnectName=Name) and (pck[1]=#$04) then CharObjID:=ReadD(18);
//****************************************************************************
{?????????? ???????? ItemID ??? ?????? ???????!!!
6519=Green Colored Lure - Low Grade A
6520=Green Colored Lure - Medium Grade
6521=Green Colored Lure - High Grade
6522=Purple Colored Lure - Low Grade
6523=Purple Colored Lure - Medium Grade
6524=Purple Colored Lure - High Grade
6525=Yellow Colored Lure - Low Grade
6526=Yellow Colored Lure - Medium Grade
6527=Yellow Colored Lure - High Grade}
//InventoryUpdate(27):w(count)w(1add2mod3remove)w(itemType1)h(ObjectID)i(ItemId)d(Count)
//?????????? ObjectID Lure ? ColvoLure
if FromServer and (ConnectName=Name) and (pck[1]=#$27) and ((ReadD(12)>=6519) and (ReadD(12)<=6527)) then begin
Lure:=ReadD(8);
ColvoLure:=ReadD(16); //?????????? ???????
//Say('???????='+inttostr(ColvoLure));
end;
//****************************************************************************
{?????????? ???????? ItemID ??? ?????? ???????!!!
6535=Fishing Shot: non-grade
6536=Fishing Shot: D-grade
6537=Fishing Shot: C-grade
6538=Fishing Shot: B-grade
6539=Fishing Shot: A-grade
6540=Fishing Shot: S-grade}
//InventoryUpdate(27):w(count)w(1add2mod3remove)w(itemType1)h(ObjectID)i(ItemId)d(Count)
//?????????? ObjectID Fishing Shot ? ColvoShot
if FromServer and (ConnectName=Name) and (pck[1]=#$27) and ((ReadD(12)>=6535) and (ReadD(12)<=6540)) then begin
Shot:=ReadD(8);
ColvoShot:=ReadD(16); //?????????? ?????
//Say('?????='+inttostr(ColvoShot));
end;
//******************************************************************************
if (CharObjID<>0) and (ColvoLure<>0) and not status2 then begin //(Shot<>0) and (ColvoShot<>0) and
Say('????????????? ????? ???? ?????? ? ??????!');
status2:=true;
end;
//******************************************************************************
//ItemList
if FromServer and (ConnectName=Name) and (pck[1]=#$1B) and status then begin
ColvoShot:=ObjtoColvo(Shot); //?????????? ?????
//Say('Shot='+inttostr(ColvoShot));
ColvoLure:=ObjtoColvo(Lure); //?????????? ???????
//Say('Lure='+inttostr(ColvoLure));
end;
//****************************************************************************
//????? ????
if Status and FromServer and (ConnectName=Name) and (CharObjID<>0) then begin
//FishingEnd
if (pck[1]+pck[2]=#$FE#$14) and (CharObjID=ReadD(4)) then timer.enabled:=true; //FishingEnd ???? N ?????? ????? ?????????
//FishinHPRegen
if (pck[1]+pck[2]=#$FE#$16) and (CharObjID=ReadD(4)) and (pck[15]+pck[16]=#$00#$00) then pumping;
if (pck[1]+pck[2]=#$FE#$16) and (CharObjID=ReadD(4)) and (pck[15]+pck[16]=#$00#$01) then reeling;
end;
//****************************************************************************
if FromClient and (ConnectName=Name) and (pck[1]=#$1B) then begin
SocialID:=ReadD(2);
case SocialID of
//?????????? ???????? Yes ??? ?????? ?????
6: begin
if CharObjID=0 then exit;
Status:=true;
ColvoLure:=1;
Say('Vamos a Pescar!');
Fishing;
end;
//?????????? ???????? No ??? ?????????
5: begin
if CharObjID=0 then exit;
if Status and RodInUse then Fishing;
Status:=false;
RodInUse:=false;
timer.enabled:=false;
end;
end;
end;
end.