Muszę podkreślić, że nie jestem autorem tych skryptów! Zostaly one stworzone przez użytkowników tego(Klik!) forum!!!
No to zaczynamy:
1. Co da Ci mój poradnik?
-Możliwość skillowania nie bojąc sie o deda i utracenie swoich cennych skilli i lvla.
-Łatwe skillowanie, dzięki któremu nie będziesz musiał siedzieć.
godzinami przed komputerem wpatrując sie w monitor i nudząc się.
-Większe możliwości w bocie NG, jeśli jeszcze takich nie posiadasz...
2. Co musimy posiadać?
Musimy miec:
-Bota NG. Najlepiej zaczerpniętego z Tego(Klik!) downloadu, gdyż jest to stronka twórcy tibiabota NG.
-Paladyna/Knighta
-Druida(Poziom 27 lub większy, aby móc summonowac monka)
-Czas i kasę. (Czas na skillowanie i kasę na kamienie i food/robaki)
- Te skrypty:
Run to pz when player attack:
Kod PHP:
Const
WaypointFilePath ='D:\pz.wpt'
Var
Run: Boolean
function GetCreatureByID(ID: integer): TCreature;
var
x: integer;
begin
Result := nil;
for x := 0 to Creatures.Count - 1 do
begin
if x >= Creatures.Count then Break;
if Creatures.Creature[x].ID = ID then
begin
Result := Creatures.Creature[x];
Exit;
end;
end;
end;
procedure Event_Attacked(ID: integer);
Var
Creature: TTCreature
begin
if Self.Attacking = ID then Exit;
Creature := GetCreatureByID(ID);
if Creature <> nil then
begin
if not Creature.NPC then Run := True;
end;
end;
Function GetTileFromXYZ(X, Y, Z: integer): TTile;
begin
Result := nil;
if abs((Self.X - 7) - X) > 14 then Exit;
if abs((Self.Y - 5) - Y) > 11 then Exit;
if Self.Z <> Z then Exit;
Result := Screen.Tile[abs((Self.X - 7) - X), abs((Self.Y - 5) - Y)];
end;
Procedure UseLadder(X,Y,Z: Integer);
Var
Tile: TTile;
begin
if Z = Self.Z then
begin
Tile := GetTileFromXYZ(X, Y, Z);
Tile.Item[1].Use;
end;
else Unreachable := True;
end;
Procedure UseRope(X,Y,Z: Integer);
begin
if Z = Self.Z then
begin
Self.Containers.UseItemWithGround(3003, X, Y, Z);
end;
else Unreachable := True;
end;
Procedure MoveTo(X,Y,Z: Integer);
begin
if Z = Self.Z then
begin
Self.MoveTo(X,Y,Z);
end;
else Unreachable := True;
end;
Procedure UseShovel(X,Y,Z: Integer);
begin
if Z = Self.Z then
begin
Self.Containers.UseItemWithGround(3457, X, Y, Z);
Self.Containers.UseItemWithGround(5710, X, Y, Z);
Sleep(1000);
Self.MoveTo(X, Y, Z);
end;
else Unreachable := True;
end;
Procedure WaypointToAction(X,Y,Z,Action :Integer);
begin
UpdateWorld;
Case Action of
1: UseRope(X,Y,Z);
2: UseLadder(X,Y,Z);
3: MoveTo(X, Y+1, Z+1);
4: MoveTo(X, Y-1, Z-1);
5: MoveTo(X, Y, Z-1);
6: MoveTo(X, Y, Z);
7: UseShovel(X,Y,Z-1);
8: MoveTo(X, Y, Z);
9: Sleep(X*1000);
else
MoveTo(X,Y,Z);
end;
end;
Function WaypointReached(X,Y,Z,Action :Integer): Boolean;
begin
UpdateWorld;
Result := False;
Case Action of
1: if (Z = Self.Z + 1) then Result := True;
2: if (Z = Self.Z + 1) then Result := True;
3: if (Z = Self.Z) then Result := True;
4: if (Z = Self.Z) then Result := True;
5: if (Z = Self.Z) then Result := True;
6: if ((X = Self.X) and (Y = Self.Y) and (Z = Self.Z)) then Result := True;
7: if (Z = Self.Z) then Result := True;
8: if (abs(Z - Self.Z) = 1) then Result := True;
9: Result := True;
else
if ((X = Self.X) and (Y = Self.Y) and (Z = Self.Z)) then Result := True;
end;
end;
Function CountWaypoints(FilePath: String): Integre;
Var
i: Integer
WaypointFile: TextFile
begin
i := 0
AssignFile(WaypointFile, FilePath);
ReSet(WaypointFile);
while not EoF(WaypointFile) do
begin
temp:= ReadLn(WaypointFile);
i := i+1;
end;
Result:= (i/4);
end;
Function ExtractWaypointsFromFile(FilePath: String; Count: Integer): Integre;
Var
i: Integr
WaypointsArray: Integer
WaypointFile: TextFile
begin
WaypointsArray := VarArrayCreate([0, Count - 1, 0, 3], $C);
AssignFile(WaypointFile, FilePath);
ReSet(WaypointFile);
for i:=0 to Count-1 do
begin
WaypointsArray[i,0] := StrToInt(ReadLn(WaypointFile));
WaypointsArray[i,1] := StrToInt(ReadLn(WaypointFile));
WaypointsArray[i,2] := StrToInt(ReadLn(WaypointFile));
WaypointsArray[i,3] := StrToInt(ReadLn(WaypointFile));
end;
CloseFile(WaypointFile);
Result := WaypointsArray;
end;
Var
Waypoint: Integer
WaypointsCount: Integer
Index: Integer
begin
Index := 0;
Run := False;
WaypointsCount := CountWaypoints(WaypointFilePath);
WP := ExtractWaypointsFromFile(WaypointFilePath, WaypointsCount);
while not Terminated do
begin
UpdateWorld;
ProcessEvents
if Run then
Repeat
Sleep(500);
if WaypointReached(WP[Index,0],WP[Index,1],WP[Index,2],WP[Index,3]) then Index := Index +1;
WaypointToAction(WP[Index,0],WP[Index,1],WP[Index,2],WP[Index,3]);
UpdateWorld;
until ((Index = WaypointsCount) or Terminated)
Sleep(100);
end;
end;
Kod PHP:
Const
PercentToStopAttacking = 20 // how much % monster should have to stop attacking it?
PercentToAttackAgain = 40
var
Creature : TCerature;
function GetAttackedCreature:TCreature;
var
x: integer;
begin
Result := nil;
for x := 0 to Creatures.Count - 1 do
begin
if x >= Creatures.Count then Break;
if Creatures.Creature[x].Attacking=true then
begin
Result := Creatures.Creature[x];
Exit;
end;
end;
end;
While not terminated do
begin
if PercentToStopAttacking > PercentToAttackAgain then
begin
Self.DisplayText('You must have the PercentToStopAttacking LOWER then the PercentToAttackAgain!');
exit;
end;
UpdateWorld;
Creature := GetAttackedCreature;
if Creature <> nil then
begin
if Creature.health <= PercentToStopAttacking then
begin
Creature.attacking := false;
repeat
If Creature.Health > PercentToAttackAgain then
Creature.Attacking := true;
UpdateWorld;
sleep(500);
until (Creature.Health = 0) or (Creature.health >= PercentToAttackAgain) or (terminated);
if Creature <> nil then
if Creature.health >= PercentToAttackAgain then Creature.Attacking := true;
end;
end;
sleep(500);
end;
3. Gdzie ustawić bota?
W jednym z tych miejsc(podam tylko dwie miejscówki z thais, które są mi znane, i w których często skillowalem):
1) W tym(Klik!) miejscu. Należy przynieść sobie food w bagu i kamienie(dla palka), a dla Knight'a tylko food. Lurujemy sobie wolfy, które znajdują się trochę na północny-wschód od naszej miejscówki.
Stanąć tak jak na obrazku:

