Ir para conteúdo
  • Cadastre-se

(Resolvido)Npc que RESETA - erro


Ir para solução Resolvido por azzouks,

Posts Recomendados

fala ai Molecada !
seguinte eu tenho um NPC de reset.. e queria que ele desse alguns atributos ao player, dependendo da vocação..
por exemplo Kina - 15 skills (axe, club, fist, sword, shield) // mage 10 magic level e 10 shield // pally 10 dist e 10 shield

--[[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 = 510, --- level inical para resetar
price = 1000000, --- preço inicial para resetar
newlevel = 25, --- level após reset
priceByReset = 1000000, --- preço acrescentado por reset
mlnew = 10, --- quanto de ml vai adicionar ao resetar
skillnew = 15--- quanto de skill vai dar (axe, club, sword, shield, distance)
}
--- end config






function addReset(cid)
resets = getResets(cid)
setPlayerStorageValue(cid, 378378, resets+1) 
doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
------------------------------------ MUDE AQUI A % DE VIDA QUE GANHA AO RESETAR ---------------------
local hp = getCreatureMaxHealth(cid)
local resethp = hp*0.10
setCreatureMaxHealth(cid, resethp)
local differencehp = (hp - resethp)
doCreatureAddHealth(cid, -differencehp)
local mana = getCreatureMaxMana(cid)
local resetmana = mana*0.10
setCreatureMaxMana(cid, resetmana)
local differencemana = (mana - resetmana)
doCreatureAddMana(cid, -differencemana)
------------------------------------ FIM ----------------------------
------------------------------ EDIÇÃO DAS SKILLS --------------------
local skills = { 
magic = getPlayerSkillLevel(cid, SKILL__MAGLEVEL),
club = getPlayerSkillLevel(cid, SKILL_CLUB),
axe  = getPlayerSkillLevel(cid, SKILL_AXE),
sword = getPlayerSkillLevel(cid, SKILL_SWORD),
shield  = getPlayerSkillLevel(cid, SKILL_SHIELD),
distance = getPlayerSkillLevel(cid, SKILL_DISTANCE)
}

if isInArray({13,14}, getPlayerVocation(cid)) then 
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skills.magic + config.mlnew) .. ", `count` = 0 WHERE `skillid` = 7 and `player_id` = " .. playerid .. ";")
end


if isInArray({16}, getPlayerVocation(cid)) then
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.shield + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 5 and `player_id` = " .. playerid .. ";")   
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.axe + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 3 and `player_id` = " .. playerid .. ";")
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.sword + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 2 and `player_id` = " .. playerid .. ";")
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.club + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 1 and `player_id` = " .. playerid .. ";")
end




if isInArray({15}, getPlayerVocation(cid)) then
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.shield + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 5 and `player_id` = " .. playerid .. ";") 
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.distance + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 4 and `player_id` = " .. playerid .. ";")
end
------------------------FIM ---------------------------------- 
                        doRemoveCreature(cid)
            db.executeQuery("UPDATE `players` SET `description` = ' [Reset: "..resets.."]' WHERE `players`.`id`= ".. playerid .."")
db.executeQuery("UPDATE `players` SET `level`="..config.newlevel..",`experience`= 0 WHERE `players`.`id`= ".. playerid .."")
                          return TRUE
end






function getResets(cid)
resets = getPlayerStorageValue(cid, 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 creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid




local newPrice = config.price + (getResets(cid) * config.priceByReset)




if msgcontains(msg, 'reset') then
if getResets(cid)  == resets then
selfSay('You want to reset your character? It will cost '..newPrice..' gp\'s!', cid)
talkState[talkUser] = 1
else
selfSay('I couldnt acess your bank of acess!', 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) < config.minlevel then
selfSay('The minimum level for reseting is '..config.minlevel..'!', cid)
else
doPlayerRemoveMoney(cid,newPrice)
playerid = getPlayerGUID(cid)
addEvent(addReset, (5*1000), cid)
  local msg ="---[Reset: "..getResets(cid).."]-- You have reseted!  You'll be disconnected in 5 seconds."
        if doPlayerPopupFYI(cid, msg) then
        
        end


end
talkState[talkUser] = 0
elseif(msgcontains(msg, 'no')) and isInArray({1}, talkState[talkUser]) == TRUE then
talkState[talkUser] = 0
selfSay('Ok.', cid)
elseif msgcontains(msg, 'quantity') then
selfSay('You have a total of '..getResets(cid)..' reset(s).', cid)
end




return true
end




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

a versao do meu Server é 8.54!

Rep++

Link para o post
Compartilhar em outros sites

No lugar que você criou o tópico é para scripts de Monster e NPC's prontos e não para suporte,qualquer suporte relacionado a script deve ser criado na área de Suporte Scripts,mesma coisa para as outras áreas de suporte.Espero que tenha entendido,abraço ! ;)

Link para o post
Compartilhar em outros sites

quando eu te passei esse script eu te falei que ele ia precisar ser modificado de acordo com o seu server... a parte que edita as skills é aqui e se não tá adicionando é porque tem alguma coisa errada:
Procura estudar esses comandos de db.executeQuery

------------------------------ EDIÇÃO DAS SKILLS --------------------
local skills = {
magic = getPlayerSkillLevel(cid, SKILL__MAGLEVEL),
club = getPlayerSkillLevel(cid, SKILL_CLUB),
axe = getPlayerSkillLevel(cid, SKILL_AXE),
sword = getPlayerSkillLevel(cid, SKILL_SWORD),
shield = getPlayerSkillLevel(cid, SKILL_SHIELD),
distance = getPlayerSkillLevel(cid, SKILL_DISTANCE)
}

if isInArray({13,14}, getPlayerVocation(cid)) then
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skills.magic + config.mlnew) .. ", `count` = 0 WHERE `skillid` = 7 and `player_id` = " .. playerid .. ";")
end


