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ć)(link tutaj ). 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:
Cytat:
---------------------------- 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 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:
Cytat:
<?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ć!):
Cytat:
<?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 ekwiputnku:
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 -> licaba 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,
Jak na razie myślę, że wystarczy, niedługo druga część poradnika.