Kolory:
Czarny- Druid
Brązowy- Monk
Czerwony- Paladyn/Knight
2) W tym(Klik!) miejscu. Potrzebne będą: kamienie, wędka i robaki.
Należy się ustawić w ten sposób:

Kolory:
Czarny- Druid
Brązowy- Monk
Czerwony- Paladyn/Knight
Biały-Parcel (żeby nie biły nas 3 spidery, bo jest to nie potrzebne- i tak nie dadzą więcej shieldingu)
Zielony- Spidery (lutnięte z miejsca na północ od naszej miejscówki)
Aby łowić botem, wchodzicie w

4. Skrypty- Jak je ustawić?
a) Run to pz when player attack:
-Uruchamiamy tibię oraz Bota NG.
-Wchodzimy na nasze postacie.
- W obu miejscówkach robicie tak(zaznaczacie waypointa w pz-protection zone):

Następnie:

-W bocie NG na Knight'cie/Paladynie wchodzimy w scriptera

-Wklejamy tam skrypt Run tu pz when player attack
Kod PHP:
Const
WaypointFilePath ='D:\pz.wpt'
Var
Run: Boolean
function GetCreatureByID(ID: integer): TCreature;
var
x: integer;
begin
Result := nil;
for x := 0 to Creatures.Count - 1 do
begin
if x >= Creatures.Count then Break;
if Creatures.Creature[x].ID = ID then
begin
Result := Creatures.Creature[x];
Exit;
end;
end;
end;
procedure Event_Attacked(ID: integer);
Var
Creature: TTCreature
begin
if Self.Attacking = ID then Exit;
Creature := GetCreatureByID(ID);
if Creature <> nil then
begin
if not Creature.NPC then Run := True;
end;
end;
Function GetTileFromXYZ(X, Y, Z: integer): TTile;
begin
Result := nil;
if abs((Self.X - 7) - X) > 14 then Exit;
if abs((Self.Y - 5) - Y) > 11 then Exit;
if Self.Z <> Z then Exit;
Result := Screen.Tile[abs((Self.X - 7) - X), abs((Self.Y - 5) - Y)];
end;
Procedure UseLadder(X,Y,Z: Integer);
Var
Tile: TTile;
begin
if Z = Self.Z then
begin
Tile := GetTileFromXYZ(X, Y, Z);
Tile.Item[1].Use;
end;
else Unreachable := True;
end;
Procedure UseRope(X,Y,Z: Integer);
begin
if Z = Self.Z then
begin
Self.Containers.UseItemWithGround(3003, X, Y, Z);
end;
else Unreachable := True;
end;
Procedure MoveTo(X,Y,Z: Integer);
begin
if Z = Self.Z then
begin
Self.MoveTo(X,Y,Z);
end;
else Unreachable := True;
end;
Procedure UseShovel(X,Y,Z: Integer);
begin
if Z = Self.Z then
begin
Self.Containers.UseItemWithGround(3457, X, Y, Z);
Self.Containers.UseItemWithGround(5710, X, Y, Z);
Sleep(1000);
Self.MoveTo(X, Y, Z);
end;
else Unreachable := True;
end;
Procedure WaypointToAction(X,Y,Z,Action :Integer);
begin
UpdateWorld;
Case Action of
1: UseRope(X,Y,Z);
2: UseLadder(X,Y,Z);
3: MoveTo(X, Y+1, Z+1);
4: MoveTo(X, Y-1, Z-1);
5: MoveTo(X, Y, Z-1);
6: MoveTo(X, Y, Z);
7: UseShovel(X,Y,Z-1);
8: MoveTo(X, Y, Z);
9: Sleep(X*1000);
else
MoveTo(X,Y,Z);
end;
end;
Function WaypointReached(X,Y,Z,Action :Integer): Boolean;
begin
UpdateWorld;
Result := False;
Case Action of
1: if (Z = Self.Z + 1) then Result := True;
2: if (Z = Self.Z + 1) then Result := True;
3: if (Z = Self.Z) then Result := True;
4: if (Z = Self.Z) then Result := True;
5: if (Z = Self.Z) then Result := True;
6: if ((X = Self.X) and (Y = Self.Y) and (Z = Self.Z)) then Result := True;
7: if (Z = Self.Z) then Result := True;
8: if (abs(Z - Self.Z) = 1) then Result := True;
9: Result := True;
else
if ((X = Self.X) and (Y = Self.Y) and (Z = Self.Z)) then Result := True;
end;
end;
Function CountWaypoints(FilePath: String): Integre;
Var
i: Integer
WaypointFile: TextFile
begin
i := 0
AssignFile(WaypointFile, FilePath);
ReSet(WaypointFile);
while not EoF(WaypointFile) do
begin
temp:= ReadLn(WaypointFile);
i := i+1;
end;
Result:= (i/4);
end;
Function ExtractWaypointsFromFile(FilePath: String; Count: Integer): Integre;
Var
i: Integr
WaypointsArray: Integer
WaypointFile: TextFile
begin
WaypointsArray := VarArrayCreate([0, Count - 1, 0, 3], $C);
AssignFile(WaypointFile, FilePath);
ReSet(WaypointFile);
for i:=0 to Count-1 do
begin
WaypointsArray[i,0] := StrToInt(ReadLn(WaypointFile));
WaypointsArray[i,1] := StrToInt(ReadLn(WaypointFile));
WaypointsArray[i,2] := StrToInt(ReadLn(WaypointFile));
WaypointsArray[i,3] := StrToInt(ReadLn(WaypointFile));
end;
CloseFile(WaypointFile);
Result := WaypointsArray;
end;
Var
Waypoint: Integer
WaypointsCount: Integer
Index: Integer
begin
Index := 0;
Run := False;
WaypointsCount := CountWaypoints(WaypointFilePath);
WP := ExtractWaypointsFromFile(WaypointFilePath, WaypointsCount);
while not Terminated do
begin
UpdateWorld;
ProcessEvents
if Run then
Repeat
Sleep(500);
if WaypointReached(WP[Index,0],WP[Index,1],WP[Index,2],WP[Index,3]) then Index := Index +1;
WaypointToAction(WP[Index,0],WP[Index,1],WP[Index,2],WP[Index,3]);
UpdateWorld;
until ((Index = WaypointsCount) or Terminated)
Sleep(100);
end;
end;

