Skrypty & Kody [ACTIONS]Prosz? o pomoc ze skryptem na "catch pet".

Status
Zamknięty.

KiritoWOT

User
Zarejestrowany
Dołączył
Sierpień 22, 2014
Posty
34
Liczba reakcji
1
Witam, na wst?pie chcia?bym powiedzie?, ?e dopiero zaczynam sw? przygod? ze skryptami, dlatego prosz? o wyrozumia?o??.
Ot?? pr?buje napisa? skrypt, kt?ry powinien dzia?a? w taki spos?b:
-U?ywaj?c item o id X na okre?lonym potworku mamy 50% szans, ?e skrypt da nam item o id Y i dzi?ki niemu b?dziemy mogli go przyzwa?. Czyli co? jak pokeball.
Wykombinowa?em co? takiego:
[LUA]local cfg = {
--name monsterka, id itemu, storage value
pets = {
['Dragon'] = {670}, {1}
}
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

if isInArray(cfg.pets, getCreatureName(cid)) and math.random(10) <= 5 then
doPlayerAddItem(cfg.pets[1],1)
setPlayerStorageValue(cid,100,cfg.pets[2])
end
end
[/LUA]
Problem w tym, ?e ten kod nie dzia?a, nie ma b??d?w w konsoli, dlatego totalnie nie wiem co robi? ?le. Kiedy pr?buje u?y? itemu na monsterze, moja posta? dostaje tylko cancel "You cannot use this object".
Z g?ry dzi?kuj? za pomoc, pozdrawiam.
U?ywam TFS v0.3.6pl oczywi?cie.
 
Odp: [ACTIONS]Prosz? o pomoc ze skryptem na "catch pet".

Jesli "You cannot use this object" to moze zle zadeklarowales uzywanie itemu, co wpisales w actions.xml?
 
Odp: [ACTIONS]Prosz? o pomoc ze skryptem na &quot;catch pet&quot;.

Odp: [ACTIONS]Prosz? o pomoc ze skryptem na &quot;catch pet&quot;.

[MENTION=408163]Ciamciaj Bigos[/MENTION]
[LUA]<action itemid="2398" event="script" value="pet system/system.lua"/>[/LUA]
Wydaj? mi si?, ?e wszystko jest ok.

#edycja

Chyba doszed?em do tego czemu skrypt nie dzia?a. Prawdopodobnie problem jest gdzie? w poborze nazwy potwora przez skrypt. Wywnioskowa?em to z tego, ?e dopisa?em do skryptu co si? dziej?, gdy warunki s? nie spe?nione. Teraz to wszystko wygl?da tak:
[LUA]local cfg = {

--name monsterka, id itemu, storage value
pets = {
["Dragon"] = {670}, {1}
}
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

if not isInArray(cfg.pets, getCreatureName(cid)) then
doPlayerSendCancel(cid,"Sorry, you can't make blood-pact with that monster!")
return 0
end

if math.random(10) > 5 then
doPlayerSendCancel(cid,"Sorry, monster wasn't intrested to make blood-pact with you!")
return 0
end

if isInArray(cfg.pets, getCreatureName(cid)) and math.random(10) <= 5 then
doPlayerAddItem(cfg.pets[1],1)
setPlayerStorageValue(cid,100,cfg.pets[2])
doPlayerSendTextMessage(cid,"You sucessfully made pact with monster!")
return 1
end
end
[/LUA]

Wy?wietla mi si? ci?gle b??d:
"Sorry you can't make blood-pact with that monster!".
Natomiast ten cancel dotyczy tej cz??ci:
[LUA]if not isInArray(cfg.pets, getCreatureName(cid)) then
doPlayerSendCancel(cid,"Sorry, you can't make blood-pact with that monster!")
return 0
end[/LUA]
Prosi?bym kogo? zaawansowanego o dok?adne przeanalizowanie kodu. Z g?ry dzi?kuje!

---------- Tre?? dodana o 18:27 ----------
 
Ostatnia edycja:
Odp: [ACTIONS]Prosz? o pomoc ze skryptem na "catch pet".

1) Tablica jest ?le napisana

[LUA]pets = {
['Dragon'] = {670}, {1}
}[/LUA]

W tym przypadku tablica pets posiada 2 elementy, co mo?na szybko sprawdzi?:
[LUA]for k, v in pairs(pets) do
print(k, v)
end

-- Output
1 table: 0x248ff60
Dragon table: 0x248ff20[/LUA]

Je?li dobrze pami?tam to pierwsze 100 storage jest zarezerwowane. Przetrzymywanie wsz?dzie warto?ci '1' w tablicy nic nie da tak, jak ci?gle jej przypisywanie do tego samego storage. Poza tym, skoro daje przedmiot, po co storage? Jak ju? to w ten spos?b:
[LUA]pets = {
-- [Pet name] = {id, storage id}
['dragon'] = {670, 5521},
['rat'] = {671, 5522}
}[/LUA]

2) Przeszukujesz tablice pobieraj?c nazw? gracza, kt?ry u?y? przedmiot (cid), a nie potwora, na kt?rego przedmiot chcesz u?y? (itemEx).

3) Odwo?ujesz si? do ca?ej tablicy, nie do tablicy dla wybranego potwora.
[LUA]doPlayerAddItem(cfg.pets[1],1)
setPlayerStorageValue(cid,100,cfg.pets[2])[/LUA]

cfg.pets[1] to tablica, cfg.pets[2] to nil.

4) isInArray s?u?y do wyszukiwania warto?ci, a nazwy potwor?w w tablicy to klucze.

5) Won do poradnik?w.
 
Odp: [ACTIONS]Prosz? o pomoc ze skryptem na "catch pet".

[MENTION=15914]Dantez[/MENTION]
Wnioskuj?c si? na tym co napisa?e?, uda?o mi si? w ko?cu to jako? zebra? do kupy i skrypt dzia?a poprawnie.

1) Tablica jest ?le napisana
Tablica jest ?le napisana tylko i wy??cznie przez m?j brak umiej?tno?ci i do?wiadczenia. Jak m?wi?em dopiero si? ucz?.
Je?li dobrze pami?tam to pierwsze 100 storage jest zarezerwowane
Cytat z otland:
"TFS is using storages between 1000000 and 2000000 (used outfits, mounts and addons)."
oraz
"Other than that range, only 30018 is "reserved" for promotion"
Poza tym, skoro daje przedmiot, po co storage?
Storage jest mi potrzebne do drugiej cz??ci systemu.
Przeszukujesz tablice pobieraj?c nazw? gracza, kt?ry u?y? przedmiot (cid), a nie potwora, na kt?rego przedmiot chcesz u?y? (itemEx).
Czyt odpowied? na punkt 1.
Odwo?ujesz si? do ca?ej tablicy, nie do tablicy dla wybranego potwora.
To samo.
isInArray s?u?y do wyszukiwania warto?ci, a nazwy potwor?w w tablicy to klucze.
U?y?em isInArray w tym przypadku, poniewa? podpatrzy?em na forum w jakim? skrypcie(nie pami?tam jakim), ?e w taki spos?b zosta?o u?yte. ?le zrobi?em, bo nie pomy?la?em, ?e skrypt mo?e by? b?edny.
5) Won do poradnik?w.
Nie ?adnie tak m?wi? do drugiej osoby.

--------------------------------------------------

Temat do zamkni?cia!
 
Status
Zamknięty.
Back
Do góry