Ir para conteúdo

Posts Recomendados

Bom dia jovens, graças ao grande Omega eu consegui terminar o código do NPC Dicer, a função para checar o gold foi feita por ele então deem um beijo nele biggrin.png

O NPC é parecido com aqueles BOTS que ficam no tibia global em yalahar normalmente, você joga uma quantia em gold e fala L ou H também pode ser Low ou High e com sorte pode ganhar o dobro da quantia apostada, exemplo:

 

Eu vou lá jogo 20k na mesa e falo Low, caso caia nos números 1, 2 ou 3 eu irei ganhar o dobro da quantia que eu apostei que no foi 20k, mas se cair nos números 4, 5 ou 6 eu iria perder esses 20k.

O High é a mesma coisa porém ao contrario, se eu falo High e cair nos numero 4, 5 ou 6 eu ganho o dobro da quantia que eu apostei e se cair no 1, 2 ou 3 eu perderia tudo.

 

Crie um arquivo em data/npc com o nome dicer.xml e adicione isso dentro:

<?xml version="1.0"?>
<npc name="Dicer" script="data/npc/scripts/dicer.lua" walkinterval="1000" floorchange="0">
<health now="100" max="100"/>
<look type="132" head="114" body="0" legs="0" feet="114" addons="3"/>
<parameters>
<parameter key="message_greet" value="Ola {|PLAYERNAME|}, caso queria tentar a sorte diga {L} ou {Low} para apostar nos numeros {1}, {2} ou {3} ||| {H} ou {High} para apostar nos numeros {4}, {5} ou {6}!" />
</parameters>
</npc>

Agora vá até data/npc/scripts e crie um arquivo com o nome dicer.lua e adicione isso dentro:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function onCreatureAppear(cid)				npcHandler:onCreatureAppear(cid)			end
function onCreatureDisappear(cid)			npcHandler:onCreatureDisappear(cid)			end
function onCreatureSay(cid, type, msg)			npcHandler:onCreatureSay(cid, type, msg)		end
function onThink()					npcHandler:onThink()					end

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 coins = {[2148] = 1, [2152] = 100, [2160] = 10000}

function countMoneyOnPos(pos)
 local money = 0
 for stack = 1, 50  do
  pos.stackpos = stack
  local item = getThingFromPos(pos)
  if item and item.uid > 0 then
   if coins[item.itemid] then
    money = money + coins[item.itemid] * item.type
   end
  end
 end
 return money
end
	

	
local posCoal = {x = 169, y = 58, z = 7} -- POSIÇÃO DO COAL, ONDE O GOLD DEVE ESTAR
local posNpc = {x = 193, y = 45, z = 7} -- POSIÇÃO DO NPC
local pos = getPosByDir(getThingPos(cid), getCreatureLookDirection(cid), 1) -- NÃO ALTERAR

	if msgcontains(msg, 'l') or msgcontains(msg, 'L') or msgcontains(msg, 'low') or msgcontains(msg, 'Low') then
		if countMoneyOnPos(pos) > 0 then
			if math.random(1, 6) <= 3 then
				doPlayerAddMoney(cid, countMoneyOnPos(pos)*2)
				doRemoveItem(getTileItemById(pos, 2148).uid)
				repeat
				until not doRemoveItem(getTileItemById(pos, 2148).uid)
				doRemoveItem(getTileItemById(pos, 2152).uid)
				repeat
				until not doRemoveItem(getTileItemById(pos, 2152).uid)
				doRemoveItem(getTileItemById(pos, 2160).uid)
				repeat
				until not doRemoveItem(getTileItemById(pos, 2160).uid)
				doSendMagicEffect(posNpc, 26)
				doSendMagicEffect(posNpc, 28)
				doCreatureSay(getNpcId(), getCreatureName(cid)..' tirou o numero '..math.random(1, 3)..', parabéns!', TALKTYPE_ORANGE_1)
			else
				doRemoveItem(getTileItemById(pos, 2148).uid)
				repeat
				until not doRemoveItem(getTileItemById(pos, 2148).uid)
				doRemoveItem(getTileItemById(pos, 2152).uid)
				repeat
				until not doRemoveItem(getTileItemById(pos, 2152).uid)
				doRemoveItem(getTileItemById(pos, 2160).uid)
				repeat
				until not doRemoveItem(getTileItemById(pos, 2160).uid)
				doSendMagicEffect(posNpc, 2)
				doSendMagicEffect(posNpc, 26)
				doCreatureSay(getNpcId(), getCreatureName(cid)..' tirou o numero '..math.random(4, 6)..', tente novamente!', TALKTYPE_ORANGE_1)
			end
		else
			doCreatureSay(getNpcId(), getCreatureName(cid)..', coloque uma quantia de gold no recipiente para começar a apostar!', TALKTYPE_ORANGE_1)
		end
		
	elseif msgcontains(msg, 'h') or msgcontains(msg, 'H') or msgcontains(msg, 'high') or msgcontains(msg, 'High') then
		if countMoneyOnPos(pos) > 0 then
			if math.random(1, 6) <= 3 then
				doPlayerAddMoney(cid, countMoneyOnPos(pos)*2)
				doRemoveItem(getTileItemById(pos, 2148).uid)
				repeat
				until not doRemoveItem(getTileItemById(pos, 2148).uid)
				doRemoveItem(getTileItemById(pos, 2152).uid)
				repeat
				until not doRemoveItem(getTileItemById(pos, 2152).uid)
				doRemoveItem(getTileItemById(pos, 2160).uid)
				repeat
				until not doRemoveItem(getTileItemById(pos, 2160).uid)
				doSendMagicEffect(posNpc, 26)
				doSendMagicEffect(posNpc, 28)
				doCreatureSay(getNpcId(), getCreatureName(cid)..' tirou o numero '..math.random(4, 6)..', parabéns!', TALKTYPE_ORANGE_1)
			else
				doRemoveItem(getTileItemById(pos, 2148).uid)
				repeat
				until not doRemoveItem(getTileItemById(pos, 2148).uid)
				doRemoveItem(getTileItemById(pos, 2152).uid)
				repeat
				until not doRemoveItem(getTileItemById(pos, 2152).uid)
				doRemoveItem(getTileItemById(pos, 2160).uid)
				repeat
				until not doRemoveItem(getTileItemById(pos, 2160).uid)
				doSendMagicEffect(posNpc, 2)
				doSendMagicEffect(posNpc, 26)
				doCreatureSay(getNpcId(), getCreatureName(cid)..' tirou o numero '..math.random(1, 3)..', tente novamente!', TALKTYPE_ORANGE_1)
			end
		else
			doCreatureSay(getNpcId(), getCreatureName(cid)..', coloque uma quantia de gold no recipiente para começar a apostar!', TALKTYPE_ORANGE_1)
		end
	end