Dzięki temu skryptowi, jeśli ktoś zacznie Cię atakować, bot pójdzie do protection zone- świątyni, która zaznaczyłeś w Cave Huntingu!
b) Stop and Start Attacking monk:
-Uruchamiamy tibię oraz Bota NG.
-Wchodzimy na nasze postacie.
-W bocie NG na Knight'cie/Paladynie wchodzimy w scriptera

-Wklejamy tam skrypt Stop and Start attacking monk:
Kod PHP:
Const
PercentToStopAttacking = 20 // how much % monster should have to stop attacking it?
PercentToAttackAgain = 40
var
Creature : TCerature;
function GetAttackedCreature:TCreature;
var
x: integer;
begin
Result := nil;
for x := 0 to Creatures.Count - 1 do
begin
if x >= Creatures.Count then Break;
if Creatures.Creature[x].Attacking=true then
begin
Result := Creatures.Creature[x];
Exit;
end;
end;
end;
While not terminated do
begin
if PercentToStopAttacking > PercentToAttackAgain then
begin
Self.DisplayText('You must have the PercentToStopAttacking LOWER then the PercentToAttackAgain!');
exit;
end;
UpdateWorld;
Creature := GetAttackedCreature;
if Creature <> nil then
begin
if Creature.health <= PercentToStopAttacking then
begin
Creature.attacking := false;
repeat
If Creature.Health > PercentToAttackAgain then
Creature.Attacking := true;
UpdateWorld;
sleep(500);
until (Creature.Health = 0) or (Creature.health >= PercentToAttackAgain) or (terminated);
if Creature <> nil then
if Creature.health >= PercentToAttackAgain then Creature.Attacking := true;
end;
end;
sleep(500);
end;

