• logo_cipsoft
    Nowe serwery zostały otwarte 19 Lut 2025:
    Noctalia (Open PvP) Ignitera (Open PvP) us_logo Xybra (Open PvP)

D?wignia na bp potion?w

Status
Zamknięty.

Ldrozd

Senior User
Dołączył
Listopad 26, 2008
Posty
572
Liczba reakcji
44
Witaj!
Id?c za potrzeb?, postanowi?em napisa? dla Ciebie skrypt umo?liwiaj?cy kupowanie potion?w w backpacku, za pomoc? d?wigni. Zapewne powiesz, ?e jest ju? taki skrypt. Jest! Ale m?j jest odpowiedzialny za niesko?czona ilo?? pot?w i jest napisany tylko w jednym pliku .lua, dzi?ki czemu nie trzeba tworzy? niesko?czonej ilo?ci skrypt?w i zawala? ca?y silnik "spamem".

Cechy skryptu:
- przy braku capacity i miejsca, wajcha nie sprzeda nam bp potk?w
- napisany w jednym pliku .lua
- napisany najkr?cej jak umia?em
- ogolne pro :p

W actions/scripts wklejamy: plik o nazwie potions.lua

PHP:
-- Written by Ldrozd with Tairen's advice; do not delete it, you arent the creator
function onUse(cid, item, fromPosition, itemEx, toPosition)
    local potion = {
        [1000] = {id = 7620, bp = 2001, cost = 10000, anim = 30, text = "mana potion"}, 
        [1001] = {id = 7589, bp = 2001, cost = 16000, anim = 30, text = "strong mana potion"},
        [1002] = {id = 7590, bp = 2001, cost = 24000, anim = 30, text = "great mana potion"},
        [1003] = {id = 7618, bp = 1988, cost = 9200, anim = 29, text = "health potion"},
        [1004] = {id = 7588, bp = 1988, cost = 20000, anim = 29, text = "strong health potion"},
        [1005] = {id = 7591, bp = 1988, cost = 38000, anim = 29, text = "great health potion"},
        [1006] = {id = 8473, bp = 1988, cost = 62000, anim = 29, text = "ultimate health potion"},
        [1007] = {id = 8472, bp = 1999, cost = 38000, anim = 28, text = "great spirit potion"}
    }
        
		local actuallPotion = potion[item.uid]
        local weight = getItemWeightById(actuallPotion.id, 20) + getItemWeightById(actuallPotion.bp, 1)                    
        if(getPlayerFreeCap(cid) >= weight) then
            if getPlayerMoney(cid) >= actuallPotion.cost then
                local bp = doCreateItemEx(cid, actuallPotion.bp, 1)
                doAddContainerItem(bp, actuallPotion.id, 20)
					if(doPlayerAddItemEx(cid, bp) ~= RETURNVALUE_NOERROR) then
						doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You need more space in your container.")
					else
						doPlayerRemoveMoney(cid, actuallPotion.cost)
						doSendMagicEffect(toPosition, actuallPotion.anim)
						doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You have bought backpack of "..potion[item.uid].text.."s for "..potion[item.uid].cost.." gold coins.")
					end
            else
                doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You need "..potion[item.uid].cost.." gold coins to buy these potions.")
            end
        else
            doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You need at least "..math.floor(weight).." oz to buy this item.")
        end
           
            if item.itemid == 1945 then
                doTransformItem(item.uid, item.itemid+1)
            elseif item.itemid == 1946 then
                doTransformItem(item.uid, item.itemid-1)
            else
                return true
            end                     
return true
end

w actions.xml

PHP:
<action fromuid="1000" touid="1007" event="script" value="potions.lua" />

Teraz jak wszystko ustawi? na mapie:

Kolejno od g?ry, od lewej ustawiamy ka?dej wajsze uniqueid: 1007, 1000, 1001, 1002.
Dolny rz?d od lewej: 1003, 1004, 1005, 1006.

2w53j47.png


Testowane na TFS 0.3.6pl1. Ponadto je?eli chcesz doda?, aby te? inne itemy mo?na by?o kupowa? w backpack'u, wystarczy uzupe?ni? tabele o kolejna linijk?.

Pozdrawiam,
 
Odp: D?wignia na bp potion?w

Dobry skrypt .. ale du?o silnik?w z Tibia 8.5 + ma takie skrypty ..
Nie wiem czy komu? si? przyda :(
 
Odp: D?wignia na bp potion?w

Je?eli gracz nie ma miejsca w backpacku, zakup l?duje na ziemii, tak samo w przypadku gdy gracz nie ma capa. Do tej istnieje funkcja
Kod:
getItemNameById
Co niweluje wpis z tablicy. Sam skrypt trzyma dobry poziom opr?cz tego co powiedzia?em.

Pozdrawiam
 
Odp: D?wignia na bp potion?w

Poprawi?em skrypt zgodnie z zaleceniem kolegi Tairensa. Niestety nie udalo mi sie poprawic ten skrypt tak, aby w przypadku braku miejsca w plecaku zwracalo wiadomosc. Jak ktos ma pomysly to prosze walic smialo. ;)
 
Odp: D?wignia na bp potion?w

Popatrz stary:
Kod:
local bp = doCreateItemEx(bp_id, 1)
for i = 1, getContainerSize(bp) do
	doAddContainerItem(bp, item_id, 1)
end
if (doPlayerAddItemEx(cid, bp) ~= RETURNVALUE_NOERROR) then
	doPlayerSendTextMessage(cid, 22, 'You bought!')
else
	doPlayerSendTextMessage(cid, 22, 'You don\'t have free place in your backpack or you don\'t have capacity!')
end

Item z tego co pami?tam w wypadku funkcji:
Kod:
doCreateItemEx
tworzony jest w wirtualnym cylindrze, potem ?adujemy do niego itemy.
Nast?pnie funkcja:
Kod:
doPlayerAddItemEx(cid, bp)
kt?r? dajemy graczowi item wcze?niej stworzony w w\w spos?b. Wtedy sprawdzamy czy funkcja nie zwr?ci?a b??du, je?eli tak to znaczy, ?e gracz nie spe?ni? np takiego warunku jakim jest wolny cap.

Do tego zauwa?y?em, ?e tutaj bardzo cz?sto u?ywane jest:
Kod:
potion[item.uid]
Co za ka?dym razem sprawdza item.uid itd
Wystarczy, ?e po tablicy wrzucisz sobie
Kod:
local actuallPotion = potion[item.uid]
I dzia?asz na aktualny potionie ;)
 
Ostatnia edycja:
Odp: D?wignia na bp potion?w

Dzieki Tairens, dzieki Tobie obkminilem o co chodzi. Twoj skrypt, ktory mi zaproponowales nie dzialal, ale pokazywal jak zastosowac wszstko to co napisales w poscie wyzej.


Dobry skrypt .. ale du?o silnik?w z Tibia 8.5 + ma takie skrypty ..
Nie wiem czy komu? si? przyda :(

Pokaz mi lepszy! :p

Komenty plax
 
Ostatnia edycja:
Odp: D?wignia na bp potion?w

SSSSSSSSSuper skrypt bardzo mi sie przyda w tworzeniu mojego ots'a
 
Status
Zamknięty.
Do góry