• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

getThing

Hitsugaya

New Member
Joined
Mar 28, 2008
Messages
90
Reaction score
0
Location
Poland, Łódź, RTK
Witam. Chciał bym się dowiedzieć czegoś na temat wyżej wymienionej funkcji. Ciągle wywala mi błąd z tą funkcja mimo że w ogóle jej nie stosowałem w skrypcie. Ponadto, dlaczego funkcje : getPlayerSkillLevel(cid, SKILL_DISTANCE) oraz getPlayerSlotItem(cid, CONST_SLOT_AMMO) przy starcie silnika (posiadam TFSa 0.3.6pl1) pisze mi obok tych funkcji : "Player not found". Przez to nie działa mi reszta skryptu ;p To ja może pokaże :

Code:
local distance = getPlayerSkillLevel(cid, SKILL_DISTANCE)
local ammo = getPlayerSlotItem(cid, CONST_SLOT_AMMO)

local combatarrow = createCombat(COMBAT_PHYSICALDAMAGE, CONST_ME_DOUBLEIMPACT, CONST_ANI_ARROW, false, "distance+lvl", "(distance+20)+lev")

function onCastSpell(cid, var)
	if getItemWeaponType(uid, 5) == true then
		if ammo == 2544 then -- Arrow
			doCombat(cid, combatarrow, var)
			doCombat(cid, combatarrow, var)
		return doCombat(cid, combatarrow, var)
		end
	else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Tylko z luku mozesz oddac strzal!") 
	end
end

Przy starcie silnika wywala mi właśnie te 2 błędy, a przy użyciu czaru w grze wywala mi
<luaGetThing> Thing not found.

Co jest grane ??

Przepraszam za tak chaotyczny post ale czuje się nie zdrowo :P
 
Zmienne distance, ammo trzymasz jako tzw. stale, ktore zostana zdefiniowane podczas wczytywania skryptu, nie po jego wywolaniu - dlatego tez nie znajduje gracza. Pozatym loopnij sobie te combaty, a nie piszesz 3x to samo, pozatym thing not found, bo getPlayerSlotItem zwraca nil.
 
Zmienne distance, ammo trzymasz jako tzw. stale, ktore zostana zdefiniowane podczas wczytywania skryptu, nie po jego wywolaniu - dlatego tez nie znajduje gracza. Pozatym loopnij sobie te combaty, a nie piszesz 3x to samo, pozatym thing not found, bo getPlayerSlotItem zwraca nil.

Już zgłupiałem do reszty...

Code:
local umiejetnosc = getPlayerSkillLevel(cid, 4)
local amunicja = getPlayerSlotItem(cid, 10)

local combatarrow = createCombat(COMBAT_PHYSICALDAMAGE, CONST_ME_DOUBLEIMPACT, CONST_ANI_ARROW, false, "umiejetnosc+lvl", "(umiejetnosc+20)+lev")

function onCastSpell(cid, var)
	if getItemWeaponType(uid, 5) == true then
		if amunicja == 2544 then -- Arrow
			doCombat(cid, combatarrow, var)
			doCombat(cid, combatarrow, var)
		return nil
		end
	else doPlayerSendTextMessage(param, MESSAGE_INFO_DESCR, "Tylko z luku mozesz oddac strzal!") 
	end
end

Teraz wyskakuje jeszcze błąd z doPlayerSend że nie znaleziono gracza :p Nie bardzo wiem jak to poprawić ;/

Co do combatów to, nie miałem innego pomysłu jak wywołać 2 x to samo :P
 
Musisz pobrac do zmiennych id boni z obu rak, pozniej sprawdzic czy bron jest bow/xbow, nastepnie sprawdzic czy ma strzale na miejscu ze strzalami, pozniej loopnij sobie uzywajac iteratora for, pozniej wywolaj combaty, pozniej doTargetCombatHealth, bo nie mozna w locie edytowac formuly combatu, chyba ze callback zrobisz i tam znowu sprawdzanie skilla/poziomu.
 
I to wszystko umieścić w onCastSpell ?

@edit

Nie dam rady tego napisać :P Poddaje się, kiedy indziej się napisze tak skomplikowany kod :>