5. Healing, aby dojść do świątyni!
Kiedy napadnie nas pker, a będziemy trenować w miejscu nr 2, nie uda naszemu botowi uciec do swiątyni, jeśli nie ustawimy leczenie się. Oto jak to zrobic:

Dobrze byłoby, jeśli używamy czaru, żeby nasza mana się odnawiała manafluidami. Jak to zrobic? Tak:

Najlepiej w "Minimum mana" wpisać 160 jeśli używamy exury vity, lub 40 jeśli Exury Gran.
6. Aby GM nas nie przyłapał na botowaniu!
Zaznaczamy funkcje GM Safe.

7. Abyśmy nie padli od zlurowanych monsterów!
Wczoraj jakiś 8 knight lurnął mi wolfa i padłem druidem, więc wymyśliłem jak zapobiec takiego rodzaju atakom!
Wchodzimy w cave hunting i zaznaczamy opcje "Attack Monsters" u Druida! U Paladyna/Knighta jest to nie potrzebne, gdyż te postacie muszą być atakowane przez jakiegoś moba dla skillu shielda.

8. Jeśli podczas skillowania jesteśmy w domu!
Jeśli podczas skillowania jesteśmy w domu, to zawsze mamy dostęp do komputera. Dobrze byłoby, gdyby bot powiadamiał nas kiedy coś się dzieje. Oto jak tego dokonać:

