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

[zaawansowane lua, czyli dla hardcorowców] Rozpoczynanie rozmowy z npc w onThink :P

Dubler

PHP, LUA, C++
Joined
Aug 3, 2009
Messages
268
Reaction score
11
Location
Poland
No więc, chciałbym napisać skrypt który rozpoczynał by rozmowę z npc gdy się do niego podejdzie. (a potem jeszcze żeby trade wysłał)
Zakładając że jestem jedynym graczem na ots (reszte sobie dopisze puźniej) napisalem getspectators i dalej stoje ;/

Code:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
local pid = 0
function onCreatureAppear(cid) 		npcHandler:onCreatureAppear(cid) pid = cid end
function onCreatureDisappear(cid) 	npcHandler:onCreatureDisappear(cid) end
function onThink() 					npcHandler:onThink() 
local players = getSpectators(getCreaturePosition(pid), 1, 1)
if #players > 1 then
--###########FOCUS HERE #############-
selfSay('Enjoy my shop!', cid)
--###########Send non-verbal trade request ###-----
end
end
 
tyy jak to robisz tylko dla jednego npc'a to może pokombinuj z funkcją onStepIn ? co prawda noobskie ale wiesz xdd łatwiej

jeśli dla wielu to hmm sam jestem ciekaw, jak to dokładnie zrobić by DOBRZE działało
 
@up2
no to jak byś to zrobił w movemencie żeby rozpocząć rozmowę z npc? jeszcze trudniej bo w npc masz przynajmniej juz biblioteki gotowe, tylko jakoś coś przepisać, coś przerobić i gotowe... :D gdybym ja ogarniał tą pseudo obiektowość.. :(

@up
nom, onthink, zadna inna nie moze byc prawda?
 
Ogarnij to ortalionie!
3njle.png

 
no ale o to chodzi żeby na rozmowę nie reagował na hi, bye i inne tego typu keywordy. tylko i wylacznie trade z jakimis itemami w shopie... onPodejscieDoNpc :p
 
ja pierdole...
po pierwsze to ma być luaonly, c++ nie ogarniałem, nie ogarniam i do studiów na politechnice nawet nie zamierzam ogarniać
po drugie to jebać hi jak docelowo ma nie prowadzić z graczem wywodów o polityce tylko otworzyć trade tylko i wyłącznie wtedy kiedy gracz do niego podejdzie... że doCreatureSay z npcta to odkrwycze nie jest i pewnie tak zastosuje tylko gdzie tu trade jest?

@edit:
a po trzecie to to ma byc skrypt w onThinku npcta bo tego typu npctów będzie kilkanaście z różnymi dynamicznie zmieniającymi się pozycjami.

@down
no dobra, to już ciekawsze wyjaśnienie, w poszukiwaniu trade znalazłem w docu getTradeState czy coś koło tego, do lua_Functions nie przyszlo mi do glowy szukac czegokolwiek

@edit2:
i w luascript jest to samo... tylko i wylacznie
Code:
lua_register(m_luaState, "getPlayerTradeState", LuaInterface::luaGetPlayerTradeState);
 
Last edited:
ja pierdole...
po pierwsze to ma być luaonly

Przecież nie chcę, żebyś pisał w C++, tylko, że w LUA_FUNCTIONS.CPP masz do dyspozycji wszystkie funkcje i bodajze cos z tradem też jest.
pobierz liste przedmiotow.
Mozna wprowadzic pare kombinacji, zeby Ci automatycznie te itemki wjebalo do interfejsu gry.
Poczytaj.
 
pomyliłeś tematy, btw. jak juz pisalem wczesniej tam jest tylko getPlayerTradeState jedyna funkcja więc nadal szukam rozwiązania
 
usuń w pliku npc'a definiowanie keywordow czychuj wie jak to się nazywa, usuń linijke z odpowiedzią na hi czy co tam chcesz
 
na to już wpadłem po pierwszych 3 minutach kombinowania, tylko co dalej żeby trade z listą itemów wysłał? :p
 
na to już wpadłem po pierwszych 3 minutach kombinowania, tylko co dalej żeby trade z listą itemów wysłał? :p

dopisz sobie funkcje w zrodlach, ktora wywola Player::sendShopWindow(Npc* npc);
 
@up
pomijając to że nie ogarniam c++ i zakladając że "npc * npc" to zmienna z cid npcta to gdzie jest zmienna z graczem do którego ma to okno być wysłane i gdzie ustawić zawartość tego okna? :d
 
pierdolenie, jest funkcja na wysyłanie trade z npc już
Code:
local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
	if items[item].buyPrice ~= 0 then
		doPlayerRemoveMoney(cid, amount * items[item].buyPrice)
		for i = 1, amount do
			doPlayerAddItem(cid, items[item].item_id, amount)
		end
		doGADAJ_ALOT(cid, 200, {'You bought '..amount..' '..items[item].realName..' for '..items[item].buyPrice * amount..' gold coins.'})
	end
end
 
local onSell = function(cid, item, subType, amount, ignoreCap, inBackpacks)
	if items[item].sellPrice ~= 0 then
		doPlayerAddMoney(cid, items[item].sellPrice * amount)
		doPlayerRemoveItem(cid, items[item].item_id, amount)
		doGADAJ_ALOT(cid, 200, {'You sell '..amount..' '..items[item].realName..' for '..items[item].sellPrice * amount..' gold coins.'})
	end
end


openShopWindow(cid, X, onBuy, onSell)
 
@up
zaraz przetestuje, jeśli zadziała to cie uwielbiam człowieku ;d

zaraz zaraz, co to za funkcja doGADAJ_ALOT()??? pierwsze widze xD


DZIAŁA!!!!!!!!!!!!!!! ALLELUJA, a już traciłem nadzieję!! Wielkie dzięki :p
 
Last edited:
@up
zaraz przetestuje, jeśli zadziała to cie uwielbiam człowieku ;d

zaraz zaraz, co to za funkcja doGADAJ_ALOT()??? pierwsze widze xD

a sorry to takie moje gówno, tutaj masz, to jest local funkcja

Code:
function doGADAJ_ALOT(cid,delay,messages)
        for i = 1,#messages do
            addEvent(doCreatureSay,delay * i, getNpcCid(), messages[i], TALKTYPE_PRIVATE_NP, false, cid)
        end
end
 
dobra, a powiedz mi jeszcze, jest jakaś funkcja sprawdzająca czy player ma otware okno shopa? :d znalazłem tylko na trade?
nie uśmiecha mi się zbytnio robienie tego na storage
 
Back
Top