if isInArray({16}, getPlayerVocation(cid)) then
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.shield + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 5 and `player_id` = " .. playerid .. ";")
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.axe + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 3 and `player_id` = " .. playerid .. ";")
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.sword + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 2 and `player_id` = " .. playerid .. ";")
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.club + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 1 and `player_id` = " .. playerid .. ";")
end




if isInArray({15}, getPlayerVocation(cid)) then
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.shield + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 5 and `player_id` = " .. playerid .. ";")
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.distance + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 4 and `player_id` = " .. playerid .. ";")
end
------------------------FIM ---------------------------------- 

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

eu pensei nisso também mas pelo que ele falou a unica coisa que não funciona é a alteração da database de skills

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Não sei se ajuda, mas quando um mage vai resetar ele apenas perde a mana e o life, e é movido pra seu templo, e dá o seguinte erro.:

 

[29/06/2014 22:44:46] data/npc/scripts/isolda.lua:47: attempt to perform arithmetic on field 'magic' (a boolean value)
[29/06/2014 22:44:46] stack traceback:
[29/06/2014 22:44:46]  data/npc/scripts/isolda.lua:47: in function <data/npc/scripts/isolda.lua:20>

 

 

 

fiz assim -> 

local skills = { 
magic = getPlayerMagLevel(cid),
club = getPlayerSkillLevel(cid, SKILL_CLUB),
axe  = getPlayerSkillLevel(cid, SKILL_AXE),
sword = getPlayerSkillLevel(cid, SKILL_SWORD),
shield  = getPlayerSkillLevel(cid, SKILL_SHIELD),
distance = getPlayerSkillLevel(cid, SKILL_DISTANCE)
}

if isInArray({13,14}, getPlayerVocation(cid)) then 
db.executeQuery("UPDATE `players` SET `maglevel` = " .. (skills.magic + config.mlnew) .. " WHERE `maglevel` and `id` = " .. playerid .. ";")
end


if isInArray({16}, getPlayerVocation(cid)) then
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skills.shield + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 5 and `player_id` = " .. playerid .. ";")   
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skills.axe + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 3 and `player_id` = " .. playerid .. ";")
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skills.sword + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 2 and `player_id` = " .. playerid .. ";")
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skills.club + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 1 and `player_id` = " .. playerid .. ";")
end




if isInArray({15}, getPlayerVocation(cid)) then
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.shield + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 5 and `player_id` = " .. playerid .. ";") 
db.executeQuery("UPDATE `player_skills` SET `value` = " .. (skill.distance + config.skillnew) .. ", `count` = 0 WHERE `skillid` = 4 and `player_id` = " .. playerid .. ";")
end
------------------------FIM ---------------------------------- 
                        doRemoveCreature(cid)
            db.executeQuery("UPDATE `players` SET `description` = ' [Reset: "..resets.."]' WHERE `players`.`id`= ".. playerid .."")
db.executeQuery("UPDATE `players` SET `level`="..config.newlevel..",`experience`= 0 WHERE `players`.`id`= ".. playerid .."")
                          return TRUE
end

 

mudei a edição do magic level, pois no meu banco de dados ele nao e dado como skill, e sim como ta ali, e em outro banco de dados nao em players_skills..
nao da NENHUM erro, apenas nao dá os skills nem o magic level :'/
Editado por azzouks (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

ele nao tá conseguindo calcular essa soma aqui:

skills.magic + config.mlnew

cara.. quando eu fiz esse script pra você eu te disse que não dava pra fazer.. criar um tópico aqui é escolha sua mas eu não tenho competência pra te ajudar nesse erro.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites
  • Solução

os moderadores podem fechar o topico, o erro esta na minha função "isInArray"

ja corrigi o erro, e na verdade foi bastante simples.

 

Fallen Spirits Server!

servidor com varios sistemas proprios!

e agora ganha seus attributos ao resetar!

 

 

Link para o post
Compartilhar em outros sites
  • 5 years later...

 

Desculpas Reviver mais tava precisando de arruma tbm esse mesmo erro

@xWhiteWolf

@deivim17 

@xWhiteWolf

Editado por deivim17 (veja o histórico de edições)
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