Kiedy już wszystko zaznaczymy i ustawimy głośniki na maxa, to możemy iść do kibelka, kuchni, coś zjeść, a nawet się zdrzemnąć...

Teraz powiem do czego służą funkcje, które zaznaczyliśmy:
-GM Detected, kiedy przyjdzie do nas GM, bot zacznie wyć.
-Low Health, gdy będziemy mieli poniżej wpisanej liczby hp, bot zacznie wyć.
-Player On Screen, jeśli odwiedzi nas jakiś noobek, lub CM, bot zacznie wyć.
-Audio Alarm, zaznaczyliśmy to, aby zamiast człowieka mówiącego nam "Player on Screen", "Low Health", bądź "GM Detected", bot wył głośnym alarmem, który jeśli ustawimy głosniki na odpowiednią głośność usłyszymy z drugiego końca domu.
9. Anty Kick!
Na pewno wiecie, że jesli przez 15 minut stoimy w miejscu nie ruszając sie tibia kickuje nas z gry, aby tego uniknąć, wchodzimy w bota NG, następnie w "Options" zaznaczamy funkcję "Anty Idle" dzięki, której co 14 minut nasza postać będzie tańczyć. Jest to bardzo ważne, ponieważ bez tej funkcji, nasze postacie zostaną wylogowane po 15 minutach skillowania!
Jeśli zrobiłeś/zrobiłaś wszystko zgodnie z moim poradnikiem pozostaje mi tylko życzyć
Miłego Skillowania! :)
Mam nadzieje, że się przyda :) Jeśli znajdziecie jakiś błąd to powiedzcie mi gdzie on jest, to go usunę :)
@Mudzinex
Nom :P Powinni zrobić podforum o artykułach do botów ;S Ale trudno :P To w koncu ich forum ^^
@Mikey the'Xan
Starałem sie robic jak najbardziej szczegółowo =]
@edit2
@Down
Thx! :P Juz poprawione ;] Nie używam polskich znaków normalnie(przyzwyczajenie z tibii), więc troche ciężko się przyzwyczaić ^^
Pzdr
/Young;]
Zakładki