#1 2009-01-16 20:23:17

spellon

Administrator

Zarejestrowany: 2008-12-16
Posty: 11
Punktów :   

Jak zrobić swojego pierszego ots'a

Witam. Wiem o tym, że istnieje temat jak stworzyć OTS, ale postanowiłem napisać poradnik
gdzie będzie opisanych więcej informacji. Jakich dowiecie się w swoim czasie

No więc powinniśmy zacząć od najważniejszej rzeczy... czyli śćiągnięciu OTS

Najlepiej pobierzcie YurOTS_0.9.4d Smile Very Happy Linka chyba juz sami potraficie znalezc no nie Wink

Następnie rozpakowywujemy plik i zaczynamy od config.lua, którego otwieramy za pomocą notatnika.
Właściwości-----> Otwórz za pomocą------> Notatnik

Tutaj już wam pokażę co powinniście lub możecie uzupełnić Miejsca oznaczone gwiazdką oznaczają
ważniejsze informacje

Konfiguracja Config.lua
Cytat:
---------------------------- OTServ configuration ------------------------------

-- datadir
datadir = "data/"

-- sets what map to load
map = "data/world/test.otbm" <------ Ścieżka do mapy. Przy zmienieniu jej na mapę o nazwie ,,moja" wystarczy zmienić ,,test" na ,,moja".

-- OTBM for binary, SQL for SQL map, XML for OTX maps
mapkind = "OTBM" <------ To zostawiamy.

-- SQL for acc/player info from SQL, XML for acc/player info from XML
sourcedata = "XML" <------ To zostawiamy.

-- the message the player gets when he logs in
loginmsg = "Witam na PimpekOTS" <------ Napis, który pojawia się po zalogowaniu do gry na kanale Default.

-- the port otserv listens on *
port = "7171" <------ Port Servera. Najlepiej zostawić taki jaki jest.

-- name of our server
servername = "PimpekOTS" <------ Nazwa servera.

-- name of the owner of our server
ownername = "GM Pimpus" <------ Posiadacz servera.

-- email of the owner of our server
owneremail = "" <------ E-mail posiadacza servera.

-- the url for more server info
url = "" <------ Strona servera. Nie jest konieczna

-- the location of the server
location = "Poland" <------ To raczej zostawiamy

-- the ip the server should redirect too *
ip = "86.63.99.152" <------ Nasze IP. Aby je sprawdzić wchodzimy na http://www.whatismyip.org/

-- The messagebox you sometimes get before you choose characters *
motd = "Witamy na PimpekOTS " <------ Tekst, który pojawia się przed listą postaci.
motdnum="0"

-- use md5 passwords for accounts, yes/no
md5passwords = "no"

-- world type. options: pvp, no-pvp, pvp-enforced *
worldtype = "pvp" <------ Typ świata.

Krótki opis
,,PvP- Można się zabijać"
,,PvP-Enforced- Za zabicie gracza dostaje się doświadczenie"
,,No-PvP- Nie można się zabijać.

-- max number of players allowed *
maxplayers = "40" <------ Maksymalna ilość osób na serverze.

-- exhausted time in ms (1000 = 1sec) *
exhausted = 1000 <------ Jak szybko można strzelać z runek. Poniżej 1000 można strzelać z macro =P

-- exhaustion time for healing spells (1000 = 1sec)
exhaustedheal = 1000 <------ Jak szybko można się leczyć czarami spontaniczymi (exura, exura gran, exura vita)

-- 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

-- allow multiple logins of the same char
allowclones = 0 <------ Ile osób może grać 1 charem. Przydatne do PvP

-- vocation names
vocations = {"a sorcerer", "a druid", "a paladin", "a knight"} <------ Najlepiej zostawić
promoted_vocations = {"a master sorcerer", "an elder druid", "a royal paladin", "an elite knight"} <------ Też najlepiej zostawić


--- SQL part
sql_host = "localhost"
sql_user = "root"
sql_pass = ""
sql_db = "otserv"


--- SQL MAP part
sqlmap = "test_map"
map_host = "localhost"
map_user = "root"
map_pass = ""
map_db = ""

------------------------- YurOTS basic configuration ---------------------------

