• 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!

Cały czas problem ze skryptem

Kurczok

Newbie
Joined
Oct 22, 2009
Messages
497
Reaction score
4
Witam znowu mam problem ze skryptem (a raczej cały czas ten sam)
jednak tym razem postaram się to lepiej zobrazować

To jest część skryptu:

Lua:
local monsters =
{
[1] = {name = "Troll", id = 1, ex = 100, go = 100},
[2] = {name = "Rotworm", id = 2, ex = 80, go = 20}
}

function onSay(cid, words, param, channel)

local poziom =
{
p1 = 100,
p2 = 200,
}

local quest2 = 
{
q1 = "nazwa potwora to "  .. rand.name .. " ilosc ".. getPlayerStorageValue(cid, 4402) .."",
q2 = "nazwa potwora to "  .. rand.name .. " ilosc ".. getPlayerStorageValue(cid, 4402) ..""
}
		
if (param == 'start') then
	if getPlayerStorageValue(cid, 4400) == 0 or getPlayerStorageValue(cid, 4400) == -1 then
		if getPlayerLevel(cid) >= poziom.p1 then		
			setPlayerStorageValue(cid, 4400, 1)	
				local rand = monsters[math.random(1, #monsters)]	
			setPlayerStorageValue(cid, 4406, rand.id)	
			setPlayerStorageValue(cid, 4411, rand.ex)
			setPlayerStorageValue(cid, 4416, rand.go)
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED,"nazwa potwora to "  .. rand.name .. " ilosc ".. getPlayerStorageValue(cid, 4402) .."")	
			if getPlayerLevel(cid) >= poziom.p2 then		
				setPlayerStorageValue(cid, 4400, 2)	
					local rand = monsters[math.random(1, #monsters)]
				setPlayerStorageValue(cid, 4407, rand.id)	
				setPlayerStorageValue(cid, 4412, rand.ex)
				setPlayerStorageValue(cid, 4417, rand.go)
				doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED,"nazwa potwora to "  .. rand.name .. " ilosc ".. getPlayerStorageValue(cid, 4402) .."")						
			end
		end
	end
elseif (param == 'help') then
	if getPlayerStorageValue(cid, 4400) >= 1 then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "".. quest2.q1 .. "")  -- nie mozna pobrac rand
		if getPlayerStorageValue(cid, 4400) >= 2 then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "".. quest2.q2 .. "") -- nie mozna pobrac rand
		end
	end
end
	return true
end

Problem polega na tym że przy wysyłaniu wiadomości do gracza
Lua:
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "".. quest2.q1 .. "")
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "".. quest2.q2 .. "")
wywala błąd

Code:
[07/03/2010 21:44:47] data/talkactions/scripts/quest.lua:55: attempt to index global 'rand' (a nil value)
[07/03/2010 21:44:47] stack traceback:
[07/03/2010 21:44:47] 	data/talkactions/scripts/quest.lua:55: in function <data/talkactions/scripts/quest.lua:31>

55 to linijka

Code:
q1 = "nazwa potwora to "  .. rand.name .. " ilosc ".. getPlayerStorageValue(cid, 4402) .."",


2)Mam jeszcze takie pytanie jak mogę zablokować możliwość dawania namelocków przez tutorów?
 
EDIT: spojrzalem na skrypt.. ostro pokrecony, podesle zaraz poprawke.
 
Last edited:
co to jest rand.name?

local rand = monsters[math.random(1, #monsters)]

Po wylosowaniu pobiera z tablicy wartość name czyli nazwę potwora

@Koob

Co mi da zmiana rand? bo wydaje mi się że to nic nie zmieni bo jak by miało działać to by w .. rand.name .. wpisywało ostatnio wylosowaną wartość (nazwę potwora)

EDIT: spojrzalem na skrypt.. ostro pokrecony, podesle zaraz poprawke.

Ostro pokręcone jest to że skrypt ma prawie 400 linijek, ale jak narazie pisze go tak żebym mógł w miarę łatwo wszystko pozmieniać potem zajmę sie optymalizacjią.
 
Wysun rand na gore heh... nad miejsca w ktorych go zaczynasz uzywac.
 
Lua:
local quest2 = {
		[1] = "nazwa potwora to "  .. monsters[1] .. " ilosc ".. getPlayerStorageValue(cid, 4402),
		[2] = "nazwa potwora to "  .. monsters[2] .. " ilosc ".. getPlayerStorageValue(cid, 4402)
}

..

elseif (param == 'help') then
        if getPlayerStorageValue(cid, 4400) >= 1 then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "".. quest2[getPlayerStorageValue(cid, 4407)] .. "")  -- nie mozna pobrac rand
                if getPlayerStorageValue(cid, 4400) >= 2 then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "".. quest2[getPlayerStorageValue(cid, 4407)] .. "") -- nie mozna pobrac rand
                end
        end
