Jest to Poradnik Pisany dla Nowych w branży OTSów lub w dziale 8.1+ :)
Poradnik napisany od serca i dałem naprawdę z siebie wszystko (mam nadzieje, że będzie docenione :) ) Umówiłem chyba wszystkie dręczące problemy dot. Potionów.
Dzięki temu poradnikowi, nauczycie obchodzić się potionami od góry do dołu, jak je edytować, oraz jak stworzyć własnego
WTĘP
Aby edytować jakiś potion należy wejść w
oraz wybrać potrzebny potionKod:\data\actions\scripts\liquids
jeśli chcemy stworzyć własny, kopiujemy któryś z plików .lua i modyfikujemy go według swoich potrzeb
niemożemy jednak zapomnieć o dodaniu 1 linijki w actionts.xml
xxxx – id Nowego potionuKod:<action itemid="xxxx" event="script" value="liquids/yyyy.lua" allowfaruse="1"/>
yyyy – nazwa pliku z nowym potem
Na początku zajmiemy się tylko potionami leczącymi oraz dodającymi mane.
1. Ilość dodawanych punktów
Na samej górze mamy takie rubryczki
Liczba przydzielonych pkt many/hp zostanie wylosowana pomiędzy liczba X a Y.Kod:local MIN = x
local MAX = y
local EMPTY_POTION = z
Z jest to ID potiona po jego opróżnieniu.
Jeśli jest to potion dodający i mane i hp jak Great Spirit to wygląda to nieco inaczej choć równie logicznie
2 exhaust i deklarowanie funkcji – czyli to co można ominąćKod:local MIN_HEALTH = 300
local MAX_HEALTH = 600
local MIN_MANA = 170
local MAX_MANA = 250
local EMPTY_POTION = 7635
Exhaust’u nie musimy dotykać bo nie różni się niczym a nie ma po co go zmieniać, chyba, że ktoś ma takie pragnienie, o to częśc kodu, która zawsze powinna się znaleść po deklaracji zmiennych
3. warunkiKod:local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100))
function onUse(cid, item, fromPosition, itemEx, toPosition)
if isPlayer(itemEx.uid) == FALSE then
return FALSE
end
if hasCondition(cid, CONDITION_EXHAUST_HEAL) == TRUE then
doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED)
return TRUE
end
Tu zaczynają się schody, jeśli masz choć małe pojecie o pisaniu kodów nie powinieneś mieć problemów, ale jeśli jesteś zupełnym newbie uważaj na każdy znak.
Warunki jakie nas obchodzą to jedynie Profesja oraz LVL (wymagane do użycia potionu)
Jeśli nie potrzebujemy ograniczeń na lvl czy profesje po prostu omijamy ten pkt!
przykłady
Kod:if((not(isSorcerer(itemEx.uid) or isDruid(itemEx.uid)) or getPlayerLevel(itemEx.uid) < 80)
Postaram sie dokładnie wytłumaczyć.Kod:if((not(isPaladin(itemEx.uid)) or getPlayerLevel(itemEx.uid) < 80)
Wszystko zaczyna się od “if” (jeśli)
I nawiasu w który wstawiamy Oba warunki (nawiasy są 2 bo zakończenie całości jest dalej)
Dalej lecimy dajemy „not” (Jeśli nie)
i w nawiasach wypisujemy profesje jakie mogą używać danego potionu
np.
Kod:isPaladin(itemEx.uid)
Zamykamy nawias warunku Profesji oddzielamy go od nastepnego warunku operatorem or (lub)Kod:isDruid(itemEx.uid)
I tu jużprosciej piszemy
Zamiast X wprowadzając wymagany lvlKod:getPlayerLevel(itemEx.uid) < X)
Dalej przepisujemy to co nas nie interesuje jedynie zamiast tekst wstawiamy to co powinno wyświetlić sie graczowi jeśli nie spełnia wymagać
w przykładzie jest „Only paladins of level 80 or above may drink this fluid”
ale wy wpiszcie co chcecie
WIEM, że wydaje się to trudne, ale po zrobieniu pierwszego potiona zaczniecie robić to bezproblemowo, a łatwiej wytłumaczyć nie umiem :PKod:and getPlayerCustomFlagValue(itemEx.uid, PlayerCustomFlag_GamemasterPrivileges) == FALSE) then
doCreatureSay(itemEx.uid, "Only paladins of level 80 or above may drink this fluid.", TALKTYPE_ORANGE_1)
return TRUE
end
4. czytanie zmiennych i wykluczenie buga
Czyli w zależności od tego czy jest to prosty potion (tylko mana/hp) czy złożony wpisujemy dany kod.
Jeśli nasz potion ma dodawać tylko hp używamy:
jeśli ma być to mana potion używamy:Kod:if doCreatureAddHealth(itemEx.uid, math.random(MIN, MAX)) == LUA_ERROR then
return FALSE
end
jeśli jest to potion dodający i mane, i hp użyjmy:Kod:if doPlayerAddMana(itemEx.uid, math.random(MIN, MAX)) == LUA_ERROR then
return FALSE
end
Kończymy kod w ten sposóbKod:if doCreatureAddHealth(itemEx.uid, math.random(MIN_HEALTH, MAX_HEALTH)) == LUA_ERROR or doPlayerAddMana(itemEx.uid, math.random(MIN_MANA, MAX_MANA)) == LUA_ERROR then
return FALSE
end
oczywiście zamiast „Aaaaah....” możemy wpisać co nam się żywnie podoba :)Kod:doAddCondition(cid, exhaust)
doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE)
doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1)
doTransformItem(item.uid, EMPTY_POTION)
return TRUE
end
Udało nam się zrobić nowy boski potion i możemy być z niego dumni :)
Teraz kilka Ciekawostek.
0 flasków
jeśli nie chcemy aby po wypiciu zostawała butelka robimy coś takiego:
na górze w deklarowaniu zmiennych usuwamy linijkę
a na samym dole zmieniamyKod:local EMPTY_POTION = xxxx
linijkę
naKod:doTransformItem(item.uid, EMPTY_POTION)
Picie Potionów po trochu (element RPG)Kod:doRemoveItem(item.uid)
możemy zrobić taki fajny motyw, aby dany potion nie wypić od razu cały
w ten sposób:
http://i700.photobucket.com/albums/ww4/Runarm/Hp.jpg
Wystarczy, w health potionie w rubryczcie
ustawime id small health potiona (8704) :)Kod:local EMPTY_POTION = xxxx
Przestawiając, Id „EMPTY_POTION” można wykombinować wiele ciekawych motywów :)
Potiony dające specjalną siłe/możliwości
Opierają się tylko na jednym schemacie
Nas obchodzi tylkoKod:local condition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_TICKS, 10 * 60 * 1000) -- 10 minutes
setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCE, 5)
setConditionParam(condition, CONDITION_PARAM_SKILL_SHIELD, -10)
function onUse(cid, item, fromPosition, itemEx, toPosition)
if(isPlayer(itemEx.uid) ~= TRUE) then
return TRUE
end
if(doAddCondition(itemEx.uid, condition) ~= LUA_ERROR) then
doSendMagicEffect(getCreaturePosition(itemEx.uid), CONST_ME_MAGIC_RED)
doRemoveItem(item.uid)
end
return TRUE
end
linijka 1 = czas działania (w mili sec) 1000(1 sec)*60 (1 min) * 10 (10 min)Kod:setConditionParam(condition, CONDITION_PARAM_TICKS, 10 * 60 * 1000) -- 10 minutes
setConditionParam(condition, CONDITION_PARAM_SKILL_xxxx, 5)
setConditionParam(condition, CONDITION_PARAM_SKILL_yyyy, -10)
Linijka 2 pierwszy parametr, xxxx to skill który ma sie wziększyć/zmniejszyć
a po przecinku o ile
np.
-5 zmienejszy się o 5
15 zwiekszy się o 15
Linijka 3 Drugi parametr.
UWAGA: jeśli chcemy dodać Mlvl to zamiast
używamy:Kod:PARAM_SKILL
potiony wielorazowego użytkuKod:STAT_MAGICLEVEL
Wiele osób chce stworzyć potiony które można używać wiele razy, jak runu.
Jednak nie jest to tak banalne. Potrzeba trochę cierpliwości
1. Musimy ściagnąć Item Edytor
2. Edytujemy plik item.otb
3. Patrzymy na ustawienia run
4. Ustawiamy w każdym potionie ustawienia identyczne jak w RUNACH
Nie jest to nic trudnego, dlatego każdy kto się postara nie powinien mieć z tym problemu. Odpuściłem sobie dokładne opisywanie jak to zrobić, bo by zajeło zbyt dużo a myśle, że nie jest to aż tak trudne (a opcja raczej potrzebna tym bardziej wprawnym twórcom :) )
Edycja Opisu potiona
Na koniec Przedstawię, to co chyba i tak każdy umie.
Tworząc nowy potion, nie zostawiajmy starego napisu jak np. „milk”, „mud”
Wchodzimy w data/items/items.xml
Wyszukujemy ID naszego nowego potionu
Pierwsza linijka name
zamiast nazwy wpisujemy nową nazweKod:<item id="Nasze_ID" article="a" name="xxxx">
a dopisek edytujemy dzieki
np. „This potion can only be consumed by paladins and knights of level 50 or higher”Kod:<attribute key="description" value="yyyy"/>
Dałem z siebie 100% tworząc ten poradnik, mam nadzieje, że rozwiałem wszystkie pytania odnośnie tworzenia i edycji Potionów.
Mam nadzieje, że artykuł spotka się z pozytywnym odbiorem, a moja praca zostanie doceniona.
Wszystkie znalezione błędy proszę pisać na PW postaram się naprawić.
Specjalnie dla was, Bilip
ZASTRZEGAM SOBIE PEŁNE PRAWO DO TEGO PORADNIKA, PONIEWAŻ BYŁ STWORZONY TYLKO I WYŁĄCZNIE PRZEZEMNIE. KAŻDY KTO CHCE NAPISAĆ GO NA INNYM FORUM POWINIEN SIĘ Z MNĄ SKONTAKTOWAĆ.