Ir para conteúdo

Npc remove soul e da storage


Boguemon

Posts Recomendados

Preciso de ajuda pra criar um npc que é o seguinte:

ao escolher entre agility e strength

se for a primeira vez, ele remove valor X de soul, se for for a segunda vez ele remove o mesmo valor de antes só que vezes 2, na terceira é vezes 3 e por assim em diante... lembrando que depende do que ele escolher, por exemplo, se ele foi duas vezes pedindo agility e na terceira vez ele pediu por strength, vai remover o valor inicial de soul só, entenderam?

 

e dai dependendo da vez ele vai dando tipo pro agility a "storage = 12456, 1", na segunda vez ele dá "storage = 12456, 2" e por assim em diante, e se for o strength ele da o storage 12465, seguindo a lógica do agility

Link para o comentário
Compartilhar em outros sites

Boa noite,

 

Crie o NPC conforme costume e adicione este script como .LUA:

Spoiler
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() endfunction creatureSayCallback(cid, type, msg)if(not npcHandler:isFocused(cid)) thenreturn falseendlocal talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid-----------  CONFIG  ----------local opt = {	["agility"] = {sto = 12456, cost = 5, value = 10}, -- Nome, Storage Controle, Custo em Soul, Valor de Atributos que Adicionará	["strength"] = {sto = 12455, cost = 5, value = 10},}------------  MESSAGENS -----------------attr = opt[string.lower(msg)]if attr then	if getPlayerStorageValue(cid, attr.sto) <= 0 then		setPlayerStorageValue(cid, attr.sto, 1)	end	getSto = getPlayerStorageValue(cid, attr.sto)	SoulCost = (attr.cost*getSto)	StoKey = attr.sto	selfSay('Deseja aumentar '..attr.value..' pontos de '..msg..' por '..SoulCost..' pontos de soul?', cid)	talkState[talkUser] = 1elseif (msgcontains(msg, 'help') or msgcontains(msg, 'ajuda')) then	selfSay('Temos como opção agility e strenght para dar upgrade.', cid)	talkState[talkUser] = 0--------------- NEGOCIANDO INICIANDO -----------------elseif talkState[talkUser] == 1 then	if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then		if getPlayerSoul(cid) >= SoulCost then			doPlayerAddSoul(cid, -SoulCost)			setPlayerStorageValue(cid, StoKey, getSto+1)			selfSay('Parabéns, tudo ocorreu perfeitamente.', cid)			talkState[talkUser] = 0		else			selfSay('Você não tem soul o suficiente.', cid)			talkState[talkUser] = 0		end	else		selfSay('Tudo bem, espero você em breve.', cid)		talkState[talkUser] = 1	endend  return trueendnpcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)npcHandler:addModule(FocusModule:new())

 

 

 

Boa sorte.

Link para o comentário
Compartilhar em outros sites

3 horas atrás, balla1009 disse:

dinheiro e soul

Certo,

 

Teste assim:

 

Spoiler
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() endfunction creatureSayCallback(cid, type, msg)if(not npcHandler:isFocused(cid)) thenreturn falseendlocal talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid-----------  CONFIG  ----------local opt = {	["agility"] = {sto = 12456, soulCost = 5, moneyCost = 10000, value = 10}, -- Nome, Storage Controle, Custo em Soul, Custo em GPs, Valor de Atributos que Adicionará	["strength"] = {sto = 12455, soulCost = 5, moneyCost = 10000, value = 10},}------------  MESSAGENS -----------------attr = opt[string.lower(msg)]if attr then	if getPlayerStorageValue(cid, attr.sto) <= 0 then		setPlayerStorageValue(cid, attr.sto, 1)	end	getSto = getPlayerStorageValue(cid, attr.sto)	newSoulCost = (attr.soulCost*getSto)	newMoneyCost = (attr.moneyCost*getSto)	StoKey = attr.sto	selfSay('Deseja aumentar '..attr.value..' pontos de '..msg..' por '..newSoulCost..' pontos de soul?', cid)	talkState[talkUser] = 1elseif (msgcontains(msg, 'help') or msgcontains(msg, 'ajuda')) then	selfSay('Temos como opção agility e strenght para dar upgrade.', cid)	talkState[talkUser] = 0--------------- NEGOCIANDO INICIANDO -----------------elseif talkState[talkUser] == 1 then	if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then		if getPlayerSoul(cid) >= newSoulCost then			if getPlayerMoney(cid) >= newMoneyCost then				doPlayerAddSoul(cid, -newSoulCost)				doPlayerRemoveMoney(cid, newMoneyCost)				setPlayerStorageValue(cid, StoKey, getSto+1)				selfSay('Parabéns, tudo ocorreu perfeitamente.', cid)				talkState[talkUser] = 0			else				selfSay('Você não tem dinheiro suficiente.', cid)				talkState[talkUser] = 0			end		else			selfSay('Você não tem soul o suficiente.', cid)			talkState[talkUser] = 0		end	else		selfSay('Tudo bem, espero você em breve.', cid)		talkState[talkUser] = 1	endend  return trueendnpcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)npcHandler:addModule(FocusModule:new())

 

 

