• 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!
  • 2026 staff recruitment is open! Check it out and consider applying!

repeat until czy moze cos innego?

fracek91

Member
Joined
May 30, 2008
Messages
423
Reaction score
8
siema, jako ze nie jestem jakims mega specem od robienia wszelkich skryptow przychodze po pomoc. Mam taki skrypcik, ktory ma mi kasowac jakis tam kamien czy inna sciane blokujaca droge (powiedzmy, ze dzwignia w actions). No i mam takie cos
Code:
if item.itemid == 9827 and getgate.itemid ~= 0 then
doRemoveItem(getgate.uid,1)
doTransformItem(item.uid,item.itemid+1)
elseif item.itemid == 9828 and getgate.itemid ~= 0 then
doRemoveItem(getgate.uid,1)
doTransformItem(item.uid,item.itemid-1)
else
doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'Nic juz nie blokuje wejscia do wiezy.')
end
tylko, ze to ma jedna wade- jesli poza kamieniem bedzie tam cos lezalo to gracz, ktory nie wie jak ta dzwignia dziala i ze trzeba ciagnac ja do oporu pociagnie tylko raz i nie zauwazy efektu. Tutaj rozwiazaniem wydawalo mi sie uzycie petelki takiej jak mialem kiedys na TI w delphi...
repeat
doRemoveItem(getgate.uid,1)
until getgate.itemid == 0
No i niby takie cos w lua powinno zadzialac, tyle, ze to scrashowalo mi serwer. Do tego z tego co czytalem w jakims temacie jest to dosc pamieciozerne wiec moze jest na to jakis lepszy sposob? Mowcie co robic
 
repeat
bo nie zmienia się wartość getgate :)
co z tego, że usuwasz, jak nie próbujesz uzyskać kolejnego itemu? :P

Code:
repeat
doRemoveItem(getgate.uid,1)
getgate = [color=red]przywolujesz znowu to, czym znajdujesz ten gate, getThingFromPos czy co tam masz...[/color]
until getgate.itemid ~= 0

repeat - powtarzaj
until - dotąd, aż..
getgate.itemid NIE JEST 0
to drugi błąd w twoim przypadku (== 0 - dopóki JEST 0)- czyli Twój kod działałby i tak tylko raz ;)
 
rzeczywiscie elf, to nie byl madry pomysl... Ale moglbys mi wytlumaczyc dlaczego tam ma byc ~=0? Przeciez to wtedy zrobi tylko raz jezeli bedzie wiecej niz 1 item w tamtym miejscu bo skasuje 1 -> bedzie inny czyli warunek spelniony i wyjdzie z petli (ja to tak pojmuje). W ogole nie spodziewalem sie, ze elf mi odpowie.
Ja zrobilbym to tak, ale jezeli ktos mi wytlumaczy czemu tam ma byc until ~= 0 to chetnie to poprawie.
Code:
function onUse(cid, item, frompos, item2, topos)
gatepos = {x=963, y=1368, z=7, stackpos=1}
getgate = getThingfromPos(gatepos)


if item.itemid == 9827 and getgate.itemid ~= 0 then
repeat
getgate = getThingfromPos(gatepos)
doRemoveItem(getgate.uid,1)
until getgate.itemid == 0
doTransformItem(item.uid,item.itemid+1)
elseif item.itemid == 9828 and getgate.itemid ~= 0 then
repeat
getgate = getThingfromPos(gatepos)
doRemoveItem(getgate.uid,1)
until getgate.itemid == 0
doTransformItem(item.uid,item.itemid-1)
else
doPlayerSendTextMessage(cid,MESSAGE_EVENT_ADVANCE,'Nic juz nie blokuje wejscia do wiezy.')
end
  return 1
  end
Sprawdzilem i dziala. Wielki dzieki elf. Tylko mam jeszcze takie pytanie... jezeli ktos rzucilby mase jakichs zestackowanych przedmiotow to nie zamuli/scrashuje mi to serwera?

A tak swoja droga to mam pytanie z innej beczki, ale moze ktos przy okazji podpowie. Kupilem sobie vpsa jakiegos tam taniego z debianem tak zeby pocwiczyc no i przy kompilacji mam taki blad. Instalowalem najnowszego boosta z boost.org i nic mi to nie dalo, ciagle to samo. Ma kto jakis pomysl madry jak sobie z tym poradzic?

