Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Fala galera do TK, hoje vim pra trazer pra vocês um npc criado por mim e pelo Nogard numa madrugada aí para solucionar a dúvida de um cara no suporte. Eu dei uma melhorada no script original, tirei umas coisas repetidas e adicionei novas funções; 
Você agora pode configurar se quer que o preço aumente a cada reset, se quer que o level pra resetar aumente e se vc quer que a vida resete junto (e quanto % da vida atual será a vida após resetar).

Testado em TFS 0.3.6, Versão 8.45

Sem mais delongas, vamos ao script.
Antes de tudo crie um arquivo chamado reseter.lua na pasta data\npc\scripts\ e coloque isso daqui dentro dele:

Spoiler

local config = {
	minlevel = 150, --- level inical para resetar
	price = 10000, --- preço inicial para resetar
	newlevel = 20, --- level após reset
	priceByReset = 0, --- preço acrescentado por reset
	percent = 100, ---- porcentagem da vida/mana que você terá ao resetar (em relação à sua antiga vida total)
	maxresets = 50,
	levelbyreset = 0 --- quanto de level vai precisar a mais no próximo reset
}
--- end config

function getResets(uid)
	resets = getPlayerStorageValue(uid, 378378)
	if resets < 0 then
		resets = 0
	end
	return resets
end

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

	function addReset(cid)
		if(npcHandler:isFocused(cid)) then
			npcHandler:releaseFocus(cid)
		end
		
		talkState[talkUser] = 0
		resets = getResets(cid)
		setPlayerStorageValue(cid, 378378, resets+1) 
		doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
		local hp = getCreatureMaxHealth(cid)
		local resethp = hp*(config.percent/100)
		setCreatureMaxHealth(cid, resethp)
		local differencehp = (hp - resethp)
		doCreatureAddHealth(cid, -differencehp)
		local mana = getCreatureMaxMana(cid)
		local resetmana = mana*(config.percent/100)
		setCreatureMaxMana(cid, resetmana)
		local differencemana = (mana - resetmana)
		doCreatureAddMana(cid, -differencemana)
		doRemoveCreature(cid)		
		local description = resets+1
		db.executeQuery("UPDATE `players` SET `description` = ' [Reset: "..description.."]' WHERE `players`.`id`= ".. playerid .."")
		db.executeQuery("UPDATE `players` SET `level`="..config.newlevel..",`experience`= 0 WHERE `players`.`id`= ".. playerid .."")
		return true
	end
	
	local newPrice = config.price + (getResets(cid) * config.priceByReset)
	local newminlevel = config.minlevel + (getResets(cid) * config.levelbyreset)

	if msgcontains(msg, 'reset') then
		if getResets(cid) < config.maxresets then
			selfSay('You want to reset your character? It will cost '..newPrice..' gp\'s!', cid)
			talkState[talkUser] = 1
		else
			selfSay('You already reached the maximum reset level!', cid)
		end
		
	elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
		if getPlayerMoney(cid) < newPrice then
			selfSay('Its necessary to have at least '..newPrice..' gp\'s for reseting!', cid)
		elseif getPlayerLevel(cid) < newminlevel then
			selfSay('The minimum level for reseting is '..newminlevel..'!', cid)
		else
			doPlayerRemoveMoney(cid,newPrice)
			playerid = getPlayerGUID(cid)
			addEvent(function()
				if isPlayer(cid) then
					addReset(cid)
				end
			end, 3000)
			local number = getResets(cid)+1
			local msg ="---[Reset: "..number.."]-- You have reseted!  You'll be disconnected in 3 seconds."
			doPlayerPopupFYI(cid, msg) 
			talkState[talkUser] = 0
			npcHandler:releaseFocus(cid)
		end
		talkState[talkUser] = 0
	elseif(msgcontains(msg, 'no')) and isInArray({1}, talkState[talkUser]) == TRUE then
		talkState[talkUser] = 0
		npcHandler:releaseFocus(cid)
		selfSay('Ok.', cid)
	elseif msgcontains(msg, 'quantity') then
		selfSay('You have a total of '..getResets(cid)..' reset(s).', cid)
		talkState[talkUser] = 0
	end
	return true
end

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

 



Você pode editar tudo mexendo aqui:
local config = {
minlevel = 150, --- level inical para resetar
price = 10000, --- preço inicial para resetar
newlevel = 20, --- level após reset
priceByReset = 0, --- preço acrescentado por reset
percent = 100, ---- porcentagem da vida/mana que você terá ao resetar (em relação à sua antiga vida total)
levelbyreset = 0 --- quanto de level vai precisar a mais no próximo reset
}

Feito isso, crie agora o npc que irá utilizar esse script.. em data\npc crie um arquivo.xml chamado Reseter.xml e coloque isso dentro dele:

Spoiler

<npc name="Reseter" script="data/npc/scripts/reseter.lua" access="5" lookdir="1">
<health now="1000" max="1000"/>
<look type="133" head="95" body="86" legs="86" feet="38" addons="3"/>
	<parameters>
		<parameter key="message_greet" value="Hello |PLAYERNAME|.I've been waiting for you to come.. Say 'reset' or 'quantity'" />
		<parameter key="message_farewell" value="Cya folk." />
		<parameter key="message_walkaway" value="How Rude!" />
	</parameters>
</npc>
 
 
Agora é só colocar o seu npc no mapa pelo mapa editor e curtir :grin:

OBS 1: Se seu server for 8.6 ou maior troque no script.lua as funções db.executeQuery por db.query
OBS 2: Esse script dava pra ser diminuido ainda mais mas por hora deixa ele assim, se vc tiver alguma proposta melhor por favor poste nos comentários que eu testo a sua versão e edito o tópico se for o caso.
OBS 3: Não remova os créditos, isso é a coisa mais baixa e suja que alguém pode fazer.. eu scripto pra ajudar a comunidade do Tibia a evoluir e libero 99% doque eu faço, se vocês não removerem os créditos e não postarem em outros fórums sem minha permissão isso pode continuar assim.



--- EDIT: Coloquei algumas imagens pra vcs verem como fica no server

 

Spoiler


nw4p.jpg

 

 

 

Spoiler


j4kua.jpg

 

 

 

Spoiler


 

h548.jpg


 

Spoiler


g0t1.jpg




EDIT: Arrumei o problema de o npc não dar bye automáticamente qnd o player se afasta, bugando em algumas versões e impedindo de conversar com outros npcs. Apenas substituam o arquivo em scripts pela versão atualizada, grato.

EDIT2: Novos erros arrumados, agora o NPC dá bye automaticamente e não buga qnd te reseta.

EDIT3: Resolvido bug de dar hi, reset, yes várias vezes e derrubar o servidor (troque tanto o xml qnt o script do npc)
O script também foi identado.

Editado por xWhiteWolf (veja o histórico de edições)

  • Respostas 187
  • Visualizações 33.5k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Fala galera do TK, hoje vim pra trazer pra vocês um npc criado por mim e pelo Nogard numa madrugada aí para solucionar a dúvida de um cara no suporte. Eu dei uma melhorada no script original, tirei um

  • Ulatson, eu ando meio ocupado pra ficar scriptando então só vou dar dicas de como fazer ou onde conseguir: tem como colocar no script por exemplo para o Player falar só !resetar? Esse script foi fei

  • cara, aquilo que eu te passei era pra vc substituir no seu script;;; ficando assim:   local combat = createCombatObject()setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatPa

Posted Images

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo