Zacznę od krótkiego wstępu, co to jest OTS? Ots jest to skrót od angielskiego wyrażenia Open Tibia Server (nie będę tu dosłownie tłumaczyć). Prosto mówiąc własny server Tibii w domciu . W tym artykule opiszę z grubsza OTS pod Tibię 7.6.
Na początku ściągamy YurOTS 0.9.4d (najłatwiej się nauczyć). Zaczynamy na początku od rozpakowania pliku i umieszczenia go w jednym katalogu. Jeżeli brakuje jakiegoś pliku.dll je z http://www.dll-files.com , kopiujemy plik tibia.dat z katalogu tibii 7.6 (jeżeli go nie ma) do katalogu z otsem. Teraz zabieramy się do pracy. Otwieramy plik config.lua w notatniku. Wygląda on tak:
---------------------------- OTServ configuration ------------------------------ -- ścieżka do katalogu data datadir = "data/" -- ścieżka do mapy map = "data/world/test.otbm" -- OTBM for binary, SQL for SQL map, XML for OTX maps mapkind = "OTBM" -- SQL for acc/player info from SQL, XML for acc/player info from XML sourcedata = "XML" -- wiadomość, którą otrzymuje gracz po zalogowaniu się loginmsg = "Welcome to YurOTS" -- port na jakim serwer stoi port = "7171" -- nazwa serwera servername = "YurOTS" -- nick posiadacza serwera ownername = "Yurez" -- e-mail hostera owneremail = "" -- link do strony otsa url = "" -- położenia (kraj) location = "Poland" -- zewnętrzne ip (z http://www.whatismyip.com , nie z no-ip!) ip = "127.0.0.1" -- wiadomość, która wyskakuje przed wyborem postaci motd = "Welcome to YurOTS" motdnum="0" -- szyfrowanie haseł md5 (nie tak ważne) md5passwords = "no" -- typ serwera: pvp, no-pvp, pvp-enforced worldtype = "pvp" -- limit graczy maxplayers = "28" -- exhausted time in ms (1000 = 1sec) exhausted = 2000 -- exhaustion time dla czarów leczących(1000 = 1sec) exhaustedheal = 1000 -- how many ms to add if the player is already exhausted and tries to cast a spell (1000 = 1sec) exhaustedadd = 300 -- how long does the player has to stay out of fight to get pz unlocked in ms (1000 = 1sec) pzlocked = 10*1000 -- zezwolenie na logowanie się na postać przez kilka osób równocześnie allowclones = 0 -- nazwy profesji vocations = {"a sorcerer", "a druid", "a paladin", "a knight"} promoted_vocations = {"a master sorcerer", "an elder druid", "a royal paladin", "an elite knight"} --- SQL part (nie ruszaj!) sql_host = "localhost" sql_user = "root" sql_pass = "" sql_db = "otserv" --- SQL MAP part (nie ruszaj!) sqlmap = "test_map" map_host = "localhost" map_user = "root" map_pass = "" map_db = "" ------------------------- YurOTS basic configuration --------------------------- -- nazwa światu (seen on the character list when logging in) worldname = "YurOTS" -- czas co jaki serwer się zapisuje (0 = off, 5 = 5min, 60 = hour) autosave = 10 -- cap system włączony? (yes/no) capsystem = "no" -- do you want players to learn spells before they can use them? (yes/no) learnspells = "yes" -- pacc dla wszystkich? (yes/no) freepremmy = "no" -- pacc mają czekać w kolejce do logowania? (yes/no) queuepremmy = "yes" -- Ile % {exp, mana, skill, eq, bp} traci się podczas śmierci diepercent = {"7", "7", "7", "7", "100"} -- ile summonów może posiadać gracz? maxsummons = 2 -- summony dla każdej profesji? (yes/no) summonsallvoc = "no" -- zniszczenie speara (0 - nigdy, 100000 - zawsze) spearlosechance = 50 -- anti-afk – maksymalny czas stania bez ruchu (1 = 1min) kicktime = 15 -- maksymalna ilość rzeczy w depo maxdepotitems = 1000 maksymalna ilość rzeczy w domku maxhousetileitems = 10 -- ile deadów zapisuje się w pliku postaci? maxdeathentries = 10 -- mana zurzywana przez rod{snakebite, moonlight, volcanic, quagmire, tempest} rod rodmana = {"2", "3", "5", "8", "13"} mana zurzywana przez wand of {vortex, dragonbreath, plague, cosmic energy, inferno} wandmana = {"2", "3", "5", "8", "13"} -- zasięg rod {snakebite, moonlight, volcanic, quagmire, tempest} rod rodrange = {"4", "3", "2", "1", "3"} -- zasięg wand of {vortex, dragonbreath, plague, cosmic energy, inferno} wandrange = {"4", "3", "2", "1", "3"} -- obrażenia zadawane burstami -- domyślne od (1*lvl+5*mlvl)*0.24 do (1*lvl+5*mlvl)*0.55 burstarrowdmg = {"1.0", "5.0", "0.24", "0.55"} --------------------------- Multipliers and gains ------------------------------ -- o ile więcej dają doświadczenia potwory expmul = 10 -- o ile więcej dają doświadczenia gracze (pvp-enforced) expmulpvp = 2 -- szybkość rośnięcia skillo: 1 - rl tibia, 10 – 10x szybciej etc. {no-voc, sorcerer, druid, paladin, knight} weaponmul = {"1", "1", "1", "1", "40"} distmul = {"1", "1", "1", "40", "1"} shieldmul = {"1", "1", "1", "20", "20"} manamul = {"1", "3", "3", "2", "2"} -- ile hp, many, capu rośnie, gdy zdobywa się poziomy{no-voc, sorcerer, druid, paladin, knight} capgain = {"10", "10", "10", "20", "25"} managain = {"5", "30", "30", "15", "5"} hpgain = {"5", "5", "5", "10", "15"} -- ile szybciej regeneruje się mana, hp po posiłku (1 - rl tibia) healthtickmul = 5 manatickmul = 5 -------------------------------- Skull system ---------------------------------- -- ile ujustów do red skulla? redunjust = 3 -- ile ujustów do bana? banunjust = 6 -- czas posiadania white skulla po zaatakowaniu gracza? (1 = 1min) hittime = 1 -- czas posiadania white skulla po zabiciu gracza? (1 = 1min) whitetime = 15 -- czas posiadania red skulla? (1 = 1min) redtime = 6*60 -- czas zanim stracimy 1 ujusta (1 = 1min) fragtime = 12*60 ------------------------------ GM access rights -------------------------------- -- access do otwierania drzwi i wchodzenia do domków accesshouse = 3 -- access do logowania się bez kolejki lub gdy serwer jest zamknięty accessenter = 2 -- access do bycia ignorowanym przez potwory accessprotect = 2 -- access kolorowego pisania w kanałach publicznych (#c blabla ) accesstalk = 1 -- access do przesuwania rzeczy oddalonych od nas accessremote = 3 -- access do zobaczenia ID I pozycji przedmiotu accesslook = 2
Teraz objaśnię strukturę plików postaci. Plik account naszej postaci znajduje się w katalogu „data/accounts” pod nazwą (nazwa to będzie numer naszego accounta, więc każdy wg własnego uznania) np. 1.xml . Tak wygląda przykładowy plik account:
<?xml version="1.0"?> <account pass="nasze haslo" type="1" premDays="15"> <characters> <character name="GM Yurez" /> <character name="Yurez" /> </characters> </account>
Gdzie: -pass -> hasło do accounta -premDays -> ilość dni premium account (działa tylko w starych wersjach, tutaj nie!) -character name -> imię naszej postaci -type -> ???
Teraz objaśnię strukturę pliki postaci. Pliki postaci znajdują się w katalogu „data/players” pod nazwą postaci (nazwa musi być ta sama, co character name w poprzednim pliku).W moim przypadku będzie to Yurez. Plik powinien wyglądać następująco (oczywiście to tylko przykład, plik może się znacząco różnić!):
<?xml version="1.0"?> <player name="Yurez" account="1" sex="1" lookdir="1" exp="714722" voc="1" level="36" access="0" cap="30" maglevel="18" lastlogin="0" premticks="35345000" promoted="1" banned="0"> <spawn x="136" y="56" z="7"/> <temple x="160" y="54" z="7"/> <skull type="0" kills="0" ticks="0" absolve="0"/> <health now="930" max="930" food="1000"/> <mana now="1250" max="1250" spent="62"/> <look type="128" head="63" body="82" legs="120" feet="114"/> <skills> <skill skillid="0" level="10" tries="0"/> <skill skillid="1" level="10" tries="0"/> <skill skillid="2" level="10" tries="0"/> <skill skillid="3" level="10" tries="0"/> <skill skillid="4" level="10" tries="0"/> <skill skillid="5" level="10" tries="0"/> <skill skillid="6" level="10" tries="0"/> </skills> <spells> <spell words="utamo vita"/> <spell words="exura"/> <spell words="adori gran flam"/> <spell words="adevo mas hur"/> <spell words="exevo gran mas vis"/> <spell words="adori gran"/> <spell words="utani hur"/> <spell words="utani gran hur"/> </spells> <deaths> <death name="GM Yurez" level="37" time="1136040430"/> </deaths> <inventory> <slot slotid="1"><item id="2493"/></slot> <slot slotid="3"><item id="1988"> <inside> <item id="2120"/> <item id="2304" count="49"/> </inside> </item> </slot> <slot slotid="4"><item id="2494"/></slot> <slot slotid="6"><item id="2390"/></slot> <slot slotid="7"><item id="2495"/></slot> <slot slotid="8"><item id="2195"/></slot> <slot slotid="10"><item id="2163"/></slot> </inventory> <depots> <depot depotid="1"> <item id="2590"> <inside> <item id="2594"> <item id="2002"> <inside> <item id="2160" count="97"/> </inside> </item> </inside> </item> </depot> </depots> <storage> <data key="5015" value="1"/> </storage> </player>
Gdzie: -player name -> imię postaci musi być takie same w pliku accounta, -account -> numer accounta w moim przypadku 1 (numer taki sam jak w pliku „data/accounts”), -sex -> płeć postaci, -lookdir -> kierunek zwrócenia postaci (np. północny), -voc -> profesja, -exp -> ilość doświadczenia, -level -> poziom, -access -> prawa dostępu. 0 – normalny gracz, 3 – GM (ustawiane w commands.xml), - maglevel -> poziom magiczny, -spawn -> współrzędne logowania na mapie (sprawdza się je za pomocą edytora map), -temple -> współrzędne świątyni (gdy player zgnie właśnie tam się pojawia), -health -> życie, now -> aktualne życie, max -> maksymalne życie, -mana -> mana, reszta tak samo jak wyżej, -look type -> wygląd (kolory), najlepiej tu nie ruszać, a przestawiać sobie w czasie gry, -skills -> nasze skille oto spis który numer to który skill: 1 – fist fighting 2 – club fighting 3 – sword fighting 4 – axe fighting 5 – distance fighting 6 – shielding 7 – fishing -inventory -> nasz ekwipunek, -slot slotid="1" -> miejsce w naszym ekwipunku: 1= hełm 2= amulet 3= plecak 4= zbroja 5= prawa ręka 6= lewa Ręka 7= nogawice 8= buty 9= pierścień 10= miejsce na strzały -count -> liczba jakiś rzeczy np. boltów, gp, runów, -lastlogin – czas ostatniego logowania, -premticks – czas pozostałego pacca, -promoted – promocja; 0 – brak, 1- posiadanie, -banned – status bana; 0 – brak, 1 – ban,
By Isecross
|