Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Olá galera.

Primeiramente quero pedir a colaboração de vocês para NÃO banalizar o tópico, tampouco responder com perguntas inúteis, 

Eu tenho interesse em aprender ou saber como posso fazer um NPC que me de promotion de novas vocações que criei.

Meu OT é 10.10.

Veja como é a minha intenção:

 

sou knight e viro Elite Knight, certo? Pois bem, a partir dai criei novas vocs:

 

O Elite Knight, pode escolher se tornar 4 tipos diferentes, sendo eles: Pyro Knight, Venom Knight, Ice Warrior ou Lightning Warrior, entretanto ele só pode escolher UMA delas, Pyro, Venom, Ice ou Lightning. Caso ele escolha alguma, já não poderá escolher nenhuma outra. 

 

A mesma regra aplica-se para, paladin, sorcerer e druid.

 

Quem puder me ajudar eu agradeço muito, e quem não puder eu também agradeço, desde que não banalize. 

 

 


up

Link para o post
Compartilhar em outros sites

Vo dá uma dica, eu tinha um ot antigo, que tinha este sistema.
Você vai ter que fazer o seguinte, criar as 4 promotion, e por os npc's em uma area fechada.
para entrar em cada npc, você vai por um corredor, que no primeiro tile vai ter um script que somente Knight vai poder entrar.

Sabe por promotion em 10.10???

function onStepIn(cid, item, pos)

player1pos = getPlayerPosition(cid)
novapos1 = {x=132, y=348, z=7}
msg = "Aqui só entram players com a vocação X"

if item.uid == 1200 then
if(isInArray({3, 4, 7, 8}, getPlayerVocation(cid))) then -- id das vocation

else
doPlayerSendTextMessage(cid, 22, msg)
getThingfromPos(player1pos)
doSendMagicEffect(player1pos,2)
doTeleportThing(cid,novapos1)
doSendMagicEffect(novapos1,10)

end
return 1
end
end

Creditos ao God Vini e ao vodkart. Eu fiz um casamento dos 2 scripts.
Explicação do God Vini:
Explicação:
Azul = Lugar para onde o player sera teleportado se ele nao for premmy
Verde = Msg que aparecerá para o player caso ele nao seja premmy
Vermelho = UniqueID do piso

Amarelo = Vocações que irão passar

 

Tag em moveevents.xml:

<movevent event="StepIn" uniqueid="1200" script="premium tile.lua" />


Aqui o Script do Npc para você se não achar.

--[[Script made 100% by Nogard and Night Wolf. Editado por Washx!
   You can feel free to edit anything you want, but don't remove the credits]] 


local config = {
minlevel = 300, --- level inical para trocar promotion
price = 10000, --- preço para comprar a promotion
promotion = 3, --- número da promotion
percent = 100 ---- isso não meche.
}
--- 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 = 
	db.executeQuery("UPDATE `players` SET `promotion`="..config.promotion..",`level`= 301 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 promotion your character? It will cost '..newPrice..' gp\'s!', cid)
		talkState[talkUser] = 1
	else
		selfSay('You already reached the maximum promotion 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 --[[Script made 100% by Nogard and Night Wolf.
You can feel free to edit anything you want, but don't remove the credits]]


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 promotion!', cid)
    elseif getPlayerLevel(cid) < newminlevel then
        selfSay('The minimum level for promotion 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 ="----- You have promoted! 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)..' promotion(s).', cid)
    talkState[talkUser] = 0
end

return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())g!', cid)
	elseif getPlayerLevel(cid) < newminlevel then
		selfSay('The minimum level for promotion 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 ="----- You have promoted!  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)..' promotion(s).', cid)
	talkState[talkUser] = 0
end

return true
end

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

Peguei de um sistema de reset que existe aqui no forum e modifiquei para você.

No meu servidor eu utilizava assim.

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

giphy.gif

   Pokemon PRO, Profissionais em diversão.

 

Servidor 24 Horas
Uptime: 100%

Link para o post
Compartilhar em outros sites

Vo dá uma dica, eu tinha um ot antigo, que tinha este sistema.

Você vai ter que fazer o seguinte, criar as 4 promotion, e por os npc's em uma area fechada.

para entrar em cada npc, você vai por um corredor, que no primeiro tile vai ter um script que somente Knight vai poder entrar.

Sabe por promotion em 10.10???

function onStepIn(cid, item, pos)

player1pos = getPlayerPosition(cid)
novapos1 = {x=132, y=348, z=7}
msg = "Aqui só entram players com a vocação X"

if item.uid == 1200 then
if(isInArray({3, 4, 7, 8}, getPlayerVocation(cid))) then -- id das vocation

else
doPlayerSendTextMessage(cid, 22, msg)
getThingfromPos(player1pos)
doSendMagicEffect(player1pos,2)
doTeleportThing(cid,novapos1)
doSendMagicEffect(novapos1,10)

end
return 1
end
end

Creditos ao God Vini e ao vodkart. Eu fiz um casamento dos 2 scripts.

Explicação do God Vini:

Explicação:

Azul = Lugar para onde o player sera teleportado se ele nao for premmy

Verde = Msg que aparecerá para o player caso ele nao seja premmy

Vermelho = UniqueID do piso

Amarelo = Vocações que irão passar

 

Tag em moveevents.xml:

Aqui o Script do Npc para você se não achar.

--[[Script made 100% by Nogard and Night Wolf. Editado por Washx!
   You can feel free to edit anything you want, but don't remove the credits]] 


local config = {
minlevel = 300, --- level inical para trocar promotion
price = 10000, --- preço para comprar a promotion
promotion = 3, --- número da promotion
percent = 100 ---- isso não meche.
}
--- 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 = 
	db.executeQuery("UPDATE `players` SET `promotion`="..config.promotion..",`level`= 301 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 promotion your character? It will cost '..newPrice..' gp\'s!', cid)
		talkState[talkUser] = 1
	else
		selfSay('You already reached the maximum promotion 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 --[[Script made 100% by Nogard and Night Wolf.
You can feel free to edit anything you want, but don't remove the credits]]


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 promotion!', cid)
    elseif getPlayerLevel(cid) < newminlevel then
        selfSay('The minimum level for promotion 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 ="----- You have promoted! 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)..' promotion(s).', cid)
    talkState[talkUser] = 0
end

return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())g!', cid)
	elseif getPlayerLevel(cid) < newminlevel then
		selfSay('The minimum level for promotion 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 ="----- You have promoted!  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)..' promotion(s).', cid)
	talkState[talkUser] = 0
end

return true
end

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

Peguei de um sistema de reset que existe aqui no forum e modifiquei para você.

No meu servidor eu utilizava assim.

Mas ai vai ter reset no meu ot tbm?

Link para o post
Compartilhar em outros sites
  • 2 weeks later...

Não editei o script para não ter reset, teste, e me diga o resultado.

giphy.gif

   Pokemon PRO, Profissionais em diversão.

 

Servidor 24 Horas
Uptime: 100%

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo