Ir para conteúdo
  • 0

NPC Apostador!


Gadreel

Pergunta

10 respostass a esta questão

Posts Recomendados

  • 0

Na pasta data/npc crie um arquivo xml e coloque esse código dentro

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Apostador" script="data/npc/scripts/apostador_la.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="138" head="96" body="95" legs="0" feet="95" addons="0"/>
<parameters>
<parameter key="message_greet" value="Como vai? |PLAYERNAME|, Quer {apostar} comigo?" />
<parameter key="module_keywords" value="1" />
</parameters>
</npc>

Script do npc na pasta data/npc/scripts crie um arquivo .lua com o nome apostador_la.lua

-- Preços das apostas --
price_21 = 1000 -- 1k ou 1000gold
price_jogo6 = 5000
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
if(msgcontains(msg, 'apostar')) then
selfSay('Eu faço 2 jogos: {21},{Jogo do 6} escolha um deles!', cid)
talkState[talkUser] = 5
elseif (msgcontains(msg, 'Jogo do 6') and talkState[talkUser] == 5) then
selfSay('O Jogo do 6 funciona assim: Eu vou rodar um dado, e se cair no número 6 você ganha o sêxtuplo (6 vezes) do valor apostado.', cid)
selfSay('Caso não caia no 6, você perde apenas o dinheiro da aposta.', cid)
selfSay('Está pronto para {começar}?.', cid)
talkState[talkUser] = 3
elseif(msgcontains(msg, 'começar') and talkState[talkUser] == 3) then
selfSay('Você possui o {dinheiro} da aposta ('..price_jogo6..')golds ?', cid)
if doPlayerRemoveMoney(cid, price_jogo6) == TRUE then
talkState[talkUser] = 2
else
selfSay('Desculpe, mais você não tem dinheiro para apostar comigo.',cid)
end
elseif(msgcontains(msg, 'dinheiro') and talkState[talkUser] == 2) then
sorteio6 = math.random(1,6)
if sorteio6 == 6 then
talkState[talkUser] = 3
selfSay('Parábens, o número sorteado foi 6 e você acaba de ganhar '..(price_jogo6*6) ..'golds, mais o dinheiro que você pagou da aposta.',cid)
doPlayerAddMoney(cid,price_jogo6*6) else
talkState[talkUser] = 2
selfSay('Que azar, o número sorteado foi '..sorteio6..', mais sorte na proxima.',cid)
end
elseif(msgcontains(msg, '21') and talkState[talkUser] == 5) then
selfSay('O 21 funciona assim: Você ira ganhar 1 número e o número tem quer ser 21, ou chegar o mais próximo possível sem ultrapassar esse valor.', cid)
selfSay('E a mesma coisa será feita comigo, ganharei 1 número.', cid)
selfSay('Você pode ir comprando mais números dizendo [comprar] e se quiser parar é só dizer [parar].', cid)
selfSay('Se você ganhar de mim, você leva o triplo do dinheiro apostado.', cid)
selfSay('Está pronto para {começar}?.', cid)
talkState[talkUser] = 0
elseif(msgcontains(msg, 'começar') and talkState[talkUser] == 0) then
selfSay('Você possui o {dinheiro} da aposta ('..price_21..')golds ?', cid)
talkState[talkUser] = 1
elseif(msgcontains(msg, 'dinheiro') and talkState[talkUser] == 1) then
if doPlayerRemoveMoney(cid, price_21) == TRUE then
talkState[talkUser] = 0
local mpn = math.random(1,21)
setPlayerStorageValue(cid, 55411,mpn) local pn = getPlayerStorageValue(cid, 55411)
selfSay('Seu número é '..pn..', quer comprar mais ou parar?',cid)
else
selfSay('Desculpe, mais você não tem dinheiro para apostar comigo.',cid)
end
elseif(msgcontains(msg, 'comprar') and talkState[talkUser] == 0) then
local cp = math.random(1,10)
setPlayerStorageValue(cid, 55411, (getPlayerStorageValue(cid, 55411))+cp)
selfSay('Seu número é '..getPlayerStorageValue(cid, 55411)..', quer comprar mais ou parar?',cid)
talkState[talkUser] = 0
elseif(msgcontains(msg, 'parar') and talkState[talkUser] == 0) then
local npcn = math.random(15,21)
setPlayerStorageValue(cid, 2224, npcn)
if getPlayerStorageValue(cid, 55411) < getPlayerStorageValue(cid, 2224)then
selfSay('Meu número é '..getPlayerStorageValue(cid, 2224)..'.',cid)
selfSay('Seu número final é '..getPlayerStorageValue(cid, 55411)..'.',cid)
selfSay('Ganhei, mais sorte na proxima vez.',cid)
talkState[talkUser] = 1
elseif getPlayerStorageValue(cid, 55411) == getPlayerStorageValue(cid, 2224) then
selfSay('Meu número é '..getPlayerStorageValue(cid, 2224)..'.',cid)
selfSay('Seu número final é '..getPlayerStorageValue(cid, 55411)..'.',cid)
selfSay('Empato, portanto ninguem ganha nada.',cid)
talkState[talkUser] = 1
elseif getPlayerStorageValue(cid, 55411) > getPlayerStorageValue(cid, 2224) then
selfSay('Meu número é '..getPlayerStorageValue(cid, 2224)..'.',cid)
selfSay('Seu número final é '..getPlayerStorageValue(cid, 55411)..'.',cid) local somag = (price_21*3)
selfSay('Você ganhou '..somag..'golds, mais os seus '..price_21..'golds de volta. Parábens !!!',cid)
doPlayerAddMoney(cid, somag)
doPlayerAddMoney(cid, price_21)
talkState[talkUser] = 1
else
selfSay('Desculpe, mais você não possui dinheiro está aposta',cid)
end  end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Link para o comentário
Compartilhar em outros sites

  • 0

 

Na pasta data/npc crie um arquivo xml e coloque esse código dentro

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Apostador" script="data/npc/scripts/apostador_la.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="138" head="96" body="95" legs="0" feet="95" addons="0"/>
<parameters>
<parameter key="message_greet" value="Como vai? |PLAYERNAME|, Quer {apostar} comigo?" />
<parameter key="module_keywords" value="1" />
</parameters>
</npc>

Script do npc na pasta data/npc/scripts crie um arquivo .lua com o nome apostador_la.lua

-- Preços das apostas --
price_21 = 1000 -- 1k ou 1000gold
price_jogo6 = 5000
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
if(msgcontains(msg, 'apostar')) then
selfSay('Eu faço 2 jogos: {21},{Jogo do 6} escolha um deles!', cid)
talkState[talkUser] = 5
elseif (msgcontains(msg, 'Jogo do 6') and talkState[talkUser] == 5) then
selfSay('O Jogo do 6 funciona assim: Eu vou rodar um dado, e se cair no número 6 você ganha o sêxtuplo (6 vezes) do valor apostado.', cid)
selfSay('Caso não caia no 6, você perde apenas o dinheiro da aposta.', cid)
selfSay('Está pronto para {começar}?.', cid)
talkState[talkUser] = 3
elseif(msgcontains(msg, 'começar') and talkState[talkUser] == 3) then
selfSay('Você possui o {dinheiro} da aposta ('..price_jogo6..')golds ?', cid)
if doPlayerRemoveMoney(cid, price_jogo6) == TRUE then
talkState[talkUser] = 2
else
selfSay('Desculpe, mais você não tem dinheiro para apostar comigo.',cid)
end
elseif(msgcontains(msg, 'dinheiro') and talkState[talkUser] == 2) then
sorteio6 = math.random(1,6)
if sorteio6 == 6 then
talkState[talkUser] = 3
selfSay('Parábens, o número sorteado foi 6 e você acaba de ganhar '..(price_jogo6*6) ..'golds, mais o dinheiro que você pagou da aposta.',cid)
doPlayerAddMoney(cid,price_jogo6*6) else
talkState[talkUser] = 2
selfSay('Que azar, o número sorteado foi '..sorteio6..', mais sorte na proxima.',cid)
end
elseif(msgcontains(msg, '21') and talkState[talkUser] == 5) then
selfSay('O 21 funciona assim: Você ira ganhar 1 número e o número tem quer ser 21, ou chegar o mais próximo possível sem ultrapassar esse valor.', cid)
selfSay('E a mesma coisa será feita comigo, ganharei 1 número.', cid)
selfSay('Você pode ir comprando mais números dizendo [comprar] e se quiser parar é só dizer [parar].', cid)
selfSay('Se você ganhar de mim, você leva o triplo do dinheiro apostado.', cid)
selfSay('Está pronto para {começar}?.', cid)
talkState[talkUser] = 0
elseif(msgcontains(msg, 'começar') and talkState[talkUser] == 0) then
selfSay('Você possui o {dinheiro} da aposta ('..price_21..')golds ?', cid)
talkState[talkUser] = 1
elseif(msgcontains(msg, 'dinheiro') and talkState[talkUser] == 1) then
if doPlayerRemoveMoney(cid, price_21) == TRUE then
talkState[talkUser] = 0
local mpn = math.random(1,21)
setPlayerStorageValue(cid, 55411,mpn) local pn = getPlayerStorageValue(cid, 55411)
selfSay('Seu número é '..pn..', quer comprar mais ou parar?',cid)
else
selfSay('Desculpe, mais você não tem dinheiro para apostar comigo.',cid)
end
elseif(msgcontains(msg, 'comprar') and talkState[talkUser] == 0) then
local cp = math.random(1,10)
setPlayerStorageValue(cid, 55411, (getPlayerStorageValue(cid, 55411))+cp)
selfSay('Seu número é '..getPlayerStorageValue(cid, 55411)..', quer comprar mais ou parar?',cid)
talkState[talkUser] = 0
elseif(msgcontains(msg, 'parar') and talkState[talkUser] == 0) then
local npcn = math.random(15,21)
setPlayerStorageValue(cid, 2224, npcn)
if getPlayerStorageValue(cid, 55411) < getPlayerStorageValue(cid, 2224)then
selfSay('Meu número é '..getPlayerStorageValue(cid, 2224)..'.',cid)
selfSay('Seu número final é '..getPlayerStorageValue(cid, 55411)..'.',cid)
selfSay('Ganhei, mais sorte na proxima vez.',cid)
talkState[talkUser] = 1
elseif getPlayerStorageValue(cid, 55411) == getPlayerStorageValue(cid, 2224) then
selfSay('Meu número é '..getPlayerStorageValue(cid, 2224)..'.',cid)
selfSay('Seu número final é '..getPlayerStorageValue(cid, 55411)..'.',cid)
selfSay('Empato, portanto ninguem ganha nada.',cid)
talkState[talkUser] = 1
elseif getPlayerStorageValue(cid, 55411) > getPlayerStorageValue(cid, 2224) then
selfSay('Meu número é '..getPlayerStorageValue(cid, 2224)..'.',cid)
selfSay('Seu número final é '..getPlayerStorageValue(cid, 55411)..'.',cid) local somag = (price_21*3)
selfSay('Você ganhou '..somag..'golds, mais os seus '..price_21..'golds de volta. Parábens !!!',cid)
doPlayerAddMoney(cid, somag)
doPlayerAddMoney(cid, price_21)
talkState[talkUser] = 1
else
selfSay('Desculpe, mais você não possui dinheiro está aposta',cid)
end  end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Meu pedido é quase isto mais como especifiquei no titulo até tive o trabalho de gravar o vídeo rs, queria um igual ao do vídeo.. eu testei esse é não muito lá igual é rolou uns bugs desagradáveis...