return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Você deve fazer alterações nesta parte:

local posCoal = {x = 169, y = 58, z = 7} -- POSIÇÃO DO COAL, ONDE O GOLD DEVE ESTAR
local posNpc = {x = 193, y = 45, z = 7} -- POSIÇÃO DO NPC

Aconselhável montar uma área pro npc ficar idêntica a da fotos para não bugar o código, o coal(Empty_Coal_Basin.gif) deve sempre ficar na frente do player pois a função ira chegar o gold a frente do player.

 

 

Ao falar Hi

f9Wo4ea.png

Npc verificando que não tem gold no coal

8UkYlM8.png

Vencendo uma aposta

dgKOzSh.png

Perdendo uma aposta

CAMsXNE.png

Créditos:

Markin(Anne)

Omega pela função de checar o gold

Link para o comentário
https://xtibia.com/forum/topic/231977-npc-dicer/
Compartilhar em outros sites

É engraçado quando o código não mostra como o script é legal. Achei que ficaria mais simples, mas vendo as imagens, parece muito bom.

Parabéns, Markin.

 

Um detalhe é que você poderia colocar pra checar a posição no coal, em vez de colocar na frente do jogador.

countMoneyOnPos(pos) -> countMoneyOnPos(posNpc)
Link para o comentário
https://xtibia.com/forum/topic/231977-npc-dicer/#findComment-1638479
Compartilhar em outros sites

Eu realmente gostei muito de ter feito esse script, na hora que eu tava pensando em fazer ele eu tinha quase certeza que não iria conseguir fazer nem a parte de H/L porém deu certo :D

Link para o comentário
https://xtibia.com/forum/topic/231977-npc-dicer/#findComment-1638492
Compartilhar em outros sites

Muito bom o NPC !

Porém,o problema é que outra pessoa pode vir atraz e falar Hi,e a letra da aposta fazendo a outra pessoa perde o dinheiro que está no coal

Editado por gustavooooooooooo
Link para o comentário
https://xtibia.com/forum/topic/231977-npc-dicer/#findComment-1639232
Compartilhar em outros sites

hmm legal ,Tem algum jeito de restringir o limite de aposta ? e também colocar ele para "girar" mais os numeros ,pois ele sempre cai em uma grande sequencia tipo

,H ele sai umas 3,4x seguidas de H ,raramente ele alterna para o L,e quando vai o L ele fica umas 3,4x tmb,

Outra duvida é se dar pra mudar o valor do ganho ,aposta 500k ,ganha 250k etc

Link para o comentário
https://xtibia.com/forum/topic/231977-npc-dicer/#findComment-1640092
Compartilhar em outros sites

  • 1 year later...
  • 4 months later...

aqui deu esse erro!

 

 

Lua Script Error: [Npc interface]
data/npc/scripts/dicer.lua:onCreatureSay
data/npc/scripts/dicer.lua:39: attempt to call global 'getCreatureLookDirection' (a nil value)
stack traceback:
[C]: in function 'getCreatureLookDirection'
data/npc/scripts/dicer.lua:39: in function 'callback'
data/npc/lib/npcsystem/npchandler.lua:410: in function 'onCreatureSay'
data/npc/scripts/dicer.lua:8: in function

Link para o comentário
https://xtibia.com/forum/topic/231977-npc-dicer/#findComment-1667208
Compartilhar em outros sites

×
×
  • Criar Novo...