-
Total de itens
2553 -
Registro em
-
Última visita
-
Dias Ganhos
73
Tudo que zipter98 postou
-
OK, já sabemos onde o erro está. Agora, veremos qual é o erro. local function isSummon(cid) if not isCreature(cid) then return false end if getCreatureMaster(cid) ~= cid then return true end return false end function onDeath(cid, corpse, deathList) local stoTime = 96586 local stoKill = 96587 local stoName = 96587 local task = { ["dragon"] = {kill = "Dragon", qnt = 1500, exp = 1000000}, ["dragon lord"] = {kill = "Dragon Lord", qnt = 1000, exp = 800000}, ["hydra"] = {kill = "Hydra", qnt = 800, exp = 700000}, ["frost dragon"] = {kill = "Frost Dragon", qnt = 600, exp = 500000}, ["dragon guardian"] = {kill = "Dragon Guardian", qnt = 500, exp = 400000}, ["thunder dragon"] = {kill = "Thunder Dragon", qnt = 400, exp = 300000}, ["multi"] = {kill = "Multi", qnt = 600, exp = 200000}, ["demodras"] = {kill = "Demodras", qnt = 300, exp = 200000}, } for a = 1, #deathList do local pk = deathList[a] local myTask = task[string.lower(getPlayerStorageValue(pk, stoName))] local left = math.ceil((getPlayerStorageValue(pk, stoTime) - os.time())/(24 * 60 * 60)) print(myTask or "Task não existente: "..getPlayerStorageValue(pk, stoName)) print("Task do jogador "..getPlayerStorageValue(pk, stoName)) print("Nome do monstro: "..getCreatureName(cid)) if myTask and getCreatureName(cid) == getPlayerStorageValue(pk, stoName) and not isSummon(cid) then print("Primeira condição sendo executada.") if left > 0 and getPlayerStorageValue(pk, stoKill) > 0 then print("Segunda condição sendo executada.") setPlayerStorageValue(pk, stoKill, getPlayerStorageValue(pk, stoKill) - 1) local sto = getPlayerStorageValue(pk, stoKill) local jaMatou = math.abs(getPlayerStorageValue(pk, stoKill)-myTask.qntdade) if sto == 0 then doPlayerSendTextMessage(pk, 22, "["..myTask.kill.." Task Finalizada] ("..myTask.qntdade.."/"..myTask.qnt..")") else doPlayerSendTextMessage(pk, 22, "["..myTask.kill.." Task] ("..jaMatou.."/"..myTask.qntdade..")") end end end end return true end
-
onTarget também executado por monstros
tópico respondeu ao zipter98 de zipter98 em Linguagens de Programação
Por favor, teste outro script e veja se o mesmo erro acontece. O código do ptdg está funcionando perfeitamente, pelo menos aqui. -
Sim, o que me leva a indagar do porquê não tem aparecido erro algum na distro. É sempre informado no console quando uma variável inexistente é declarada. Mesmo assim, a storage responsável por armazenar os dados da task é ainda alterada.
-
Por gentileza, informe se alguma mensagem é imprimida na distro. Assim, saberemos onde exatamente se encontra o erro. local function isSummon(cid) if not isCreature(cid) then return false end if getCreatureMaster(cid) ~= cid then return true end return false end function onDeath(cid, corpse, deathList) print("Script sendo executado.") local stoTime = 96586 local stoKill = 96587 local stoName = 96587 local task = { ["dragon"] = {kill = "Dragon", qnt = 1500, exp = 1000000}, ["dragon lord"] = {kill = "Dragon Lord", qnt = 1000, exp = 800000}, ["hydra"] = {kill = "Hydra", qnt = 800, exp = 700000}, ["frost dragon"] = {kill = "Frost Dragon", qnt = 600, exp = 500000}, ["dragon guardian"] = {kill = "Dragon Guardian", qnt = 500, exp = 400000}, ["thunder dragon"] = {kill = "Thunder Dragon", qnt = 400, exp = 300000}, ["multi"] = {kill = "Multi", qnt = 600, exp = 200000}, ["demodras"] = {kill = "Demodras", qnt = 300, exp = 200000}, } for a = 1, #deathList do print("Loop iterando jogadores sendo executado.") local pk = deathList[a] local myTask = task[string.lower(getPlayerStorageValue(pk, stoName))] local left = math.ceil((getPlayerStorageValue(pk, stoTime) - os.time())/(24 * 60 * 60)) if myTask and getCreatureName(cid) == getPlayerStorageValue(pk, stoName) and not isSummon(cid) then print("Primeira condição sendo executada.") if left > 0 and getPlayerStorageValue(pk, stoKill) > 0 then print("Segunda condição sendo executada.") setPlayerStorageValue(pk, stoKill, getPlayerStorageValue(pk, stoKill) - 1) local sto = getPlayerStorageValue(pk, stoKill) local jaMatou = math.abs(getPlayerStorageValue(pk, stoKill)-myTask.qntdade) if sto == 0 then doPlayerSendTextMessage(pk, 22, "["..myTask.kill.." Task Finalizada] ("..myTask.qntdade.."/"..myTask.qnt..")") else doPlayerSendTextMessage(pk, 22, "["..myTask.kill.." Task] ("..jaMatou.."/"..myTask.qntdade..")") end end end end return true end
-
Você provavelmente está usando um creatureevent executado quando um monstro morre, com uma de suas características a modificação de valores em duas tabelas da database que estão faltando no seu servidor (killed_monsters e player_advances). Talvez seja um onDeath ou um onKill. Recomendaria dar uma olhada nos códigos de data/creaturescripts/scripts e procurar por aqueles que ou chamam a função db.executeQuery ou db.query. Se você não os estiver usando, basta deletá-los que o erro não mais acontecerá. Caso contrário, responda a pergunta do Adriano.
-
[Resolvido] [PDA] Player Em Pz Usando Ataque
pergunta respondeu ao FlamesAdmin de zipter98 em Resolvidos
Tópico movido para dúvidas / pedidos resolvidos. -
pedido [Encerrado] [Pedido] Spell Pokemon
tópico respondeu ao carlos fabian de zipter98 em Tópicos Sem Resposta
Tópico movido para dúvidas / pedidos resolvidos. -
[Resolvido] [PDA] Player Em Pz Usando Ataque
pergunta respondeu ao FlamesAdmin de zipter98 em Resolvidos
Troque: if getTileInfo(getThingPos(mypoke)).protection then por: if getTileInfo(getThingPos(cid)).protection then -
Troque: doTransformItem(item.uid, 7697) por: if item.uid > 0 then doTransformItem(item.uid, 7697) end
-
onTarget também executado por monstros
tópico respondeu ao zipter98 de zipter98 em Linguagens de Programação
Usando a correção que postei, o servidor não caiu e os monstros não me atacaram mais. Mas, se preferir, você pode fazer o que disse e fazer com que o item só possa ser usado fora de combate. -
onTarget também executado por monstros
tópico respondeu ao zipter98 de zipter98 em Linguagens de Programação
Apesar de não ser a maneira mais adequada para corrigir esse erro, é o que pude pensar no momento. Na parte em que a storage é alterada no código da food de proteção: local name = "monster_name" --Nome do monstro. function Substitute(cid) for _, pid in pairs(getSpectators(getThingPos(cid), 8, 8)) do if isMonster(pid) and getCreatureName(pid) == name then local healthNow, posNow = getCreatureHealth(pid), getThingPos(pid) doRemoveCreature(pid) local newMonster = doCreateMonster(name, posNow) doCreatureAddHealth(newMonster, -(getCreatureMaxHealth(newMonster) - healthNow)) end end end setPlayerStorageValue(cid, key, -1) Substitute(cid) -
Caso o código do Adriano ainda não funcione, peço que me responda uma coisa: você possui as sources do seu servidor? Gostaria de tentar uma coisa diferente.
-
action Ajuda para converter um Script para outra base²
tópico respondeu ao kaleudd de zipter98 em Lixeira Pública
Os status do PDA sem level são calculados de maneira diferente da versão com esta característica. Os fatores que influenciam na fórmula do cálculo de defesa, vida, ataque e etc são poucos, como boost e nível do jogador, visto que os status de cada pokémon são constantes. Já na versão com level, os atributos são variáveis, sendo avançar de nível um fator que os alteram. Mas como ninguém se importa com esta explicação, vou direto ao ponto: você quer que os atributos sejam aumentos por valores fixos ou percentuais? Por exemplo, um aumento de ataque em 10% ou um aumento de defesa em 300 (para o segundo caso, eu recomendaria um estudo sobre as fórmulas de status para ter uma melhor noção dos valores apropriados). -
onTarget também executado por monstros
tópico respondeu ao zipter98 de zipter98 em Linguagens de Programação
Minha alteração é basicamente a mesma do Slicer. A única diferença é que, na minha versão, eu retorno falso antes da dele. -
onTarget também executado por monstros
tópico respondeu ao zipter98 de zipter98 em Linguagens de Programação
Com o exemplo corrigido não funcionou? Você instalou tudo corretamente? O jogador por acaso está usando um summon? Tudo está funcionando como deve, inclusive testei a modificação na mesma versão da sua distro. -
action Sistema: Cassino Slots
tópico respondeu ao gonorreiaswat de zipter98 em Actions e Talkactions
Gostei do resultado apresentado no vídeo. Sério, ficou muito legal. Tópico aprovado e movido para a área adequada. Obrigado pelo conteúdo. ) -
onTarget também executado por monstros
tópico respondeu ao zipter98 de zipter98 em Linguagens de Programação
Fiz uma pequena correção nos códigos que postei anteriormente. Se possível, atualizem-nos. Realizei inúmeros testes a procura deste erro que vocês encontraram, porém não o enfrentei em ocasião alguma. O servidor não fechou nem nada. -
onTarget também executado por monstros
tópico respondeu ao zipter98 de zipter98 em Linguagens de Programação
Se a speed do monstro for igual a 0, ele não irá se mover em ocasião alguma. Logo, para fazer o que você quer, seriam necessárias outras modificações. Em monster.cpp: No código da função: void Monster::onThink(uint32_t interval) Abaixo de: updateIdleStatus(); if(isIdle) return; coloque: if(Creature* creature = static_cast<Creature*>(this)) { if(!attackedCreature && !isSummon() && creature->getNoMove()) creature->setNoMove(true); } Depois, abaixo de: //We just spawned lets look around to see who is there. if(isSummon()) isMasterInRange = canSee(getMaster()->getPosition()); coloque: creature->setNoMove(true); Código lua: local storage = xxx function onTarget(cid, target) if isMonster(cid) and isPlayer(target) and getPlayerStorageValue(target, storage) > -1 then doCreatureSetNoMove(cid, false) return true end return false end -
onTarget também executado por monstros
tópico respondeu ao zipter98 de zipter98 em Linguagens de Programação
data/creaturescripts/scripts: local storage = xxx function onTarget(cid, target) if isMonster(cid) and isPlayer(target) and getPlayerStorageValue(target, storage) > -1 then return true end return false end Tag: <event type="target" name="allowTarget" event="script" value="nome_do_arquivo.lua"/> No arquivo .XML do monstro, acima de: </monster> coloque: <script> <event name="allowTarget"/> </script> -
onTarget também executado por monstros
tópico respondeu ao zipter98 de zipter98 em Linguagens de Programação
Qual o erro que aparece? Para todo caso, teste aquele código que exemplifiquei no tópico e informe se ele funciona adequadamente no seu servidor ou não. Se funcionar, é problema no código lua. Se não, o erro encontra-se na instalação da modificação nas sources. -
[Resolvido] Remover Créditos estranhos no Console
pergunta respondeu ao SirUndead de zipter98 em Resolvidos
Tópico movido para dúvidas / pedidos resolvidos. -
onTarget também executado por monstros
tópico respondeu ao zipter98 de zipter98 em Linguagens de Programação
Obrigado pelos comentários, pessoal. @Xtudomuito Basta deixar a speed dele igual a 0 (arquivo .XML do monstro). -
onTarget também executado por monstros
tópico respondeu ao zipter98 de zipter98 em Linguagens de Programação
Para fazer isso seriam necessárias outras alterações. Retornando falso você vai impedir com que monstros ataquem summons e/ou players, e retornando verdadeiro a ação será realizada normalmente. E obrigado pela observação. Falta de atenção minha. -
pedido [Pedido] monstro só ataca player com storage (10 reps)
pergunta respondeu ao Jefferson14789 de zipter98 em Scripts
Você não vai conseguir fazer isso sem modificações nas sources. http://www.xtibia.com/forum/topic/236635-ontarget-tambem-executado-por-monstros/ -
Serei breve: com esta pequena modificação, o creatureevent onTarget poderá ser executado por monstros. Nas sources do seu servidor, abra o arquivo monster.cpp e procure por: if(it == targetList.end()) { //Target not found in our target list. #ifdef __DEBUG__ std::cout << "Target not found in targetList." << std::endl; #endif return false; } Abaixo deste bloco de código, coloque: CreatureEventList targetEvents = getCreatureEvents(CREATURE_EVENT_TARGET); for(CreatureEventList::iterator it = targetEvents.begin(); it != targetEvents.end(); ++it) { if(!(*it)->executeTarget(this, creature)) return false; } Depois, no código da função: void Monster::doAttacking(uint32_t interval) Abaixo de: if(!attackedCreature || (isSummon() && attackedCreature == this)) return; coloque: if(Creature* creature = attackedCreature->getCreature()) { CreatureEventList targetEvents = getCreatureEvents(CREATURE_EVENT_TARGET); for(CreatureEventList::iterator it = targetEvents.begin(); it != targetEvents.end(); ++it) { if(!(*it)->executeTarget(this, creature)) { setFollowCreature(NULL); setAttackedCreature(NULL); searchTarget(TARGETSEARCH_NEAREST); break; } } } Exemplo do que pode ser feito com esta alteração: Monstro não atacando jogador com X storagedata/creaturescripts/scripts: local storage = xxx function onTarget(cid, target) if isMonster(cid) and isPlayer(target) and getPlayerStorageValue(target, storage) > -1 then return false end return true end Tag: <event type="target" name="blockTarget" event="script" value="nome_do_arquivo.lua"/> No arquivo .XML do monstro, acima de: </monster> coloque: <script> <event name="blockTarget"/> </script>
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.