Link para o comentário
Compartilhar em outros sites

  • 0

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

Boa sorte espero que agora lhe ajude

Link para o comentário
Compartilhar em outros sites

  • 0

@@Gadreel,

 

Acho que está como você pediu:

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
	if (msgcontains(msg, 'jogar')) then
		selfSay('O jogo é simples. Você aposta um valor entre (1000000 - 5000000 gold coins) e eu vou rodar meu dado. Se der 6, você ganha 5x o valor apostado. Então, quanto você quer apostar??', cid)
		talkState[talkUser] = 1
	elseif (talkState[talkUser] == 1) then
		local valor = tonumber(msg)
		
		if valor < 1000000 or valor > 5000000 then
			selfSay('São aceitas apostas entre (1000000 - 5000000 gold coins) apenas.', cid)
			talkState[talkUser] = 0
		end
		
		local playerNumber = math.random(1, 6)
		if doPlayerRemoveMoney(cid, valor) then
			if playerNumber == 6 then
				local pagamento = math.ceil(valor * 5)
				selfSay('Rolou um ' .. playerNumber .. '. Parabens! Você ganhou ' .. pagamento .. ' gold coins!', cid)
				doSendAnimatedText(getCreaturePosition(cid), 'You Win!', TEXTCOLOR_LIGHTGREEN)
				doPlayerAddMoney(cid, pagamento)
				talkState[talkUser] = 0
			else
				selfSay('Rolou um ' .. playerNumber .. '. Desculpe amigo, não foi dessa vez. Quer {jogar} denovo?', cid)
				doSendAnimatedText(getCreaturePosition(cid), 'You Lose!', TEXTCOLOR_RED)
				talkState[talkUser] = 0
			end
		else
			selfSay('Você não tem o dinheiro para essa aposta.', cid)
			talkState[talkUser] = 0
		end
	end
	return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Segue o npc também:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Apostador" script="data/npc/scripts/apostador.lua" walkinterval="25" floorchange="0" access="5" >
    <health now="150" max="150"/>
    <look type="128" head="115" body="0" legs="114" feet="0" addons="3" corpse="2212"/>
    
    <parameters>
        <parameter key="message_greet" value="Hiho |PLAYERNAME|, esta preparado para tentar a sorte? Eu posso {jogar} um pouco com voce se quiser."/>
    </parameters>
</npc>
Link para o comentário
Compartilhar em outros sites

  • 0

2jcwr28.jpg

 

Na parte "Apostador: O jogo é simples. Você aposta um valor entre (1000000 - 5000000 gold coins) e eu vou rodar meu dado. Se der 6, você ganha 5x o valor apostado. Então, quanto você quer apostar??

18:29 Administrador [10]: 1000000"
Npc para de responder é da esses erros..

@up? '-'

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...