-- name of your world (seen on the character list when logging in)
worldname = "Siwek OTS" <------ Nazwa Servera

-- how often do server saves it's state (0 = off, 5 = 5min, 60 = hour)
autosave = 10 <------ Co jaki czas ma następować zapis servera.

-- do you want to enable cap system? (yes/no)
capsystem = "no" <------ Czy ma być cap system??

-- do you want players to learn spells before they can use them? (yes/no) *
learnspells = "no" <------ Czy trzeba uczyć się czarów??

-- do you want to give premium account to all players? (yes/no)
freepremmy = "no" <------ Czy gracze mają zaczynać z Premium Account

-- do you want premium players to wait in queue as others? (yes/no)
queuepremmy = "yes"

-- how much % of {exp, mana, skill, eq, bp} do you lose when dying
diepercent = {"7", "7", "7", "7", "100"} <------ Jakie są szanse na stratę doświadczenia, m lvl, skilli, eq lub backpacka

-- how many summons player can have
maxsummons = 2 <------ Maksymalna ilość summonów.

-- do you want to give summons for all vocations? (yes/no)
summonsallvoc = "no" <------ Czy wszystkie profesje mogą tworzyć summona (Knight biega z 2 ds'ami?)

-- chance of losing a spear when shot (0 - none lost, 100000 - all lost)
spearlosechance = 50 <------ Po ilu uderzeniach spear ma ulec zniszczeniu

-- anti-afk - maximum idle time to kick player (1 = 1min)
kicktime = 15 <------ Po ilu minutach po nie oddawaniu oznak życia gracz ma zostać wyrzucony z gry

-- maximum number of items player can keep in his/her depot
maxdepotitems = 10000 <------ Maksymalna ilość itemów w depo

-- maximum number of items on a house tile (including those in containers)
maxhousetileitems = 20 <------ Maksymalna ilość itemów na jednej kratce domku

-- how much death entries are saved in players file (old are deleted)
maxdeathentries = 10

-- mana consumend by {snakebite, moonlight, volcanic, quagmire, tempest} rod
rodmana = {"2", "3", "5", "8", "13"} <------ Najlepiej to i 3 poniższe zostawić.

-- mana consumed by wand of {vortex, dragonbreath, plague, cosmic energy, inferno}
wandmana = {"2", "3", "5", "8", "13"} <------ Najlepiej to i 2 poniższe zostawić.

-- shooting range of {snakebite, moonlight, volcanic, quagmire, tempest} rod
rodrange = {"4", "3", "2", "1", "3"} <------ Najlepiej to i 1 poniższy zostawić.

-- shooting range of wand of {vortex, dragonbreath, plague, cosmic energy, inferno}
wandrange = {"4", "3", "2", "1", "3"} <------ Najlepiej to zostawić.

-- damage of burst arrows blast
-- default is from (1*lvl+5*mlvl)*0.24 to (1*lvl+5*mlvl)*0.55 <------ Obrażenia od burst arrow
burstarrowdmg = {"1.0", "5.0", "0.24", "0.55"} <------ Obrażenia od burst arrow

--------------------------- Multipliers and gains ------------------------------

-- experience multiplier (how much faster you got exp from monsters) *
expmul = 4 <------ Mnożnik expa.

-- experience multiplier for pvp-enforced (how much faster you got exp from players)
expmulpvp = 2 <------ Przy PvP-Enforced po zabiciu gracza dostajemy jego doświadczenie. Tutaj jest mnożnik tego doświadczenia

-- skill multipliers: 1 - rl tibia, 10 - ten times faster etc. {no-voc, sorcerer, druid, paladin, knight}
weaponmul = {"5", "5", "5", "5", "40"} <------ Jak szybko mają rosnąć skille: fist, sword, axe i club figting
distmul = {"1", "1", "1", "40", "1"} <------ Jak szyko ma rosnąć distance
shieldmul = {"5", "5", "5", "20", "30"} <------ Jak szybko ma rosnąć shielding
manamul = {"1", "3", "3", "2", "2"} <------ Jak szybko ma rosnąć magic level

-- how much points of life,mana,cap do you get when advancing {no-voc, sorcerer, druid, paladin, knight}
capgain = {"10", "10", "10", "20", "25"} <------ Ile co level dana profesja ma otrzymywać capa
managain = {"5", "30", "30", "15", "5"} <------ Ile co level dana profesja ma otrzymywać many
hpgain = {"5", "5", "5", "10", "15"} <------ Ile co level dana profesja ma otrzymywać życia

-- how much faster do you recovery life,mana after eating food (1 - rl tibia)
healthtickmul = 10 <------ O ile razy szybciej ma rosnąć życie niż w rl tibii
manatickmul = 10 <------ O ile razy szybciej ma rosnąć mana niż w rl tibii

-------------------------------- Skull system ----------------------------------

-- how many unjustified kills to get a red skull
redunjust = 3 <------ Po ilu zabiciach mamy otrzymać red skulla (tylko w PvP)

-- how many unjustified kills to get banned
banunjust = 6 <------ Po ilu zabiciach mamy otrzymać automatycznego bana

-- how long do you have white skull after attacking player (1 = 1min)
hittime = 1

-- how long do you have white skull after killing player (1 = 1min)
whitetime = 15 <------ Czas trwania white skulla

-- how long do you have red skull (1 = 1min)
redtime = 6*60 <------ Czas trwania red skulla. Im więcej osób tutaj zabijemy tym dłużej mamy. Po zabiciu 3 osób czekamy 3h, po 4 graczach 4h itd.

-- how long do you have to wait to lose 1 unjustified kill (1 = 1min)
fragtime = 12*60

------------------------------ GM access rights -------------------------------- To już zostawimy

-- access to walk into houses and open house doors
accesshouse = 3

-- access to login without waiting in the queue or when server is closed
accessenter = 3

-- access to ignore damage, exhaustion, cap limit and be ignored by monsters
accessprotect = 3

-- access to broadcast messages and talk in colors (#c blabla - in public channels)
accesstalk = 3

-- access to move distant items from/to distant locations
accessremote = 3

-- access to see id and position of the item you are looking at
accesslook = 3


Tak więc po uzupełnieniu tych ważnych i mniej ważnych pól mamy właściwie OTS gotowego.

Zmienianie cen run
Ale zapewne nie jeden z was chciał by, aby na serverze nie były takie drogie runy.
Jak to zrobić?? Właśnie tak:
Wchodzimy w folder z OTS następnie data/npc/scripts
Otwieramy plik runes.lua za pomocą notatnika i zmieniamy następujące rzeczy:
Cytat:
focus = 0
talk_start = 0
target = 0
following = false
attacking = false

function onThingMove(creature, thing, oldpos, oldstackpos)

end


function onCreatureAppear(creature)

end


function onCreatureDisappear(cid, pos)
if focus == cid then
selfSay('Good bye then.')
focus = 0
talk_start = 0
end
end


function onCreatureTurn(creature)

end


function msgcontains(txt, str)
return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end


function onCreatureSay(cid, type, msg)
msg = string.lower(msg)

if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
selfSay('Hello ' .. creatureGetName(cid) .. '! I sell runes, wands and rods.')
focus = cid
talk_start = os.clock()

elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
selfSay('Sorry, ' .. creatureGetName(cid) .. '! I talk to you in a minute.')

elseif focus == cid then
talk_start = os.clock()

if msgcontains(msg, 'runes') then
selfSay('I sell hmms (40gps), uhs (40gps), gfbs (60gps), explosions (60gps), sds (90gps) and blank runes (5gps). To buy more runes say "10 uh" or "100 sd".')
elseif msgcontains(msg, 'wands') then
selfSay('I sell wand of inferno (15k), plague (5k), cosmic energy (10k), vortex (500gp) and dragonbreath (1k).')
elseif msgcontains(msg, 'rods') then
selfSay('I sell quagmire (10k), snakebite (500gp), tempest (15k), volcanic (5k) and moonlight rod (1k).')

elseif msgcontains(msg, 'inferno') then
buy(cid,2187,1,15000)
elseif msgcontains(msg, 'plague') then
buy(cid,2188,1,5000)
elseif msgcontains(msg, 'cosmic energy') then
buy(cid,2189,1,10000)
elseif msgcontains(msg, 'vortex') then
buy(cid,2190,1,500)
elseif msgcontains(msg, 'dragonbreath') then
buy(cid,2191,1,1000)

elseif msgcontains(msg, 'quagmire') then
buy(cid,2181,1,10000)
elseif msgcontains(msg, 'snakebite') then
buy(cid,2182,1,500)
elseif msgcontains(msg, 'tempest') then
buy(cid,2183,1,15000)
elseif msgcontains(msg, 'volcanic') then
buy(cid,2185,1,5000)
elseif msgcontains(msg, 'moonlight') then
buy(cid,2186,1,1000)

elseif msgcontains(msg, '100 hmm') then
buy(cid,2311,100,800)
elseif msgcontains(msg, '10 hmm') then
buy(cid,2311,10,80)
elseif msgcontains(msg, 'hmm') then
buy(cid,2311,5,40)

elseif msgcontains(msg, '100 uh') then
buy(cid,2273,100,4000)
elseif msgcontains(msg, '10 uh') then
buy(cid,2273,10,400)
elseif msgcontains(msg, 'uh') then
buy(cid,2273,1,40)

elseif msgcontains(msg, '100 gfb') then
buy(cid,2304,100,2000)
elseif msgcontains(msg, '10 gfb') then
buy(cid,2304,10,200)
elseif msgcontains(msg, 'gfb') then
buy(cid,2304,3,60)

elseif msgcontains(msg, '100 explosion') then
buy(cid,2313,100,2000)
elseif msgcontains(msg, '10 explosion') then
buy(cid,2313,10,200)
elseif msgcontains(msg, 'explosion') then
buy(cid,2313,3,60)

elseif msgcontains(msg, '100 sd') then
buy(cid,2268,100,9000)
elseif msgcontains(msg, '10 sd') then
buy(cid,2268,10,900)
elseif msgcontains(msg, 'sd') then
buy(cid,2268,1,90)

elseif msgcontains(msg, 'blank') then
buy(cid,2260,1,5)

elseif string.find(msg, '(%a*)bye(%a*)') and getDistanceToCreature(cid) < 4 then
selfSay('Good bye, ' .. creatureGetName(cid) .. '!')
focus = 0
talk_start = 0
end
end
end


function onCreatureChangeOutfit(creature)

end


function onThink()
if (os.clock() - talk_start) > 30 then
if focus > 0 then
selfSay('Next Please...')
end
focus = 0
end
if focus ~= 0 then
if getDistanceToCreature(focus) > 5 then
selfSay('Good bye then.')
focus = 0
end
end
end


Zrobię tutaj przykład z hmm.
Mamy oto takie 2 linijki:
Cytat:
elseif msgcontains(msg, 'hmm') then
buy(cid,2311,100,40)


Tekst, który gracz musi wypowiedzieć, aby kupić daną runę.
Ilość strzałów w zakupionej runie
Suma pieniędzy zakupu runy

Czyli teraz przykładowo gdybyśmy napisali do NPC:
>Hi
>hmm

Musieli byśmy zapłacić 40 gp, a otrzymali byśmy hmm o wartości 100 strzałów.
Tak zmieniamy przy każdej runie, a będzie wszystko ok

Offline

 

#2 2009-01-17 15:59:21

Old Game

Nowy użytkownik

Zarejestrowany: 2009-01-17
Posty: 7
Punktów :   

Re: Jak zrobić swojego pierszego ots'a

NIE TWOJE  nie twoje nie dawaj!!!!

Ostatnio edytowany przez Old Game (2009-01-17 16:00:58)

Offline

 

#3 2009-02-19 16:31:43

Arkblon

Nowy użytkownik

Zarejestrowany: 2009-02-19
Posty: 4
Punktów :   

Re: Jak zrobić swojego pierszego ots'a

Po 1 to nie jest twoja pomoc. Skopiowales - Lamiesz Prawo!!!

Ostatnio edytowany przez Arkblon (2009-02-19 16:32:05)

Offline

 

Stopka forum

RSS
Powered by PunBB
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora
blokery.com.pl piesdomowy.eu Wicie kwatery clumber spaniel hodowla pilniki c-pilot vdw