DE

Suporte math.random

Por deglorio, 26 de ago. de 2016 em Scripts

suporte
pokemon
otserv
39
5.4k
27 de agosto de 2016 às 00:44
Em 26/08/2016 at 21:38, deglorio disse:

Aguardo e agradeço muito

 

Eu fiz umas modificações no NPC:

local keywordHandler = KeywordHandler:new()local npcHandler = NpcHandler:new(keywordHandler)NpcSystem.parseParameters(npcHandler)local talkState = {}function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) endfunction onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) endfunction onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) endfunction onThink() npcHandler:onThink() endlocal tasks = {[1] = {name = "Blastoise", qnt = 20, npc = "Junko"},[2] = {name = "Electabuzz", qnt = 15, npc = "Junko"},[3] = {name = "Venusaur", qnt = 18, npc = "Junko"},[4] = {name = "Charizard", qnt = 27, npc = "Junko"},}local function getRandomTaskMonster1 ()	local randomTask = math.random(#tasks)	local taskPokemon = tasks[randomTask].namereturn taskPokemonendlocal function getRandomTaskMonster2 ()	local randomTask2 = math.random(#tasks)	local taskPokemon2 = tasks[randomTask2].namereturn taskPokemon2end function creatureSayCallback(cid, type, msg)	if not npcHandler:isFocused(cid) then return false end	 	local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid	local msg = msg:lower()		if msgcontains(msg, "task") then		qntLeft = 84956		gotDaily = 84957		fixedPokemon = 84958		daily = 5619846		check = 84959		done = 84960				if getPlayerStorageValue (cid, gotDaily) == 1 then			if getPlayerStorageValue (cid, done) == 1 then				selfSay ("Thank you! Was incredible!", cid)				talkState[talkUser] = 0			return true			elseif getPlayerStorageValue (cid, qntLeft) == 0 then				selfSay ("Did you kill all of them?", cid)				setPlayerStorageValue (cid, check, 1)				talkState[talkUser] = 2			return true			elseif getPlayerStorageValue(cid, 25588) > os.time() then				selfSay("You have to wait 24h to do my task again!", cid)				talkState[talkUser] = 0			return true			elseif getPlayerStorageValue (cid, daily) ~= 0 and getPlayerStorageValue (cid, daily) ~= -1 then				if getPlayerStorageValue (cid, qntLeft) >= 0 then									local n = string.explode(getPlayerStorageValue (cid, daily), " ")					local str = string.sub(getPlayerStorageValue (cid, daily), 1, 1)					local sta = string.sub(getPlayerStorageValue (cid, daily), 2, string.len(getPlayerStorageValue (cid, daily)))					name = ""..string.upper(str)..""..string.lower(sta)..""							selfSay("What are you waiting for? Go kill the remaining "..getPlayerStorageValue (cid, qntLeft).." "..name.."!", cid)					talkState[talkUser] = 2				return true				end			end		end						if getPlayerStorageValue (cid, fixedPokemon) ~= 1 then			randomName1 = getRandomTaskMonster1 ()			randomName2 = getRandomTaskMonster2 ()						while randomName1 == randomName2 do				randomName1 = getRandomTaskMonster1 ()				randomName2 = getRandomTaskMonster2 ()			end						for i = 1, #tasks do				if tasks[i].name == randomName1 then					qnt1 = tasks[i].qnt				end								if tasks[i].name == randomName2 then					qnt2 = tasks[i].qnt				end			end			setPlayerStorageValue (cid, fixedPokemon, 1)		end				selfSay("Which you prefer? "..qnt1.." "..randomName1.." or "..qnt2.." "..randomName2.."?", cid)		talkState[talkUser] = 1	return true	elseif (msg == randomName1:lower() or msg == randomName2:lower()) and talkState[talkUser] == 1 then		decide = msg		selfSay("Are you sure?", cid)		talkState[talkUser] = 2	return true	elseif msgcontains(msg, "yes") and talkState[talkUser] == 2 then				if getPlayerStorageValue (cid, check) == 1 then			selfSay ("Thank you! That was incredible, i can't believe you kill all of them!", cid)			setPlayerStorageValue(cid, sto, -1)			doPlayerAddExperience(cid, 1500000)			doPlayerAddItem(cid, 2160, 25)		 			local sto = 5646132			setPlayerStorageValue(cid, sto, -1)			setPlayerStorageValue(cid, 25566, os.time() + 24*60*60)			setPlayerStorageValue(cid, 181601, 1)			setPlayerStorageValue(cid, 181602, 1)			setPlayerStorageValue(cid, qntLeft, -1)			setPlayerStorageValue(cid, done, 1)			talkState[talkUser] = 0				end				if getPlayerStorageValue (cid, gotDaily) == 1 then return true end				setPlayerStorageValue (cid, daily, decide)		setPlayerStorageValue (cid, gotDaily, 1)				for i = 1, #tasks do			if tasks[i].name:lower() == getPlayerStorageValue (cid, daily) then				qnt = tasks[i].qnt			end		end				setPlayerStorageValue (cid, qntLeft, qnt)				local sto = getFreeTaskStorage(cid)		if sto == -1 then			selfSay("You can't catch more tasks! You are already with the maximum of "..(maxTasks).." tasks!", cid)			talkState[talkUser] = 0		return true		end		local n = string.explode(getPlayerStorageValue (cid, daily), " ")		local str = string.sub(getPlayerStorageValue (cid, daily), 1, 1)		local sta = string.sub(getPlayerStorageValue (cid, daily), 2, string.len(getPlayerStorageValue (cid, daily)))		name = ""..string.upper(str)..""..string.lower(sta)..""				local storage = 154721		setPlayerStorageValue (cid, storage, name.."/"..qnt)		selfSay("OK kill all, good luck!", cid)		talkState[talkUser] = 0	return true	endreturn trueendnpcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)npcHandler:addModule(FocusModule:new())

 

E aqui o creaturescripts, presumo que você saiba adicionar as tags. Caso tenha dificuldades, me avise.

function onKill(cid, target)	if not isPlayer (cid) then return true end	local storage = 154721	if getPlayerStorageValue (cid, storage) == -1 then return true end                                               	local check = 154722	local qntStorage = 84956	local explode = string.explode(getPlayerStorageValue(cid, storage), "/")	local pokename = explode[1]	local qnt = explode[2]		if ehMonstro(target) then		if getCreatureName (target) == pokename then			if getPlayerStorageValue (cid, qntStorage) > 0 and getPlayerStorageValue (cid, check) ~= 1 then				doPlayerSendTextMessage(cid, 27, "Daily: You need to kill more "..getPlayerStorageValue (cid, qntStorage).." "..pokename.."!")				setPlayerStorageValue (cid, qntStorage, getPlayerStorageValue (cid, qntStorage) - 1)								if getPlayerStorageValue (cid, qntStorage) == 0 and getPlayerStorageValue (cid, check) ~= 1  then					doPlayerSendTextMessage(cid, 27, "Daily: Quest Done!")					setPlayerStorageValue (cid, check, 1)				end			end		end	end   return trueend

 

Lembrando que você tem que resetar todos os storages depois de 24 horas, se não a contagem só vai aparecer uma vez.

Editado Agosto 28 por Bodak Reborn

deglorioD
27 de agosto de 2016 às 00:48

Vou testar, agradeço

 

27 de agosto de 2016 às 00:49

=):

