Wydobywanie, np. kryształów
PRzeSteR
Wydobywanie, np. kryształówWitam. Ze względu na to, że dawno się nie udzielałem na forum, nie znalazłem innego takiego tematu oraz nie chce wypaść z wprawy napisałem skrypt na wydobywanie czegokolwiek czymkolwiek. U mnie w skrypcie jest ustawione na wydobywanie kryształów, ale opisze co zrobić, aby wydobywać, np. kamienie.
A więc do roboty. Po pierwsze należy utworzyć nowy plik mine.lua w folderze data/actions/scripts/. Wpisujemy do niego taką oto treść:
Kod: ---------Szakal996 (Szkal96)
function onUse(cid, item, fromPosition, itemEx, toPosition)
if(itemEx.itemid == 8634) then
if getPlayerLevel(cid) >= 40 then
doPlayerAddItem(cid, 2177, 1)
doCreatureAddHealth(cid,-math.random(0,15))
doPlayerAddExp(cid,100)
else
doPlayerSendTextMessage(cid, 22, "You don't have level.")
end
end
return true
end 8634 - ID przedmiotu, na którym mamy coś użyć.
40 - Poziom (level), od którego można wydobywać.
2177 - ID przedmiotu, który dostaniemy z wydobycia.
1 - Ilość przedmiotów, które dostaniemy.
0,15 - Od ile (0) do ilu (15) życia ma nam zabrać wydobywanie (można usunąć całą linijkę).
100 - Ile doświadczenia (exp) mamy dostać za wydobycie (można usunąć całą linijkę).
Wracamy do folderu data/actions/. Znajdziemy tam plik actions.xml. Należy dopisać do niego między tagami <actions> (na samej górze) a </actions> taką oto linijkę:
Kod: <action itemid="2553" script="mine.lua"/> 2553 - ID przedmiotu, którego używamy (w tym przypadku jest to kilof). Jednak jeśli dodamy tą linijkę ten lub zwykły skrypt na kopanie kilofem przestanie działać (w zależności od tego, który będzie wyżej).
Zapraszam do komentowania!
Pozdrawiam,
Szkal96.
@all down
wow... dużo odpowiedzi oO
Zapewne wszyscy, którzy poprawili skrypt (w tym ci, którzy dopisali tylko "else" (poprawiłem, bo po prostu zapomniałem)) zrobili słusznie. Dziękuje za komentarze, reput itp.
Całkiem ciekawe..
Można to np. dać do questa.
Aby przejść dalej trzeba wykopać dany item itp.
Jak dla mnie bomba !!!!!!!!!!!! :)
Myślę, że lepszym wyjściem zamiast:
Kod: doCreatureAddHealth(cid,-math.random(0,15) będzie coś w ten deseń:
Kod: doTargetCombatHealth(0, cid, COMBAT_PHYSICALDAMAGE, -1, -15, CONST_ME_NONE)
Pozwoliłem sobie trochę przerobić ten skrypt:
Cytat:
--- System kopania by. Szkal96
--- Edited by Crypton
random_items = {
{1,2492,1}, -- 0.1% do DSM
{1,2160,8}, -- 0.1% do 8cc
{3,2446,10}, -- 0.3% do pharaoh sword
{30,2146,12}, -- 3% do 12 small sapphires
{20,2152,6}, -- 2% do 6 platinum coins
{20,2056,1}, -- 2% do wypalonej pochodni
{40,2152,3}, -- 4% do 3 platinum coins
{80,7909,4}, -- 8% do orzeszkow
{80,2146,4}, -- 8% do 4 small sapphires
{80,7759,2}, -- 8% do enchanted small sapphire
{80,2643,1}, -- 8% do butow xD
{80,2152,1}, -- 8% do platinum coin
{100,2391,1}, -- 10% do war hammera
{150,2512,1}, -- 15% do tarczy
{150,2229,1}, -- 15% do smieci
{150,2228,1}, -- 15% do smieci
{150,2230,1}, -- 15% do smieci
{150,2233,1}, -- 15% do smieci
{400,2148,60}, -- 20% do 60 gold coins
{400,2146,2}, -- 30% do 2 small sapphires
{400,2148,40}, -- 40% do 40 gold coins
{1000,2148,20} -- 100% do 20 gold coins
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
if(itemEx.itemid == 8633) then
if getPlayerLevel(cid) >= 5 then
local item = {}
local reward = 0
local count = ""
for i = 1, #random_items do
item = random_items[i]
if (math.random(0,999) < item[1]) then
reward = item[2]
subType = item[3]
if subType > 1 then
count = subType .. " "
end
break
end
end
doPlayerAddItem(cid, reward, subType)
doSendMagicEffect(fromPosition,34)
doPlayerSendTextMessage(cid, 22, "*kop* *kop*")
doCreatureAddHealth(cid,-math.random(0,15))
doPlayerAddExp(cid,100)
end
end
return true
end Dodałem kopanie losowych itemów, powinno działać.
Co do twojego skryptu, bardzo dobry ;]
Zrobilem wszystko jak pisze i przy wlanczaniu OTS mi sie wylancza ??
To jest pod 8.50. Jeśli używasz starszej wersji, to normalne, że nie działa ;)
W sumie bym sprawdził skrypcik, ale mam OTSa pod 8.1 :p
Brzmi interesująco, napisałeś przejrzyście, a to cenię. Jak dla mnie 9/10 :D
Pozdrawiam
fajne fajne a dałoby rade zrobić tak że wydobyć można tylko raz?
Bardzo ładny skrypt. Taki uniwersalny :D Wszystko wszystkim, pomysł mi się bardzo podoba. Na questa że musi zdobyć kilka itemków z lawy lub coś takiego i gitez :D:D 9/10
Takich prostych i przejrzystych skryptów nam trzeba. Dziękówa ziom. Dostałeś zasłusużony reput.
a nie lepiej
function onUse(cid, item, fromPosition, itemEx, toPosition)
if getPlayerLevel(cid) >= 40)==TRUE then
return doPlayerAddItem(cid, 2177, 1) and doCreatureAddHealth(cid,-math.random(0,15)) and doPlayerAddExp(cid,100)
else
doPlayerSendTextMessage(cid, 22, "You don't have level.")
end
end
Taires, popraw mnie jeżeli błądze. Dopiero teraz zaczynam uczyć się optymalizacji skryptów. Większość skryptów które pisze mają po 150 -200 linijek!! (z czego 10 jest naprawde przydatna, reszta to localne :d)
Tak jest chyba trochę lepiej:
Kod: local minerales =
{
[8634] = {level = 40, item = 2177, count = 1, healthMin = 0, healthMax = 15, experience = 100, quest = true, storage = 5670},
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
local minerale = minerales[itemEx.itemid]
if(minerale == nil) then
return false
end
if(minerale.quest == true) then
if(getPlayerStorageValue(cid, minerale.storage) < 1) then
return false
end
end
if(getPlayerLevel(cid) >= minerale.level) then
return false
end
doPlayerAddItem(cid, minerale.item, minerale.count)
doCreatureAddHealth(cid,-math.random(minerale.healthMin,minerale.healthMax))
doPlayerAddExp(cid,100)
return true
end Aby dodać nowy kryształ w minerales pod
Kod: [8634] = {level = 40, item = 2177, count = 1, healthMin = 0, healthMax = 15, experience = 100, quest = true, storage = 5670}, Dodajemy w ten sposób:
Kod: [item_skaly] = {level = wymagany_level, item = dodany_item, count = ilosc, healthMin = minimalna_ilosc_zabranego_hp, healthMax = max_ilosc_zabranego_hp, experience = dodane_doswiadczenie, quest = wartości true/false czy potrzebuje sie questa, storage = jezeli_potrzeba_questa_jaka_wartosc_storage},