end

tylko nie wiem czy chcesz, zeby to tak dzialalo. Albo rand przed tym:
Lua:
if (param == 'start') then
 
Wysun rand na gore heh... nad miejsca w ktorych go zaczynasz uzywac.

Nie ma tak prosto bo wcześniej też tak myślałem ale nie mogłem tego zrobić już nie pamiętam dobrze czemu (przejże skrypt w tym kierunku i dam edit)

@Koob

No właśnie nie bo chodzi mi o to żeby wyświetlało nazwę wylosowanego monstera a nie ściśle określonego.
 
@Koob

No właśnie nie bo chodzi mi o to żeby wyświetlało nazwę wylosowanego monstera a nie ściśle określonego.

start != help

czyli za kazdym razem chcesz innego wylosowanego moba ? Domyslam sie, ze start to poczatek jakiegos tam questa, zapisujesz id w storage dla playera, player daje pozniej help i znowu losowanie moba ?
 
Tak ale za każdym razem gdy wykona się "start
i przejdzie przez wszystkie ify do losowania.

Nie chce żeby losowało po wpisaniu "help"

@Specjalist

Nie zrozumiałem Cie :D

@Nemaneth

po dodaniu losowania ponad miejsce w którym go używam to muszę ograniczyć go ifem aby nie losowało za każdym razem gdy będzie wykonywany skrypt jednak po zrobieniu zapytania zmianie if (param == 'start') then na elseif wywala błąd:

Code:
[07/03/2010 22:12:28] data/talkactions/scripts/quest.lua:349: attempt to index global 'quest2' (a nil value)
[07/03/2010 22:12:28] stack traceback:
[07/03/2010 22:12:28] 	data/talkactions/scripts/quest.lua:349: in function <data/talkactions/scripts/quest.lua:31>

czyli w linijce :

Lua:
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "".. quest2.q1 .. "")  -- nie mozna pobrac rand

Czyli poza miejscem błędu nic się nie zmieniło
 
Last edited:
start i help sa niezalezne, wiec jak chcesz korzystac z randa spod starta przy helpie ? Zapisz tego randa w jakims storagu i w helpie sciagnij tego storaga, albo w helpie losuj drugi raz ( nie wiem dokladnie jak chcesz, zeby to dzialalo )
 
start i help sa niezalezne, wiec jak chcesz korzystac z randa spod starta przy helpie ? Zapisz tego randa w jakims storagu i w helpie sciagnij tego storaga, albo w helpie losuj drugi raz ( nie wiem dokladnie jak chcesz, zeby to dzialalo )


Tak właśnie chciałem zrobić tylko że przy zapisania do storage nie zapisuje nic a przy próbie wyświetlenia na ekranie

Lua:
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED,""  .. rand .. ""

Wywala oczywiście:

Code:
[07/03/2010 22:24:34] data/talkactions/scripts/quest.lua:148: attempt to concatenate local 'rand' (a table value)
[07/03/2010 22:24:34] stack traceback:
[07/03/2010 22:24:34] 	data/talkactions/scripts/quest.lua:148: in function <data/talkactions/scripts/quest.lua:31>
 
byloby czytelniejsze gdybys zrobil rand = math.random(1, #monsters) i dalej
monsters[rand].name
 
Ponieważ chciałem pokazać Koobowi że nie bardzo mam jak zapisać to do storage ponieważ nie jest to wartość liczbowa.

bo to tablica. Napisz jak chcesz, zeby to dzialalo to Ci poprawie.
 
Chce żeby zapisywało gdzieś name wylosowanego potwora żebym mógł spokojnie go potem użyć przy wyświetlaniu komunikatu.
 
Ponieważ chciałem pokazać Koobowi że nie bardzo mam jak zapisać to do storage ponieważ nie jest to wartość liczbowa.

No ta, ale przecież potrzebujesz tylko .name, a niecałe rand, czy może ja to źle rozumiem? xD
 
@kurczok
no to Ci napisalem w drugim skrypcie poprawke: w storage 4407 trzymasz wartosc z monsters[...].id, czyli mozesz sobie pozniej sciagnac tego storage do monsters[getPlayerStorage(cid, 4407)] c`nie ?
 
Back
Top