-
Total de itens
926 -
Registro em
-
Última visita
-
Dias Ganhos
18
Tudo que Danihcv postou
-
tfs 1.0 Teleport com storage que muda a posição.
pergunta respondeu ao Elias Palermo de Danihcv em Scripts
@Elias Palermo, põe assim e manda o que aparecer na distro: local str = "storageTeleport" --storage que receberá os valores (para controlar o local para onde levará o player)local msgErro = "Você não é digno de entrar aqui." --mensagem de erro ao tentar entrar no teleport mas não ter um valor configurado na tabelalocal teleports = { --[valorDaStorage] = {pos = {POSIÇÃO-QUE-LEVARÁ,-CASO-TENHA-O-VALOR-NA-STORAGE}, newValue = NOVO-VALOR-QUE-A-STORAGE-RECEBERÁ}[-1] = {pos = {x=1578, y=1687, z=7}, newValue = 1},[0] = {pos = {x=1578, y=1687, z=7}, newValue = 1},[1] = {pos = {x=1578, y=1687, z=7}, newValue = -1},}function onStepIn(cid, position, fromPosition)valor = getPlayerStorageValue(cid, str)print("valor: "..valor) if isInArray(teleports, valor) then doTeleportThing(cid, teleports[valor].pos) setPlayerStorageValue(cid, str, teleports[valor].newValue) else doTeleportThing(cid, fromPosition) doPlayerSendCancel(cid, msgErro) end return trueend -
tfs 1.0 Teleport com storage que muda a posição.
pergunta respondeu ao Elias Palermo de Danihcv em Scripts
@Elias Palermo, isso ocorreu pq o player pisou no teleport e o valor da storage dele não estava configurado na tabela. Por exemplo: na tabela eu pus 3 linhas, para os valores -1, 0 e 1. O player que pisou no teleport tinha um valor diferente desses na storage. Vê se assim já resolve: local str = "storageTeleport" --storage que receberá os valores (para controlar o local para onde levará o player)local msgErro = "Você não é digno de entrar aqui." --mensagem de erro ao tentar entrar no teleport mas não ter um valor configurado na tabelalocal teleports = { --[valorDaStorage] = {pos = {POSIÇÃO-QUE-LEVARÁ,-CASO-TENHA-O-VALOR-NA-STORAGE}, newValue = NOVO-VALOR-QUE-A-STORAGE-RECEBERÁ}[-1] = {pos = {x=1578, y=1687, z=7}, newValue = 1},[0] = {pos = {x=1578, y=1687, z=7}, newValue = 1},[1] = {pos = {x=1578, y=1687, z=7}, newValue = -1},}function onStepIn(cid, position, fromPosition)valor = getPlayerStorageValue(cid, str) if isInArray(teleports, valor) then doTeleportThing(cid, teleports[valor].pos) setPlayerStorageValue(cid, str, teleports[valor].newValue) else doTeleportThing(cid, fromPosition) doPlayerSendCancel(cid, msgErro) end return trueend -
action [npc] justiceiro - anti-bot & power abuse systems!
um tópico no fórum postou Danihcv NPCs, monsters e raids
Saudações, xTibianos! Hoje venho lhes trazer um npc desenvolvido por mim, cuja ideia foi de nosso ADM @Daniel. Antes de mais nada, gostaria de avisar: o NPC possui uma GRANDE possibilidade de customização. Você pode escolher quais sistemas você vai quer que ele tenha, pode escolher se vai usar prisão ou não, pode escolher o tempo de punição ao membro infrator, etc. Sistemas presentes Esse NPC possui os seguintes sistemas: Anti-bot system Qualquer jogador pode ir até o NPC e denunciar algum outro jogador (que provavelmente esteja usando bot). O NPC então enviará uma checagem de bot ao jogador denunciado. Caso o jogador denunciado não responda a checagem dentro do tempo hábil, ele será punido (enviado para uma prisão ou kickado). Power Abuse system Esse sistema serve para punir aqueles membros de level alto que ficam fazendo "free kill" (matando jogadores mais fracos abusivamente). Qualquer jogador (qualquer level) pode ir até o npc e denunciar algum outro jogador (level maior) alegando que ele sofreu power abuse. O npc fará uma checagem, e se o jogador denunciante tiver sido morto um minimo de X vezes (configurável) por aquele jogador denunciado, o jogador denunciado será punido (mandado pra prisão ou kickado). Aparência do NPC Esse é o NPC, visualmente falando: inspiração: Instalação Agora chega de enrolação, vamos à instalação do npc: » Vá na pasta mods, crie um arquivo chamado JusticeiroMods.xml e coloque isso dentro: *atente-se para essa parte configurável do script acima: *nessa parte, o strBot e o strPwrAbs devem ser iguais aos informados no arquivo Justiceiro.lua que será mostrado mais abaixo » Agora vá na pasta data\npc, crie um arquivo chamado Justiceiro.xml e coloque isso dentro: » Agora vá na pasta data\npc\scripts, crie um arquivo chamado Justiceiro.lua e coloque isso dentro: *atente-se para essa parte configurável do script acima: -----------------------------------------------------------------------------------------------------------------------------------------------------PARTE CONFIGURAVEL----------------------------------PARTE CONFIGURAVEL------------------------------PARTE CONFIGURAVEL------------------------------------------------------------------------------------------------------------------------------------------------------------------------local usarAntiBot = "sim" --coloque "nao" caso não queira usar o anti-bot do npclocal usarPowerAbuse= "sim" --coloque "nao" caso não queira usar o power abuse system do npclocal cadeia = "sim" --use "sim" caso vc queira mandar o infrator para a cadeia, ou "nao" caso vc nao tenha uma cadeialocal cadeiaPos = { --coordenadas das celas da cadeia, para caso vc tenha colocado o 'cadeia = "sim"' no campo acima[1] = {coord = {x = 32314, y = 32280, z = 8}, preso={}--[[DEIXE ISSO VAZIO]]}, --ponha as coordenadas da cela 1[2] = {coord = {x = 32317, y = 32280, z = 8}, preso={}--[[DEIXE ISSO VAZIO]]}, --ponha as coordenadas da cela 2[3] = {coord = {x = 32320, y = 32280, z = 8}, preso={}--[[DEIXE ISSO VAZIO]]}, --ponha as coordenadas da cela 3[4] = {coord = {x = 32322, y = 32280, z = 8}, preso={}--[[DEIXE ISSO VAZIO]]}, --ponha as coordenadas da cela 4}local tempoBot = 5 --tempo em minutos para o player reportado como botter responder a verificaçãolocal tempoPunicao = 60 --tempo em minutos que o infrator ficara presolocal maxDeath = 7 --quantidade de mortes "desbalanceadas" (player mais fraco contra palyer muito mais forte) considerada como power abuselocal cooldown = 30 --tempo em segundos para o denunciante poder fazer outra denuncialocal strBotDen = 690110local strBot = 69011local strPwrAbsDen = 690120local strPwrAbs = 69012-------------------------------------------------------------------------------------------------------------------------------------------------FIM DA PARTE CONFIGURAVEL-----------------------FIM DA PARTE CONFIGURAVEL---------------------FIM DA PARTE CONFIGURAVEL--------------------------------------------------------------------------------------------------------------------------------------------------------------------- obs: lembrando que você pode adicionar QUANTAS CELAS QUISER! Basta seguir a lógica da tabela relacionada as celas. obs²: e não esqueça de ler as instruções contidas em cada linha dessa parte do script! Como usá-lo em meu servidor? (recomendação) Eu recomendo também usar em seu servidor algum sistema automático de anti-bot, além do npc. -Por quê? Porque dessa forma dificultará a vida do botter. Digamos que o sistema automático faça mande uma checagem para todos os jogadores a cada 1 hora. Sem o meu npc, o botter pode entrar a cada hora no server e responder a checagem automática. Já tendo o meu npc, o botter pode receber uma checagem de bot a qualquer instante (pois qualquer membro pode fazer a denuncia a qualquer instante). Assim, ele não terá uma previsão de tempo para que ele volte à janela do tibia somente para responder a checagem do bot. Mapa de prisão Bom, galera, esse é o npc. Se você quiser usar o sistema de prisão mas não tiver uma prisão em seu server, aqui tem uma prisão feita pelo @Daniel para que vocês possam baixar e usar em conjunto com esse sistema: http://www.xtibia.com/forum/topico/240867-86-pris%C3%A3o-30-celas/ Eu testei todo esse sistema que nem um condenado. Não consegui achar nenhuma falha. Então se alguém encontrar alguma falha, por favor relate-a no campo de comentários abaixo. Por hoje é isso, pessoal. Até a próxima. Abraços. Não autorizo a postagem desse conteúdo sem meus devidos créditos!- 20 respostas
-
- tfs 0.3/0.4
- npc
- (e 4 mais)
-
Tópico movido para dúvidas / pedidos resolvidos.
-
tfs 1.0 Teleport com storage que muda a posição.
pergunta respondeu ao Elias Palermo de Danihcv em Scripts
huahuahua, de boa cara. ^^ --------------------------------------------------------- Tópico movido para dúvidas / pedidos resolvidos. -
Brother, cuidado com flood. Descreva o que você deseja exatamente.
-
Este tópico foi movido para Tutoriais e Suporte - Tutoriais de Scripting - Suporte Scripting
-
Este tópico foi movido para Tutoriais e Suporte - Tutoriais de Scripting - Suporte Scripting
- 1 resposta
-
- pedido
- tarefas de commander stone
- (e 4 mais)
-
Este tópico foi movido para Tutoriais e Suporte - Tutoriais de Scripting - Suporte Scripting
-
Este tópico foi movido para Tutoriais e Suporte - Tutoriais de Scripting - Suporte Scripting
-
Este tópico foi movido para Tutoriais e Suporte - Tutoriais de Websites - Suporte Websites
-
Tópico movido para dúvidas / pedidos resolvidos.
-
Este tópico foi movido para Tutoriais e Suporte - Tutoriais de Scripting - Suporte Scripting
-
Este tópico foi movido para Tutoriais e Suporte - Tutoriais de Scripting - Suporte Scripting
-
Este tópico foi movido para Tutoriais e Suporte - Tutoriais para Iniciantes - Suporte Geral
-
@Massay, amigo, seu objetivo quanto a esse assunto ainda não me é muito claro... Você quer que seja acrescentado créditos à equipe do World Nto Shippuden? (Apesar de que no próprio título do tópico ja está claro isso) Ou você quer que o download desse conteúdo seja removido? (Nesse caso você terá que mandar provas de que você é o autor deste conteúdo) Agradeço a compreensão. Abraços.
-
tfs 1.0 Teleport com storage que muda a posição.
pergunta respondeu ao Elias Palermo de Danihcv em Scripts
@Elias Palermo, parece que sua distro tem como padrão o valor 0 para storages (ao invés de -1). Então, basta acrescentar uma linha para o valor 0 na tabela: local teleports =[-1] = {pos = {x=1578, y=1687, z=7}, newValue = 1},[0] = {pos = {x=1578, y=1687, z=7}, newValue = 1},[1] = {pos = {x=1578, y=1687, z=7}, newValue = -1},} *recomendo manter a linha do -1. Aí vc tem que deixar a linha do -1 e do 0 iguais (levando para o mesmo destino e com o mesmo newValue). Segue o script atualizado (otimizado): local str = "storageTeleport" --storage que receberá os valores (para controlar o local para onde levará o player)local teleports = { --[valorDaStorage] = {pos = {POSIÇÃO-QUE-LEVARÁ,-CASO-TENHA-O-VALOR-NA-STORAGE}, newValue = NOVO-VALOR-QUE-A-STORAGE-RECEBERÁ}[-1] = {pos = {x=1578, y=1687, z=7}, newValue = 1},[0] = {pos = {x=1578, y=1687, z=7}, newValue = 1},[1] = {pos = {x=1578, y=1687, z=7}, newValue = -1},}function onStepIn(cid, position) doTeleportThing(cid, teleports[getPlayerStorageValue(cid, str)].pos) setPlayerStorageValue(cid, str, teleports[getPlayerStorageValue(cid, str)].newValue) return trueend Agradecimento ao membro @Poccnn, por me dar um toque para simplificar o script. -
tfs 1.0 Teleport com storage que muda a posição.
pergunta respondeu ao Elias Palermo de Danihcv em Scripts
local str = "storageTeleport" --storage que receberá os valores (para controlar o local para onde levará o player)local teleports = { --[valorDaStorage] = {pos = {POSIÇÃO-QUE-LEVARÁ,-CASO-TENHA-O-VALOR-NA-STORAGE}, newValue = NOVO-VALOR-QUE-A-STORAGE-RECEBERÁ}[1] = {pos = {x=1578, y=1687, z=7}, newValue = -1},[-1] = {pos = {x=1578, y=1687, z=7}, newValue = 1},}function onStepIn(cid, position) for v, t in pairs(teleports) do if getPlayerStorageValue(cid, str) == v then print("Chegou até aqui") doTeleportThing(cid, t.pos) setPlayerStorageValue(cid, str, t.newValue) else print("valor da storage: "..getPlayerStorageValue(cid, str)) end end return trueend @Elias Palermo, põe assim e vê o que aparece na distro. -
@edukf, vê se resolve: local SHOP_MSG_TYPE = MESSAGE_EVENT_ORANGElocal SQL_interval = 30function onThink(interval, lastExecution) local result_plr = db.getResult("SELECT * FROM z_ots_comunication WHERE `type` = 'login';") if(result_plr:getID() ~= -1) then while(true) do local id = tonumber(result_plr:getDataInt("id")) local action = tostring(result_plr:getDataString("action")) local delete = tonumber(result_plr:getDataInt("delete_it")) local cid = getCreatureByName(tostring(result_plr:getDataString("name"))) if isPlayer(cid) then local itemtogive_id = tonumber(result_plr:getDataInt("param1")) local itemtogive_count = tonumber(result_plr:getDataInt("param2")) local container_id = tonumber(result_plr:getDataInt("param3")) local container_count = tonumber(result_plr:getDataInt("param4")) local add_item_type = tostring(result_plr:getDataString("param5")) local add_item_name = getItemNameById(tonumber(result_plr:getDataInt("param1"))) local add_item_count = tostring(result_plr:getDataInt("param2")) local received_item = 0 local full_weight = 0 if add_item_type == 'container' then container_weight = getItemWeightById(container_id, 1) if isItemRune(itemtogive_id) == TRUE then items_weight = container_count * getItemWeightById(itemtogive_id, 1) else items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count) end full_weight = items_weight + container_weight else full_weight = getItemWeightById(itemtogive_id, itemtogive_count) if isItemRune(itemtogive_id) == TRUE then full_weight = getItemWeightById(itemtogive_id, 1) else full_weight = getItemWeightById(itemtogive_id, itemtogive_count) end end local free_cap = getPlayerFreeCap(cid) if full_weight <= free_cap then if add_item_type == 'container' then local new_container = doCreateItemEx(container_id, 1) local iter = 0 local dado = 0 while iter ~= container_count do if itemtogive_count > 100 then while itemtogive_count > 100 do doAddContainerItem(new_container, itemtogive_id, 100) iter = iter + 1 dado=dado+100 end doAddContainerItem(new_container, itemtogive_id, (itemtogive_count - dado)) iter = iter + 1 end end received_item = doPlayerAddItemEx(cid, new_container) else local new_item = doCreateItemEx(itemtogive_id, itemtogive_count) doItemSetAttribute(new_item, "description", "This item can only be used by the player ".. getPlayerName(cid) .."!") doItemSetAttribute(new_item, "aid", getPlayerGUID(cid)+10000) received_item = doPlayerAddItemEx(cid, new_item) end if received_item == RETURNVALUE_NOERROR then doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'Você recebeu >> '.. add_item_count ..' '.. add_item_name ..' << do Hospice shop.') db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";") db.query("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";") else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_count ..' '.. add_item_name ..' << from Hospice shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.') end else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_count ..' '.. add_item_name ..' << from Hospice shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.') end end if not(result_plr:next()) then break end end result_plr:free() end return trueend
-
tfs 1.0 Teleport com storage que muda a posição.
pergunta respondeu ao Elias Palermo de Danihcv em Scripts
@Elias Palermo, essa quantidade de posições vc pode alterar. Botar quantas quiser. Mas agora que vc disse que só existem 2 possibilidades (ter ou não) a tabela ficaria assim: local teleports = { --[valorDaStorage] = {pos = {POSIÇÃO-QUE-LEVARÁ,-CASO-TENHA-O-VALOR-NA-STORAGE}, newValue = NOVO-VALOR-QUE-A-STORAGE-RECEBERÁ}[-1] = {pos = {x=1578, y=1687, z=7}, newValue = 1},[1] = {pos = {x=1578, y=1687, z=7}, newValue = -1},} *explicação: quando uma pessoa não possui uma storage X, aí no script usa-se a função getPlayerStorageValue aí o resultado é o valor -1 (então por padrão o valor -1 em uma storage significa que o player não tem ela, basicamente). E aí o valor 1 (que eu coloquei na tabela acima) significa que o player tem a storage e seu valor é 1. Situação-exemplo-prático: Um player P pisa no teleport pela primeira vez, ele será teleportado para a posição presente na tabela dessa linha: [-1] = {pos = {x=1578, y=1687, z=7}, newValue = 1}, *pois como o player não tem a storage, o valor dela no player é -1. Aí dps que o player for teleportado, ele receberá o valor (newValue) contido na linha, que no caso será 1. Então, ao pisar uma segunda vez no teleport, o valor atual da sua storage será 1 (newValue da linha mencionada acima). Aí o player será teleportado para a posição da linha respectiva: [1] = {pos = {x=1578, y=1687, z=7}, newValue = -1}, *e aí dps de ser teleportado para essa posição, a storage receberá o valor presente em newValue dessa linha, que no caso será -1. E aí inicia-se o loop. Se vc ñ quiser que essa loop ocorra, basta colocar um newValue que não tenha linha correspondente na tabela (como 2, por exemplo, ou mesmo 100, 50, 39, 897, etc) -
tfs 1.0 Teleport com storage que muda a posição.
pergunta respondeu ao Elias Palermo de Danihcv em Scripts
@Elias Palermo, se eu entendi direito, acho q isso deve ser o que vc quer: Vá em data\movements e adicione essa tag ao arquivo movements.xml: <movevent type="StepIn" actionid="ACTION-ID-DO-TP" event="script" value="teleportstorage.lua" /> Agora vá na pasta data\movements\scripts e crie um arquivo chamado teleportstorage.lua e coloque isso dentro: local str = "storageTeleport" --storage que receberá os valores (para controlar o local para onde levará o player)local teleports = { --[valorDaStorage] = {pos = {POSIÇÃO-QUE-LEVARÁ,-CASO-TENHA-O-VALOR-NA-STORAGE}, newValue = NOVO-VALOR-QUE-A-STORAGE-RECEBERÁ}[1] = {pos = {x=1578, y=1687, z=7}, newValue = 2},[2] = {pos = {x=1578, y=1687, z=7}, newValue = 3},[3] = {pos = {x=1578, y=1687, z=7}, newValue = 1},}function onStepIn(cid, item, pos) for v, t in pairs(teleports) do if getPlayerStorageValue(cid, str) == v then doTeleportThing(cid, t.pos) setPlayerStorageValue(cid, str, t.newValue) end end return trueend Caso não tenha entendido como funciona essa tabela/script me diz o que vc não entendeu exatamente q eu tento explicar. -
Tenta usar esse shop.lua: local SHOP_MSG_TYPE = MESSAGE_EVENT_ORANGElocal SQL_interval = 30function onThink(interval, lastExecution) local result_plr = db.getResult("SELECT * FROM z_ots_comunication WHERE `type` = 'login';") if(result_plr:getID() ~= -1) then while(true) do local id = tonumber(result_plr:getDataInt("id")) local action = tostring(result_plr:getDataString("action")) local delete = tonumber(result_plr:getDataInt("delete_it")) local cid = getCreatureByName(tostring(result_plr:getDataString("name"))) if isPlayer(cid) then local itemtogive_id = tonumber(result_plr:getDataInt("param1")) local itemtogive_count = tonumber(result_plr:getDataInt("param2")) local container_id = tonumber(result_plr:getDataInt("param3")) local container_count = tonumber(result_plr:getDataInt("param4")) local add_item_type = tostring(result_plr:getDataString("param5")) local add_item_name = getItemNameById(tonumber(result_plr:getDataInt("param1"))) local add_item_count = tostring(result_plr:getDataInt("param2")) local received_item = 0 local full_weight = 0 if add_item_type == 'container' then container_weight = getItemWeightById(container_id, 1) if isItemRune(itemtogive_id) == TRUE then items_weight = container_count * getItemWeightById(itemtogive_id, 1) else items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count) end full_weight = items_weight + container_weight else full_weight = getItemWeightById(itemtogive_id, itemtogive_count) if isItemRune(itemtogive_id) == TRUE then full_weight = getItemWeightById(itemtogive_id, 1) else full_weight = getItemWeightById(itemtogive_id, itemtogive_count) end end local free_cap = getPlayerFreeCap(cid) if full_weight <= free_cap then if add_item_type == 'container' then local new_container = doCreateItemEx(container_id, 1) local iter = 0 while iter ~= container_count do doAddContainerItem(new_container, itemtogive_id, itemtogive_count) iter = iter + 1 end received_item = doPlayerAddItemEx(cid, new_container) else local new_item = doCreateItemEx(itemtogive_id, itemtogive_count) doItemSetAttribute(new_item, "description", "This item can only be used by the player ".. getPlayerName(cid) .."!") doItemSetAttribute(new_item, "aid", getPlayerGUID(cid)+10000) received_item = doPlayerAddItemEx(cid, new_item) end if received_item == RETURNVALUE_NOERROR then doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'Você recebeu >> '.. add_item_count ..' '.. add_item_name ..' << do Hospice shop.') db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";") db.query("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";") else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_count ..' '.. add_item_name ..' << from Hospice shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.') end else doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_count ..' '.. add_item_name ..' << from Hospice shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.') end end if not(result_plr:next()) then break end end result_plr:free() end return trueend
-
Temos que identificar o local que está ocasionando o erro. Faz assim: vai no shop do site, compra o item, manda pra um player X, MAS não logue o player X (deixe ele off o tempo todo durante esse teste). Aí dps que vc fizer a compra pelo site, as especificações da compra (item, qntd, etc) serão armazenadas na tabela z_ots_comunication (dentro da data base, obvio), aí dps que a compra tiver sido feita vá nessa tabela e veja quais foram os valores armazenados (atente-se para a coluna param2, veja qual o valor que está armazenado nela e mande esse resultado aqui).
-
Este tópico foi movido para Tutoriais e Suporte - Tutoriais de Scripting - Suporte Scripting
-
Este tópico foi movido para Tutoriais e Suporte - Tutoriais de Scripting - Suporte Scripting
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.