Boa sorte bro.

Editado por gonorreiaswat
Pequena correção.
Link para o comentário
Compartilhar em outros sites

15 horas atrás, balla1009 disse:

sensacional

 

NPC atualizado para sincronizar com o script do outro Post:

 

Spoiler
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() endfunction creatureSayCallback(cid, type, msg)if(not npcHandler:isFocused(cid)) thenreturn falseendlocal talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid-----------  CONFIG  ------------ Agi Storages: 12451 = Qtdd de Treinos // 12452 = Se Pode Treinar [3=Ativo, 2=TreinandoBlockLogin, 1=adc attr] // 12453 = Salva Tempo-- STR Storages: 12454 = Qtdd de Treinos // 12455 = Se Pode Treinar [3=Ativo, 2=TreinandoBlockLogin, 1=adc attr] // 12456 = Salva Tempolocal opt = {	["agility"] = {sto = {12451, 12452}, soulCost = 5, moneyCost = 10000, value = 10}, -- Nome, Storage Controle, Custo em Soul, Custo em GPs, Valor de Atributos que Adicionará	["strength"] = {sto = {12454, 12455}, soulCost = 5, moneyCost = 10000, value = 10},}------------  MESSAGENS -----------------attr = opt[string.lower(msg)]if attr then	if getPlayerStorageValue(cid, attr.sto[1]) <= 0 then		setPlayerStorageValue(cid, attr.sto[1], 1)	end	getSto = getPlayerStorageValue(cid, attr.sto[1])	newSoulCost = (attr.soulCost*getSto)	newMoneyCost = (attr.moneyCost*getSto)	qtddStoKey = attr.sto[1]	ctrlStoKey = attr.sto[2]	selfSay('You want to train '..msg..' for '..newMoneyCost..' gold pieces and '..newSoulCost..' souls?', cid)	talkState[talkUser] = 1elseif (msgcontains(msg, 'help') or msgcontains(msg, 'ajuda')) then	selfSay('I can help you train your agility and strength.', cid)	talkState[talkUser] = 0--------------- NEGOCIANDO INICIANDO -----------------elseif talkState[talkUser] == 1 then	if (msgcontains(msg, 'sim') or msgcontains(msg, 'yes')) then		if getPlayerSoul(cid) >= newSoulCost then			if getPlayerMoney(cid) >= newMoneyCost then				if getPlayerStorageValue(cid, ctrlStoKey) < 1 then					doPlayerAddSoul(cid, -newSoulCost)					doPlayerRemoveMoney(cid, newMoneyCost)					setPlayerStorageValue(cid, qtddStoKey, getSto+1)					setPlayerStorageValue(cid, ctrlStoKey, 3)					selfSay('Perfect, now enter the door behind me and start your training.', cid)					talkState[talkUser] = 0				else					selfSay('You\'re ready, go to training now.', cid)					talkState[talkUser] = 0				end			else				selfSay('You don\'t have money enough.', cid)				talkState[talkUser] = 0			end		else			selfSay('You don\'t have soul enough.', cid)			talkState[talkUser] = 0		end	else		selfSay('Alright, see you soon.', cid)		talkState[talkUser] = 1	endend  return trueendnpcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)npcHandler:addModule(FocusModule:new())

 

 

 

Boa sorte.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...