deglorioD
27 de agosto de 2016 às 00:55

Testei aqui e não ficou random

 

sempre aparece 

 

00:55 Junko: Which you prefer? 20 Blastoise or 18 Venusaur?

 Não escolhe as outras opções

27 de agosto de 2016 às 00:57
Agora, deglorio disse:

Testei aqui e não ficou random

 

sempre aparece 

 

00:55 Junko: Which you prefer? 20 Blastoise or 18 Venusaur?

 Não escolhe as outras opções

 

Eu coloquei pra quando você falar com o NPC pela primeira vez, ele te dar dois pokémon fixos, ou seja, se tu logar em outro char, vai ter dois pokémon fixos pra ele também.

Com fixo eu quero dizer que, você pode falar com ele quantas vezes quiser/deslogar e tal, mas só quando os storages forem zerados que ele te dará outros pokémon.

deglorioD
27 de agosto de 2016 às 01:01

Correto, ótimo!

O nome do npc la Junko foi necessário por que? Só pra eu entender

E as storages, quando eu for criar outro NPC, posso manter as mesmas storages?

27 de agosto de 2016 às 01:03
3 minutos atrás, deglorio disse:

Correto, ótimo!

O nome do npc la Junko foi necessário por que? Só pra eu entender

E as storages, quando eu for criar outro NPC, posso manter as mesmas storages?

 

Eu tinha feito com o nome do NPC invés de "daily", ai eu lembrei que tu pediu pra deixar "daily" invés do nome do NPC. Eu esqueci de tirar... :'( não serve pra nada, pode tirar se quiser. E também, se quiser, eu posso colocar para aparecer o nome do NPC invés de "daily".

As storages tem que ser diferentes.

Editado Agosto 27 por Bodak Reborn

deglorioD
27 de agosto de 2016 às 01:06

Teria como deixar as mesmas storages, e a storage ficar storage,npcname?

 

pq o que diferenciaria era o nome do npc, ai posso manter as mesmas storages?

Pq senao terei que criar um creatureevent para cada npc

 

Ficou confuso?

Editado Agosto 27 por deglorio

27 de agosto de 2016 às 01:11

Ficou bem confuso. :|:

Pelo que entendi, tu não quer que o cara possa fazer a quest do 4 NPCs no mesmo dia, é isso? A storage que verifica se ele já terminou a task (depois que os prêmios foram entregues) é a "done", então mantendo ela em todos os scripts, o cara só vai poder fazer uma por dia.

deglorioD
27 de agosto de 2016 às 01:20

Correto, mas terei que criar um creatureevent para cada npc?

27 de agosto de 2016 às 01:24

Não.

Perceba no final do código do NPC, que tem isso:

local storage = 154721setPlayerStorageValue (cid, storage, name.."/"..qnt)

 

No creaturescript eu pego o storage do player e dou explode, então se no final do código de cada NPC tiver isso com o mesmo storage, creio eu que não terá problemas.

deglorioD
27 de agosto de 2016 às 01:58

No NPC qntleft

No event qnt storage ambos estão msm storage, isso não influencia né?

 

To chato, mas esse negócio de tabelas e storage me deixa confuso 

27 de agosto de 2016 às 02:29

Não entendi... npc qntleft? event qnt storage? o_O

deglorioD
27 de agosto de 2016 às 09:34

NPC

local qntLef = 84956
Creatrescriptlocal qntStorage = 84956

 

 

 

Faz a task uma vez normalmente.

Ai quando passa as 24h e vu fazer denovo, ai só falar YES que já recebe o premio.

 

Pode me ajudar a resetar as storages após  o termino da task?

Editado Agosto 27 por deglorio

27 de agosto de 2016 às 13:51

Foi o que eu te disse, tem que fazer um script pra resetar o storage depois de 24 horas.

Isso é assunto de outro tópico, e já tem vários tópicos sobre isso aqui e no "sitezinho qualquer", só procurar.