Reklama
Pokazuje wyniki od 1 do 6 z 6

Temat: [Lua] Potiony od A do Z*

  1. #1
    Bilip

    Domyślny [Lua] Potiony od A do Z*

    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
    Kod:
    \data\actions\scripts\liquids
    oraz wybrać potrzebny potion

    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"/>
    xxxx – id Nowego potionu
    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
    Liczba przydzielonych pkt many/hp zostanie wylosowana pomiędzy liczba X a Y.
    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
    2 exhaust i deklarowanie funkcji – czyli to co można ominąć

    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
    3. warunki
    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)
    Postaram sie dokładnie wytłumaczyć.
    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)
    Zamykamy nawias warunku Profesji oddzielamy go od nastepnego warunku operatorem or (lub)
    I tu jużprosciej piszemy
    Kod:
    getPlayerLevel(itemEx.uid) < X)
    Zamiast X wprowadzając wymagany lvl

    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
    WIEM, że wydaje się to trudne, ale po zrobieniu pierwszego potiona zaczniecie robić to bezproblemowo, a łatwiej wytłumaczyć nie umiem :P
    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
    jeśli ma być to mana potion używamy:
    Kod:
    	if doPlayerAddMana(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 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
    Kończymy kod w ten sposób

    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
    oczywiście zamiast „Aaaaah....” możemy wpisać co nam się żywnie podoba :)

    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
    a na samym dole zmieniamy
    linijkę
    Kod:
    doTransformItem(item.uid, EMPTY_POTION)
    na
    Kod:
    doRemoveItem(item.uid)
    Picie Potionów po trochu (element RPG)
    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
    ustawime id small health potiona (8704) :)
    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
    Nas obchodzi tylko
    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 1 = czas działania (w mili sec) 1000(1 sec)*60 (1 min) * 10 (10 min)

    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
    używamy:
    Kod:
    STAT_MAGICLEVEL
    potiony wielorazowego użytku
    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">
    zamiast nazwy wpisujemy nową nazwe

    a dopisek edytujemy dzieki
    Kod:
    		<attribute key="description" value="yyyy"/>
    np. „This potion can only be consumed by paladins and knights of level 50 or higher”

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

  2. #2
    Avatar StaraJaga
    Data rejestracji
    2009
    Położenie
    Bydgoszcz
    Wiek
    30
    Posty
    141
    Siła reputacji
    15

    Domyślny

    Nawet fajne, mi sie przyda jak bede robil otsa. Czyli jak masz full potka to on daje np 400 hp a jak polowe to 200 tak ?

  3. Reklama
  4. #3

    Data rejestracji
    2006
    Położenie
    Bialystok
    Posty
    508
    Siła reputacji
    18

    Domyślny

    Nie czytalem ;d ale popraw ''wtep" na wstep

  5. #4
    Avatar Grimek
    Data rejestracji
    2010
    Położenie
    Pniewo
    Wiek
    31
    Posty
    49
    Siła reputacji
    0

    Domyślny

    Cytuj StaraJaga napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Nawet fajne, mi sie przyda jak bede robil otsa. Czyli jak masz full potka to on daje np 400 hp a jak polowe to 200 tak ?
    To znaczy że jednego pota używasz 2x i dopiero się wyczerpie.
    Masz wtedy np. 2 "ładunki" po 200hp (przykład)
    Poradnik dobry. 8/10

    Nie przegap startu! Poszukujemy Pixelartowców i Maperów
    Napisz na gg 15764770 a powiadomię Cię gdy serwer ruszy
    Polub nas na Facebooku!. Tam znajdziesz więcej informacji

  6. #5
    Avatar Elor Tulot
    Data rejestracji
    2009
    Położenie
    Polska
    Wiek
    31
    Posty
    839
    Siła reputacji
    15

    Domyślny

    Mam takie pytanie, mam silnik Devland 8.1 i w zasadzie istnieje folder potion, ale są tam tylko skrypty na Berserk Potion, Mastermind Potion, Bullseye Potion. A one nie bardzo przypominają zwykłych, podobnie jak skrypt Fluid. Da się wo gule na tym silniku edytować poty?

  7. #6
    Bypeabedy

    Domyślny Lua Potiony od A do Z

    Boas pessoal
    Gostava de saber como se faz uma calculadora como por ex a do Windows mas que desse para introduzir varias contas e nĂŁo 2 de cada vez
    se poderem mostrar em cĂłdigo LUA fico grato mas se for em VB fico grato na mesma xD

    Cumps

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. [LUA] Krótsze odpowiedniki w lua - autorstwa Grimkka
    Przez Grimekk w dziale Artykuły developerskie
    Odpowiedzi: 2
    Ostatni post: 13-01-2014, 18:36
  2. Odpowiedzi: 4
    Ostatni post: 13-03-2013, 15:41
  3. [Lua] Od zera do skryptera, czyli LUA: Pętle i tablice*
    Przez Grim90 w dziale Artykuły developerskie
    Odpowiedzi: 9
    Ostatni post: 21-08-2010, 02:47
  4. Nowe Potiony ?
    Przez Frii Mega Rajder w dziale Tibia
    Odpowiedzi: 2
    Ostatni post: 09-05-2010, 09:52
  5. [Lua] Od zera do skryptera, czyli LUA: PODSTAWY i Actions*
    Przez Grim90 w dziale Artykuły developerskie
    Odpowiedzi: 7
    Ostatni post: 02-08-2009, 01:05

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •