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
Kod:
\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
Kod:
<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
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
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
Kod:
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)
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)
Kod:
isDruid(itemEx.uid)
I tu jużprosciej piszemy
Kod:
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
Kod:
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:
Kod:
if doCreatureAddHealth(itemEx.uid, math.random(MIN, MAX)) == LUA_ERROR then
return FALSE
end
Kod:
if doPlayerAddMana(itemEx.uid, math.random(MIN, MAX)) == LUA_ERROR then
return FALSE
end
Kod:
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
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ę
Kod:
local EMPTY_POTION = xxxx
linijkę
Kod:
doTransformItem(item.uid, EMPTY_POTION)
Kod:
doRemoveItem(item.uid)
możemy zrobić taki fajny motyw, aby dany potion nie wypić od razu cały
w ten sposób:
Wystarczy, w health potionie w rubryczcie
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
Kod:
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
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
Kod:
PARAM_SKILL
Kod:
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
Kod:
<item id="Nasze_ID" article="a" name="xxxx">
a dopisek edytujemy dzieki
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Ć.
Zakładki