Do zamknięcia.
 
Last edited:
LUA:
function onCastSpell(cid, var)
    if (getItemWeaponType(getPlayerSlotItem(cid, 5).uid, 5) or getItemWeaponType(getPlayerSlotItem(cid, 6).uid, 5)) then
        if (getPlayerSlotItem(cid, 10).itemid == 2544) then
            for i=1,3 do    
                doCombat(cid, createCombat(COMBAT_PHYSICALDAMAGE, CONST_ME_DOUBLEIMPACT, CONST_ANI_ARROW, false, getPlayerSkillLevel(cid, 4)+getPlayerLevel(cid), (getPlayerSkillLevel(cid, 4)+20)+getPlayerLevel(cid)), var)
            end
        return TRUE
        end
    else doPlayerSendTextMessage(param, MESSAGE_INFO_DESCR, "Tylko z luku mozesz oddac strzal!") 
    end
end
 
Last edited by a moderator:
Dzięki Azi :) Aaa jeszcze jedno pytanko. Jak ustawić opóźnienie żeby drugi strzał leciał 200 ms później ?? Próbowałem addEvent(onCastSpell, 0, parameters), addEvent(onCastSpell, 200, parameters) ale, to nie to :P Musze przerabiać skrypt pod addEvent ??

Pozdrawiam

@edit

A jeszcze mi się przypomniało, żeby skrypt usuwał 2 strzały. Próbowałem doRemoveItem(getPlayerSlotItem(cid, 10).itemuid, 2), doRemoveItem(uid, 2), doRemoveItem(item.itemuid, 2) ale, nie wykrywa przedmiotu :<
 
Azi, dzięki :) chojrak, zapomniałem wspomnieć że mam 8 doCombat :P Nie bardzo wiem jak je podzielić na np doCombat1, 2, 3, 4 itp i żeby potem to wywołać oraz żeby nie kolidowały ze sobą.
 
Mozesz np.
Code:
for i = 1, 8 do
	addEvent(doCombat, i * 200, cid, combat, var)
end
 
chojrak, zrobiłem inaczej ale, dzięki za pomoc :)

@edit

Sorki za to trucie ale, jest jeszcze jeden mały problem :> mianowicie : doSendMagicEffect(getCreaturePosition(pid), CONST_ME_DOUBLEIMPACT). Po użyciu czaru wyskakuje <luaGetThingPosition> Thing not found.
W innym skrypcie mam identyczną funkcje na pobranie pozycji i działa a tutaj nie chce :<

Przepraszam za double posta ale zależy mi na szybkiej odpowiedzi.

@edit

Sorki za to trucie ale, jest jeszcze jeden mały problem :> mianowicie : doSendMagicEffect(getCreaturePosition(pid), CONST_ME_DOUBLEIMPACT). Po użyciu czaru wyskakuje <luaGetThingPosition> Thing not found.
W innym skrypcie mam identyczną funkcje na pobranie pozycji i działa a tutaj nie chce :<
 
Last edited by a moderator:
Azi, po tobie się nie spodziewałem tego ;( doSendMagicEffect(getCreaturePosition(cid), CONST_ME_DOUBLEIMPACT) wysyła do gracza a nie na cel :P Pokazuje na mnie efekt a nie na celu.
 
Oki dałem rade z tym co wyżej opisałem :> Skrypt działa i ma się świetnie, chciał bym się tylko pozbyć 1 błędu z konsoli w tej funkcji
if (getItemWeaponType(getPlayerSlotItem(cid, 5).uid, 5) or getItemWeaponType(getPlayerSlotItem(cid, 6).uid, 5)) then
. Sprawdza czy jest bow w lewej albo prawej ręce. Jeżeli znajdzie w prawej a nie znajdzie w lewej to wyskakuje błąd :
*luaGetThing) Thing not found
próbowałem jakoś przebudować ten warunek, bez skutku. W prawej item jest a w lewej go nie ma. Próbowałem się bawić returnami ale, nic z tego.

Zostaje jeszcze kwestia tego :
doSendMagicEffect(getCreaturePosition(pid), CONST_ME_DOUBLEIMPACT)

Pozdrawiam
 
Last edited:
Back
Top