actions.o: In function `global constructors keyed to _ZN7ActionsC2Ev':
actions.cpp:(.text+0x379a): undefined reference to `boost::system::get_generic_category()'
actions.cpp:(.text+0x37a4): undefined reference to `boost::system::get_generic_category()'
actions.cpp:(.text+0x37ae): undefined reference to `boost::system::get_generic_category()'
baseevents.o: In function `global constructors keyed to _ZN10BaseEvents11loadFromXmlEv':
baseevents.cpp:(.text+0x21ca): undefined reference to `boost::system::get_generic_category()'
baseevents.cpp:(.text+0x21d4): undefined reference to `boost::system::get_generic_category()'
baseevents.o:baseevents.cpp:(.text+0x21de): more undefined references to `boost::system::get_generic_category()' follow
otserv.o: In function `otserv(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, ServiceManager*)':
otserv.cpp:(.text+0x41d5): undefined reference to `boost::this_thread::sleep(boost::posix_time::ptime const&)'
outfit.o: In function `global constructors keyed to _ZN7Outfits15parseOutfitNodeEP8_xmlNode':
outfit.cpp:(.text+0x30a): undefined reference to `boost::system::get_generic_category()'
outfit.cpp:(.text+0x314): undefined reference to `boost::system::get_generic_category()'
outfit.cpp:(.text+0x31e): undefined reference to `boost::system::get_generic_category()'
outputmessage.o: In function `global constructors keyed to _ZN17OutputMessagePool22outputMessagePoolCountE':
outputmessage.cpp:(.text+0x14a): undefined reference to `boost::system::get_generic_category()'
outputmessage.cpp:(.text+0x154): undefined reference to `boost::system::get_generic_category()'
outputmessage.o:outputmessage.cpp:(.text+0x15e): more undefined references to `boost::system::get_generic_category()' follow
collect2: ld returned 1 exit status
make[1]: *** [theforgottenserver] Error 1
make[1]: Leaving directory `/home/fronza/source'
make: *** [all] Error 2
Zapewne to wina paczek, instalowalem najnowszego boosta z boost.org, ale nic to nie zmienilo, a zadnych innych pomyslow nie znalazlem w google.
 
Last edited:
Code:
local position = {x = 963, y = 1368, z = 7, stackpos = 1}
function onUse(cid, item, fromPosition, itemEx, toPosition)
	if(item.itemid == 9827) then
		local tmp = getThingFromPos(position)
		while tmp.itemid ~= 0 do
			doRemoveItem(tmp.uid, 1)
			tmp = getThingFromPos(position)
		end

		doTransformItem(item.uid, item.itemid + 1)
		doDecayItem(item.uid)
	elseif(item.itemid == 9828) then
		local tmp = getThingFromPos(position)
		while tmp.itemid ~= 0 do
			doRemoveItem(tmp.uid, 1)
			tmp = getThingFromPos(position)
		end

		doTransformItem(item.uid, item.itemid - 1)
		doDecayItem(item.uid)
	else
		doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Nic juz nie blokuje wejscia do wiezy.')
	end

	return TRUE
end

tak, wina paczek.
 
Nie patrz na te glupoty, ktore pisalem wczesniej, nie znam sie na tym jeszcze za dobrze. Widze, ze uzyles innego typu petli, chociaz to co mi napisales dziala calkowicie dobrze, chyba, ze Twoj skrypt ma jakies dodatkowe zalety to go zmienie. Dzieki za pomoc


jeszcze co do tych paczek - to brakuje czegos z boosta na pewno? Probowac instalowac jakies inne wersje niz najnowsza czy przyczyna jest gdzies indziej?
 
owszem, ma taką zaletę, że nie musisz sprawdzać za pomocą IF, czy item istnieje oraz dźwignia działa _zawsze_. Więc de facto na końcu możesz usunąc 'else' oraz doSendTextMessage :p

wygląda na to, że brakuje boost-system.
 
Dobra, ostatnie glupie pytanie... dodalem do sources.list rozne repozytoria, a w apt-cache search i tak znajduje mi tylko libboost-system1.35-dev, ktore mam zainstalowane? Dlaczego tak jest i jak ewentualnie zainstalowac jakas nowsza wersje? Uzywam debiana lenny, bodajze 5.0.8
 
Nie ma w ogole roznicy, w ogole nic sie nie zmienia jak wpisuje apt-cache search ciagle sa te same wyniki, niewazne jakie repo daje, moze cos robie zle... wyglada na to, ze sam sobie z tym nie poradze, gdyby ktos chcial pomoc za jakas dyszke to niech zostawi mi pw
 
Dzieki averatec to dziala, tylko teraz przez to, ze nainstalowalem tych boostow to mam jeszcze taki blad
/usr/bin/ld: warning: libboost_system.so.1.41.0, needed by /usr/local/lib/libboost_filesystem.so, may conflict with libboost_system.so.1.42.0
Ale silnik udalo sie skompilowac. Nie bedzie przez to klopotu?

nie odswiezam juz tematu ale gdyby ktos wiedzial co zrobic jak na stronie wywala mi takie cos:
A Database Error Occurred

Error Number: 1140

Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

SELECT p.id, p.question, GROUP_CONCAT(a.answer SEPARATOR ';') AS answers, GROUP_CONCAT(a.id SEPARATOR ';') AS answers_id FROM poll p JOIN poll_answer a ON p.id = a.poll_id WHERE p.status = 1 AND date_start <= NOW() AND date_end >= NOW()
to bede wdzieczny jak mi powie jak to zrobic. Znalazlem co prawda to http://otland.net/f28/modern-aac-i-mysql-116166/ ale nic nie ruszylo

mysql> set sql_mode='ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
 
Last edited:
Back
Top