[inne] Piszę bota, jakieś propozycje?
Witam,
Z tej całej pracy nad swoimi serwerem w wolnych chwilach rozluźniam się pisząc bota do najnowszej Tibii w C++. Ma ktoś propozycje, co bot ma mieć? Aktualnie wprowadziłem język skryptowy LUA i można sobie zaprogramować już łażenie między lokacjami, później zrobię możliwość atakowania w skrypcie danego celu.
Bot NIE MA TRYBU GRAFICZNEGO, całość jest w konsoli, a bot jest całkowicie obsługiwany przez skrypt LUA w pliku scripts.lua.
Funkcje LUA, które ma "bot" na dzień dzisiejszy:
Cytuj:
getUid() -> player.id
getLevel() -> player.level
getHealth() -> player.hp
getMaxHealth() -> player.maxhp
getMana() -> player.mp
getMaxMana() -> player.maxmp
getPosX() -> player.x
getPosY() -> player.y
getPosZ() -> player.z
getAttackedCreature() -> player.attackedcreature
getBattleList()
doSay(word) -> player.say(text)
doAttack(creatureId) -> player.attack(creatureId)
useItem(itemid, x, y, z) -> player.use(itemid, x, y, z)
useItemOn(itemid, x, y, z, tileid) -> player.useEx(itemid, x, y, z, tileid)
executeGoto(x, y, z) -> player.goto(x, y, z)
executeLogout() -> player.logout()
Bota piszę sobie od kilku dni (trochę ciężko, bo mam na dodatek gości, co mnie spowalnia :P), więc jest dopiero ubogi, ale powoli zrobię z niego "coś". Na dzień dzisiejszy bot MOŻE wysyłać pakiety, oraz czytać z pamięci.
http://i52.tinypic.com/wiwv2o.png
http://i55.tinypic.com/2642azo.png
Taki o, możliwy skrypt, który wyświetla listę istot widocznych w battle list tak jak widać na screenach (będzie później przydatne do wybrania atakowanego celu w skrypcie cavebota):
Kod:
local lista = getBattleList()
for n = 1, #lista do
if(lista[n].visible > 0 and lista[n].z == getPosZ())then
print("HP: " ..lista[n].hp.. "% Nick: " ..lista[n].name.. " (" ..lista[n].x.. ", " ..lista[n].y.. ", " ..lista[n].z.. ")")
end
end
Albo na chodzenie z punktu A do B, C, oraz D, a następnie powrót do A, czyli taka rundka (co prawda jedną kratkę, ale działa wyśmienicie na dowolną odległość w ramach zakresu):
Kod:
if(getPosX() == 96 and getPosY() == 233)then
executeGoto(97, 233, 7)
elseif(getPosX() == 97 and getPosY() == 233)then
executeGoto(97, 234, 7)
elseif(getPosX() == 97 and getPosY() == 234)then
executeGoto(96, 234, 7)
elseif(getPosX() == 96 and getPosY() == 234)then
executeGoto(96, 233, 7)
end
Jak skończę jako tako bota, dam source.