Tudo que zipter98 postou
-
(Resolvido)[Pedido] Sistema de Arena.
Provavelmente você configurou errado as posições fromPos e toPos na lib. Já desenvolvi o rank. Está nesta página mesmo. Sobre a premiação, farei esta edição para você (junto com a possibilidade de invocar quantos monstros quiser na wave).
-
(Resolvido)Premium Quando entra.
Se for VIP, por favor, informe o sistema VIP que você está utilizando. Caso seja premium days: Em data/creaturescripts/scripts, crie um arquivo com extensão .lua, nomeie-o premiumlogin, e coloque o seguinte conteúdo: local days = 60 --Aqui você configura a quantidade de dias premium que o jogador vai receber. local storage = 80191 local message = "You received %d premium day%s." function onLogin(cid) if getPlayerStorageValue(cid, storage) < 1 then doPlayerAddPremiumDays(cid, days) doPlayerSendTextMessage(cid, 27, message:format(days, days > 1 and "s" or "")) setPlayerStorageValue(cid, storage, 1) end return true end Depois, em data/creaturescripts, abra o arquivo creaturescripts.xml e coloque a seguinte tag, abaixo de semelhantes: <event type="login" name="premiumLogin" event="script" value="premiumlogin.lua"/>
-
(Resolvido)[Pedido] Sistema de Arena.
Esse erro aí é problema do seu servidor, infelizmente. Como pode-se notar, não há referência alguma a queries no sistema de arena. E provavelmente os bosses não estão desaparecendo devido, indiretamente, ao erro acima.
-
(Resolvido)[Pedido] Sistema de Arena.
Esse bug que você citou, na verdade, eu já havia corrigido faz tempo. É só você trocar sua lib pela atualizada (adicionei uma nova função e removi outra que não era funcional). Sobre o preço, vou arrumar. Na verdade, isso que eu fiz foi intencional: o "sistema" de dinheiro/cash/gold do meu servidor é diferente dos servidores convencionais de Tibia. Aí, enquanto eu testava, adaptei o preço do NPC para ser coerente com meu server. EDIT: Pronto, NPC "corrigido".
-
Return True ou False
@Gabuuh Você fez uma pergunta, eu respondi, ué.
-
(Resolvido)[Pedido] Sistema de Arena.
edit: nvm, era só umas variáveis coincidindo aqui. Problema do meu servidor rs. O sistema tá funcionando perfeitamente.
- (Resolvido)Sistema para evento programado com tps [8.60]
-
Return True ou False
Depende da função que você se refere. Um callback? Sempre. Uma função criada puramente em lua? Isso varia. Há funções que executam ações sem necessidade de retornar algo. Exemplo: function Example(cid) doSendMagicEffect(getThingPos(cid), 21) addEvent(function() if isPlayer(cid) then Example(cid) end end, 1000) end
-
(Resolvido)getItem
É como tivesse vários itens empilhados? while getTileItemById(position, itemid).uid > 0 do doRemoveItem(getTileItemById(position, itemid).uid) end
- (Resolvido)Sistema para evento programado com tps [8.60]
-
(Resolvido)[Pedido] Sistema de Arena.
Foi mal a demora, estava viajando. Editei meu comentário na primeira página com o sistema completo. Agora eu definitivamente o testei e removi um outro bug. Se possível, substitua seu antigo killboss.lua pelo novo (também adicionei uma nova tag, e é necessário registrar mais um evento em login.lua). Desculpa pelos erros e tal.
-
[scripting][pedido][modificaçao]
local players = {"Test", "Tester", "Testinha"} --Aqui você configura o nome dos jogadores que o script ignorará. function onKill(cid, target, lastHit) if cid ~= target and isPlayer(target) then if not isInArray(players, getCreatureName(cid)) and getPlayerIp(cid) == getPlayerIp(target) then doCreatureAddHealth(cid, -500) doCreatureAddMana(cid, -500) doPlayerAddExperience(cid, -20000000) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Punished for killing player with the same IP!!') else doSendAnimatedText(getPlayerPosition(cid), "Orgasmic~", 198) end end return true end
-
(Resolvido)[Pedido] Sistema de Arena.
Hm, vamos alterar o valor da storage no jogo mesmo. Muda o conteúdo do killboss.lua para este: function onKill(cid, target) if isPlayer(target) and getPlayerStorageValue(target, ARENA.STORAGES.wave_sto) > -1 then setPlayerStorageValue(target, ARENA.STORAGES.wave_sto, -1) setGlobalStorageValue(1000, -1) elseif isPlayer(cid) and getPlayerStorageValue(cid, ARENA.STORAGES.wave_sto) > -1 then local new_wave = getPlayerStorageValue(cid, ARENA.STORAGES.wave_sto) + 1 if ARENA.WAVES[new_wave] then setPlayerStorageValue(cid, ARENA.STORAGES.wave_sto, new_wave) doWave(cid, new_wave) else local tp = doCreateTeleport(ARENA.TELEPORT.tpId, ARENA.TELEPORT.tpToPos, ARENA.TELEPORT.tpPos) doItemSetAttribute(tp, "aid", ARENA.TELEPORT.aid) end end return true end function onLogout(cid) if getTileInfo(getThingPos(cid)).protection and getPlayerStorageValue(cid, ARENA.STORAGES.wave_sto) > -1 then return setPlayerStorageValue(cid, ARENA.STORAGES.wave_sto, -1) end if getPlayerStorageValue(cid, ARENA.STORAGES.wave_sto) > -1 then doPlayerSendCancel(cid, "You can't logout now.") return false end return true end Tente deslogar em uma protection zone. Agora sobre o ranking que havia sido pedido: No código do NPC, abaixo de: setPlayerStorageValue(cid, ARENA.STORAGES.wave_sto, 1) adicione: setPlayerStorageValue(cid, 90183, 1) No creaturescript, abaixo de: local new_wave = getPlayerStorageValue(cid, ARENA.STORAGES.wave_sto) + 1 adicione: if new_wave > getPlayerStorageValue(cid, 90183) then setPlayerStorageValue(cid, 90183, new_wave) end Agora o código da talkaction: function onSay(cid, words) local query = db.getResult("SELECT player_id, value FROM player_storage WHERE key = 90183 AND value > -1 ORDER BY value DESC LIMIT 10") local str = "Rank da Arena:" local a = 0 if query:getID() == -1 then return doPlayerPopupFYI(cid, str.."\nNodoby went to the arena until now.") end repeat a = a + 1 local id = query:getDataInt("player_id") local waves = query:getDataInt("value") str = str.."\n"..a..". "..getPlayerNameByGUID(id).." / "..waves.." waves" until not query:next() query:free() doPlayerPopupFYI(cid, str) return true end PS: A wave record do jogador só vai aparecer no ranking após ele deslogar (para a storage ser salva na database).
-
(Resolvido)[Pedido] Sistema de Arena.
Sim. Sobre você não estar podendo deslogar em qualquer área, provavelmente seu personagem está com um valor maior que -1 na storage da arena. Executa o seguinte comando na sua database: UPDATE player_storage SET value = -1 WHERE key = 90182
-
(Resolvido)Drop por chance
data/creaturescripts/scripts, crie um arquivo com extensão .lua, nomeie-o bonusloot.lua e adicione o seguinte conteúdo: local monsters = { ["Demon"] = {90181, 100, {item_id, count}}, --["nome_do_monstro"] = {storage, quantidade_para_matar, {item_id, quantidade}}, } function onDeath(cid, corpse, deathList) local killer = deathList[1] if #deathList > 1 then killer = deathList[2] end if isMonster(cid) and isPlayer(killer) and monsters[getCreatureName(cid)] then local monster = monsters[getCreatureName(cid)] local storage = monster[1] local value = getPlayerStorageValue(killer, storage) < 1 and 1 or getPlayerStorageValue(killer, storage) + 1 if value >= monster[2] then local id = monster[3][1] local count = monster[3][2] setPlayerStorageValue(killer, storage, -1) if isItemStackable(id) then doAddContainerItem(corpse.uid, id, count) else for i = 1, count do doAddContainerItem(corpse.uid, id, 1) end end else local left = monster[2] - value setPlayerStorageValue(killer, storage, value) doPlayerSendTextMessage(killer, MESSAGE_STATUS_CONSOLE_ORANGE, left.." "..getCreatureName(cid)..(left > 1 and "s" or "").." left to kill.") end end return true end Tag: <event type="death" name="bonusLoot" event="script" value="bonusloot.lua"/> No arquivo XML dos monstros configurados na tabela monsters (ou seja, aqueles que droparão um item bônus após matar quantia x deles), você adicione, antes de </monster>, isso: <script> <event name="bonusLoot"/> </script>
-
(Resolvido)[PEDIDO] Comando para fazer summon falar
Mas como vai decidir qual summon vai falar?
-
(Resolvido)[Pedido] Sistema de Arena.
Exato, modifiquei apenas este arquivo. Já concertei também o erro de morrer na arena. Pelo menos na teoria eu concertei, veremos na prática.
-
onkill ganhar storage rep++
Como você pode notar, eu deixo tanto a variável quanto o nome do monstro em letra minúscula na comparação. Caso seja configurado na variável monster, por exemplo, "demon", e eu chame esta variável na mensagem, aparecerá demon, e não Demon. E nomes próprios começam com letra maiúscula. É apenas por estética mesmo.
-
(Resolvido)[Pedido] Sistema de Arena.
Corrigi o erro do logout. Agora o jogador não pode deslogar na arena. Sobre o sistema de rank, ok, farei essa modificação logo. Mas vai ser top o que? Top 5? Top 10?
-
onkill ganhar storage rep++
Ops, my bad. Não tem que registrar no arquivo XML do monstro, e sim no login.lua.
-
(Resolvido)[Pedido] Sistema de Arena.
Esqueci de avisar, mas eu também alterei a lib. Sem essa alteração, vai dar erro no NPC mesmo. Abaixo de: delay = 15, --Segundos para o boss aparecer. adicione: level = 100, --Level mínimo. Sobre a remoção da storage global: altere seu creaturescript para este: function onKill(cid, target) if isPlayer(target) and getPlayerStorageValue(target, ARENA.STORAGES.wave_sto) > -1 then setPlayerStorageValue(target, ARENA.STORAGES.wave_sto, -1) setGlobalStorageValue(1000, -1) elseif isPlayer(cid) and getPlayerStorageValue(cid, ARENA.STORAGES.wave_sto) > -1 then local new_wave = getPlayerStorageValue(cid, ARENA.STORAGES.wave_sto) + 1 if ARENA.WAVES[new_wave] then setPlayerStorageValue(cid, ARENA.STORAGES.wave_sto, new_wave) doWave(cid, new_wave) else local tp = doCreateTeleport(ARENA.TELEPORT.tpId, ARENA.TELEPORT.tpToPos, ARENA.TELEPORT.tpPos) doItemSetAttribute(tp, "aid", ARENA.TELEPORT.aid) end end return true end function onLogout(cid) if isInArea(getThingPos(cid), ARENA.fromPos, ARENA.toPos) then doPlayerSendCancel(cid, "You can't logout now.") return false end return true end e seu movement para este: function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end setPlayerStorageValue(cid, ARENA.STORAGES.storage, 1) setPlayerStorageValue(cid, ARENA.STORAGES.wave_sto, -1) setGlobalStorageValue(1000, -1) addEvent(function() if getTileItemById(position, ARENA.TELEPORT.tpId).uid > 0 then doRemoveItem(getTileItemById(position, ARENA.TELEPORT.tpId).uid, 1) end end, 50) return true end E o novo NPC: 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 if msgcontains(msg:lower(), "arena") or msgcontains(msg:lower(), "enter") then if getPlayerLevel(cid) < ARENA.level then selfSay("You do not have enough level ["..ARENA.level.."].", cid) talkState[talkUser] = 0 return true elseif isThereSomeone(ARENA.fromPos, ARENA.toPos) or getGlobalStorageValue(1000) > -1 then selfSay("Someone is at the arena right now, please wait.", cid) talkState[talkUser] = 0 return true elseif getPlayerStorageValue(cid, ARENA.STORAGES.storage) > -1 then selfSay("You already completed the arena.", cid) talkState[talkUser] = 0 return true else selfSay("You really want enter in the arena? It will cost you {"..ARENA.NPC.price.."}.", cid) talkState[talkUser] = 1 return true end elseif msgcontains(msg:lower(), "yes") and talkState[talkUser] == 1 then if doPlayerRemoveMoney(cid, ARENA.NPC.price * 100) then selfSay("Good luck! ^.^", cid) doTeleportThing(cid, ARENA.NPC.position) setPlayerStorageValue(cid, ARENA.STORAGES.wave_sto, 1) setGlobalStorageValue(1000, 1) doWave(cid, 1) talkState[talkUser] = 0 return true else selfSay("You do not have enough money.", cid) talkState[talkUser] = 0 return true end elseif msgcontains(msg:lower(), "no") and talkState[talkUser] == 1 then selfSay("Ok, then...", cid) talkState[talkUser] = 0 return true end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
-
(Resolvido)[Pedido] Sistema de Arena.
Pronto, alterei o NPC com level mínimo para entrar na arena. Estranho não estar funcionando a função que fiz, mas enfim. Faça como o Frenesy disse: checagem por global storage.
-
(Resolvido)[Pedido] Sistema de Arena.
edit: agora que li que não tá funcionando.
-
(Resolvido)[Pedido] Sistema de Arena.
Pronto, tudo funcionando perfeitamente agora. Editei aquele meu comentário com o sistema com as novas configurações. A lib e o NPC não mudaram. Você não precisa mais registrar o evento no XML do monstro, porém agora é necessário registrá-lo em login.lua. Fiz uma alteração no creaturescript e no movement (meu servidor tem um probleminha quanto a alguns funções que estava utilizando, então as removi e usei outro metódo).
-
(Resolvido)[Pedido] Sistema de Arena.
Essa coordenada que você citou não precisa ser configurada. Faz parte de uma função. Sobre seu erro, farei uns testes aqui. EDIT: Já encontrei este erro e o corrigi. Estou apenas fazendo alguns últimos ajustes e testes.