
Tudo que xWhiteWolf postou
-
(Resolvido)Modificação de script
você verificou se existe no seu xml uma spell com esse nome? Tumb Earth usa o spell name e não as words.
-
TOWN ID MUDA QUANDO CHAR MORRE
Verifica pelo banco de dados ou em algum script qual é a town dos chares recém criados, se realmente for 1 então temos um problema. Se não: cria um TP em algum lugar do mapa que faz vc virar cidadão dessa cidade em questão, muda a posição dos chares criados para a posição do tp. É o que eu faria já que não mexo com XAMPP. Porque provavelmente ele não tá setando direito a town.
- Magnus Task System 1.2
- [TFS 1.3 10.98] ALUNIA 2020 - Styller Custom
-
Magnus Task System 1.2
sim, é exatamente isso. Passar as tasks pro site é um trampo considerável visto que são umas 47 tasks ao todo, aí eu criei essa talkaction que gera o html pronto pra tu copiar e colar na aba do site referente as tasks. Prum usuário comum provavelmente nao vai fazer nenhuma diferença, mas se tiver algum webmaster q tenha noçãozinha ele consegue importar mt fácil esse arquivo.
- Magnus Challenger
-
Magnus Task System 1.2
Fala galera, pra quem não sabe eu fiz um novo task system pro meu servidor pessoal Empire e por isso decidi publicar a versão antiga dele já que não temos nenhuma intenção de usá-la mais. ele é muito similar a um sistema que eu já havia compartilhado aqui, só que pras versões 0.X. O que é: um npc que te dá pequenas missões de matar monstros, qnd você terminar ele te paga uma recompensa pré definida. O que ele tem de melhor comparado com a versão 0.4: Basicamente ele permite vc definir qualquer hierarquia entre as tasks, permite que tasks deem diversas formas de recompensas (isso era bem engessado no modelo antigo) porém ele não aceita tasks de coletar itens, nem tem dificuldades diferentes com premiações multiplicadas (ao menos não explicitamente). Aqui tá a hierarquia que ele segue atualmente. Ou seja, para fazer task de Tarantula você precisa fazer Rat, depois Spider e por fim Tarantula. O sistema é muito completo e eu vou postá-lo da exata forma que usávamos então prestem bastante atenção nos detalhes. Já aviso de antemão que eu não darei muito suporte aqui e que não irei explicar muita coisa, o sistema funciona e foi usado por uns 2 anos sem nenhum problema com o tfs original. crie um arquivo em data/lib chamado tasklib.lua e coloque isso dentro dele: Aqui temos todas as tasks e storages. Se você quiser adicionar recompensas novas vc só precisa fazer um elseif na função de getRewards. Siga o exemplo dos comentários para as rewards e se quiser todas as tasks liberadas sem precisar seguir uma ordem é só colocar needed = 0 para todas. Agora crie um arquivo em creaturescripts/scripts chamado killtasksystem.lua e coloque isso dentro dele: Tirando as mensagens, não acho que tenha nada que você possa editar aqui. Essa tabela racetypes eu coloquei pq queria fazer task de criaturas de um mesmo tipo: fire, undead, poison. Ele puxa esse valor de dentro do race definido no xml do monstro. (Veja a undead monsters como exemplo.) em creaturescripts.xml coloque: <event type="kill" name="tasksystem" script="killtasksystem.lua"/> E em creaturescripts/scripts/login.lua antes do ultimo return true: player:registerEvent("tasksystem") Agora criaremos o npc chamado tasksystem.xml na pasta data/npcs: E o script dele em data/npcs/scripts chamado tasksystem.lua: (sim, eu não sou criativo com nomes) Por fim insira essa talkaction aqui no seu server, ela serve para gerar um arquivo chamado orderedtask.html na pasta do seu servidor (a mesma do executavel) com o código html do sistema de task (sim, eu tenho preguiça de escrever as coisas no site) Coloque o nome que vc quiser e depois coloque a tag em talkactions.xml: <talkaction words="/generatehtml" script="nome que vc quiser.lua" /> Note que o arquivo pode levar um tempinho para aparecer, até pq ele tá percorrendo toda a tabela pegando todas as informações e criando um arquivo html disso, é um processo que pode levar alguns segundos. Se você quiser ser hackudo e pegar o html direto do meu site, seja livre: https://www.empirebr.com/tasks Bom uso, se tiver qualquer dúvida ou comentário ou sugestão diz aí.
-
[TFS 1.3 10.98] ALUNIA 2020 - Styller Custom
Em events existe um evento chamado onBrowseField, lá se não me engano dá para checar se há esse item em cima e retornar falso pro browsefield. Se não der, eu tenho certeza que na source dá. E se nao me engano tb tem uns 3 ids desse brilho então coloquem todos :D O mesmo vale para umas pedrinhas que algumas pessoas colocam com o mesmo propósito @luanluciano93, pro marriage system eu te recomendo fortemente a usar o do godely, talvez só tenha que fazer pequenas alterações pro tfs 1.3 mas é o mais bem feitinho q ja encontrei até agora /threads/tfs-1-0-marriage-system.206206/ sem falar q é O GODELY.
-
Gran Castle Event (8.54+)
--// Favor não mexer daqui para baixo se não souber oque está fazendo!!! GRANTOWER.EMPTYWINNER = "# [Nobody] #" GRANTOWER.PREPARE = 201405051746 GRANTOWER.RUNNING = 201405051747 GRANTOWER.AURA = 201405052018 GRANTOWER.DESTROYCOUNT = 201405051800 GRANTOWER.FINALWINNER = 201405051805 GRANTOWER.SAVELASTWINNER = 201405061333 GRANTOWER.SAVEWINNERGUILDID = 201405061403 esses são os storages. Agora resta saber pq está nascendo vários. Você configurou tudo certinho? Pelo q eu sei, qnd ele morre o monstro renasce (mas sempre só fica 1 dele no jogo) e as pessoas só ficam com a aura se tiverem participado do evento e matado (a guild inteira fica). No final do tempo, quem matou por ultimo mantem a aura
-
Sobre o Comércio
Votei sim mas concordo com o Daniel. Vocês estão se afastando muito do objetivo do fórum. Eu tenho 0 visibilidade de muitas areas do fórum justamente pq tá tudo muito segmentado e as coisas que realmente eram para serem segmentadas estão todas juntas. To a anos aqui e pelo menos da parte de scripting acredito q eu seja o que tem maior experiencia/contato com as seções. Além disso eu devo ser um dos usuários que tem maior interação com a comunidade (principalmente via PM). Em nenhum momento vieram me perguntar o que poderia ser melhorado ou como eu acharia melhor as coisas ficarem organizadas. Quando eu fiz parte da equipe, me frustrei profundamente com a arrogância e falta de profissionalismo: lembrem que isso é um forum de tibia, um jogo praticamente morto. Você não é ninguém por estar aqui e muito menos por ter um cargo (muito pelo contrário, há grandes chances de você ser um merda por ainda apostar nisso). Para melhorar o forum, desçam do pedestal, peçam por mais feedback e principalmente sugestões de quem realmente usa o fórum. Se for para mexer nele só quando é cômodo é mais fácil admitir que jogou a toalha, e se vocês realmente jogaram a toalha pro TK, deem um aviso prévio pro povo salvar o conteúdo do site e fechem. No mais, acho que tem muitas features que se tornaram completamente inúteis (alo alo conquistas, postar no perfil e outras) e acho que se vocês não tão conseguindo gerenciar o que já existe não tem pq apostar em mais coisa que vai ficar ao relento.
-
(Resolvido)para que serve actionid ?
o que o daniel falou está corretíssimo, actionid é para linkar com scripts através desse numero único. Você faz um script e coloca ele sob o registro de um actionid ou uniqueid e aí vc pode colocar em algum objeto do mapa. Actionid pode repetir, unique id não. Se você quer por ex fazer uma quest que só pode ser feita 1x, vc vai usar uniqueid pq só vai ter 1 baú no jogo com aquele valor. Se você quer fazer um script q andando em certos tiles do map tem uma chance de sumonar um monstro, vc vai usar actionid.
- Mining System
-
Sistema de Reset 100%
a resposta é bem simples: vc vai precisar de uma tabela estilo essa aqui: local itemsneeded = { [reset] = {item, quantidade}, } pra cada valor q reset pode assumir. Você também pode fazer ranges de reset, se for maior que X e menor que Y então é tal item. Por fim você pode fazer mais de um item, por ex, 3 minotaur leather e 50 gold coins. Dependendo da forma q vc escolher o resto do código fica diferente
-
(Resolvido)Tirar Simbolo % do Script
- Sistema de Reset 100%
- Mudar Skills Do Items.XML
as tags que vc pode usar no items.xml são as tags que existem na source. Um dos objetivos do tfs é melhorar a forma com que essas atributos são criados (e fazer novos) mas ngm fez isso ainda, é uma tarefa pendente já a alguns anos que inclusive tem uma recompensa de 100 dólares https://github.com/otland/forgottenserver/issues/998 Além disso você precisa modificar na source tb para você ler aqueles atributos, que é o caso do defense que só é lido pelo item shield ou ataque que só é lido pelos items do tipo weapon.- OTserver da lucro?
Sim e não, Otserver dá muito dinheiro, mas o tempo que demora pra você ter lucro simplesmente não compensa, a menos que você ame o que você tá fazendo. Um host é relativamente barato e é o único gasto que você vai ter quando tudo estiver pronto (e propagandas), o que ninguém te conta é o caminho até isso acontecer. 1- Se você tiver uma equipe, você vai ter que dividir grande parte dos ganhos 2- Se vc não tiver, bem, vai acabar saindo mais caro pq cada probleminha que você tiver vai ter que pagar alguem pra resolver, sem falar que se você não manjar, vc não vai ter nenhuma segurança sobre a qualidade do serviço que cada um está fazendo (principalmente pra scripting) 3- Se você realmente for querer inovar e fazer bem feito, vai levar uns bons anos pro seu projeto sair, todo esse tempo você vai ter que arcar com os gastos sem receber nada por isso e a equipe pode mudar muitas vezes, vc vai correr risco de alguém vender partes (ou todo seu projeto) ou até você mesmo acabar desistindo pela demora e pelo trabalho. 4- Após tudo isso, você vai ter um jogo 'relativamente pronto' é hora de começar os testes e descobrir se vai agradar o publico ou não. 4.1 - Se agradar, colete os feedbacks do que poderia melhorar, faça um panorama do que é critica válida e do que é choro e arrume as coisas, serão mais algumas semanas ou meses pra finalizar. 4.2 se não agradar vc tem um grande problema nas mãos, pq vc vai estar de volta no passo 2. 5- Considerando tudo isso, agora você precisa investir MUITO HARD em marketing. O grande pico da maioria dos otservers é no inicio, se seu servidor não bater 300 na primeira semana, tenho uma má notícia pra você... a chance de você conseguir conquistar mais público depois é MUITO pequena. 6- Chegou a data do lançamento, você precisa coordenar e coletar feedbacks, precisa ter muita gente para auxiliar os jogadores e resolver imediatamente quaisquer problemas. Vai ter muitas reclamações e muita gente falando ao mesmo tempo, essa é a parte em que geralmente as pessoas começam a surtar e pensar em abandonar o projeto. Tenha canais e pessoal suficiente para atender todos os jogadores, do contrário as pessoas vão desistir muito rápido. 6.5- Esteja preparado para inveja, ataques e bugs: isso é uma certeza absoluta no mundo de otserver. As pessoas vão achar bugs, explorar eles seja para lucro pessoal ou para acabar com seu jogo, você precisa ter maturidade suficiente para saber lidar com isso da melhor maneira possível. Ter uma boa equipe de prontidão é essencial aqui, principalmente se for um erro desconhecido. No meu servidor eu tive 4 problemas que foram 'críticos', o primeiro foi um GM que editou o mapa para colocar vários bags espalhados e escondidos no mapa com dinheiro e itens para ajudar os amigos dele (e a si próprio); O segundo foi um baú de potions que havia na cidade onde as pessoas ficavam criando infinitas contas para acumular e vender potions; o terceiro foi um crash na source que até hoje a gente não sabe porque ocorre (fizemos trace com o gdb e achamos a linha que ele ocorre, tentamos resolver e nada); um bug nas houses que fez muita gente perder a house (as vezes com todos os itens dentro). O tfs oficial tem muitos issues conhecidos que as pessoas corrigem e não contam pra ngm como, também tem muitos issues desconhecidos que ninguém reportou pra poder ficar derrubando o jogo alheio. Se previna e se prepare pro pior, talvez tenha até que desembolsar dinheiro para pagar alguém pra resolver. 7- Depois da primeiras semana, você precisa usar todo o dinheiro que você conseguir para dar a tacada final e investir pesado em marketing. Essa provavelmente vai ser a hora de você desembolsar alguns mils e pegar propaganda em youtube, facebook, otlists, foruns. O céu é o limite. 8- Quando finalmente você tiver feito tudo isso, tem duas possibilidades: seu servidor pode dar certo ou fracassar. Por mais que você tenha se esforçado ou esteja disposto a melhorar, fracassar é sempre uma possibilidade. Tente estar aberto pra essa opção e saiba a hora de admitir que fracassou mas sem desistir. Se der certo continue mantendo uma média de investimento em propagandas razoável mas não precisa ser nada muito absurdo. Grande parte da sua divulgação agora vai ser o boca-a-boca e sua própria posição na otservlist. Caso tudo falhe, não tenha medo de fechar o servidor e começar a corrigir tudo. Não tenha medo de atrasar mais alguns anos para garantir que tudo está perfeito e testar com diferentes públicos para ver se eles aprovam seu jogo. Lembre-se, um atraso é temporário, um jogo ruim é ruim para sempre. Essa é a sabedoria que eu deixo aqui, e que eu aprendi na marra com o Empire.- (Resolvido)Tirar Simbolo % do Script
tenho quase ctza q eu ja fiz isso pra um membro do fórum, só não sei dizer se foi por pm ou por um tópico. Dá uma procurada q se pá vc acha. O Mock faz uns códigos muito dificeis de ler e ele complica demais coisas simples basicamente ele adiciona a % e pega o level do item baseado num pattern matching. O problema é que você tem que saber quando o % representa '%' e quando ele representa um escape string, por ex: if n:match('%[(.+)%]') then o primeiro % serve para falar que queremos o caractere [, o segundo também. Nenhum desses você vai remover. Agora nesse caso aqui debaixo n:match('(.-)%.([+-])(%d+)%%') vc tá tentando dar match em algo q seja do formato 'qualquercoisa'.'+ ou -''um numero''%' o primeiro porcento é pra indicar escape string, ele está ali pra falar que nós queremos usar o ponto como o caractere ponto e não como uma instrução (o ponto significa qualquer coisa), o segundo % é pra indicar que queremos um %d+, que é um ou mais digitos, ou seja, ele vai retornar o maior numero de numeros consecutivos que encontrar, e os dois ultimos: o primeiro é pra mostrar que estamos querendo usar como escape string, o segundo representa o % de fato. Então se vc quiser q só tenha até o numero é só remover esses dois ultimos % do fim. Pro restante, tenha em mente que as receitas de padrões vão sempre procurar casar com o nome do item, se a % tá no final, vc só precisa apagar os % que estão no fim. Coloca pra ir printando os valores como eu fiz aqui https://repl.it/repls/InbornAuthenticRaven e aí vc vai ter uma ideia melhor do que ele ta retornando e oque vc pode e não pode remover.- Serialize/Unserialize Strings to Number
Pra quem quiser a versão como função: https://repl.it/repls/LongtermVioletTakin- (Resolvido)[PEDIDO] Spells Hiraishin Ni No Dan Seal e Hiraishin Ni No Dan
Ficou muito bom, meus parabéns amigo :D Só tem 1 coisinha: as funções de param de spells só funcionam em players então essa mensagem de playerOnly = "Voce so pode usar este jutsu em players.", nunca vai ser printada até onde eu sei. O mesmo vale para target em pz, a menos que a spell tivesse a tag agressive = "0", então vc podia excluir essa checagem e só colocar a tag na spells. Além disso, mesmo se ele executasse os prints, ele também ia executar o combat em ambos os casos pq vc não cancelou a spell após cair nesses casos em que ela não deveria ser castada, ele só não iria teleportar. else doSendMagicEffect(getPlayerPosition(cid), 2) doPlayerSendCancel(cid, errorMsg.pz) end else doSendMagicEffect(getPlayerPosition(cid), 2) doPlayerSendCancel(cid, errorMsg.playerOnly) end return doCombat(cid, combat, var) deveria ter um return false antes do end de cada else para você colocar o return doCombat sem checar nada no fim. Outra coisa é que o addEvent tá checando de 1 em 1 segundo, se vc usar a spell de teleportar pode ser q leve 1 segundo de delay até vc teleportar, isso pode ser mitigado se vc fazer o addEvent em 333 milisegundos e ai na função teleportisTrue vc faz pra só soltar a mensagem se for a terceira vez, ou algo assim. E faz o timeleft tb modificado. Garanto q isso iria melhorar enormemente a experiencia de soltar a magia. Essas são as minhas dicas, claro q vc não precisa aplicá-las aqui, mas é o que eu notei que poderia melhorar. Eu gostei muito da forma q vc pensou pra fazer teleportar sem precisar guardar nenhuma informação do player, eu to a tantos anos usando storage com nome do target salvo q eu confesso q fiquei um pouco engessado nessa ideia; Você pensou fora da caixa e conseguiu fazer o que vc se propôs a fazer. Meus parabéns!- Serialize/Unserialize Strings to Number
Fala rapeize, eu me propus um desafio de criar uma forma de transformar uma string em números que possam ser anexados no storage. Basicamente isso resolve o problema dos TFS anteriores de não conseguir salvar nomes de personagens no storage sem ter que fazer source editing. PS: É óbvio que é mais fácil fazer source editing, mas o desafio era esse e como não é todo mundo que tem source tb pode ser bastante útil. Eu não fechei o código certinho em funções, mas pretendo fazer em breve (agora preciso dormir) e aí eu edito o tópico aqui. Nos testes q eu fiz ele conseguiu serializar e deserializar 5 mil caracteres em 0,01 segundo o que provavelmente faz dele o melhor serializador do gênero xD Limitações: Ele só funciona com um range bem específico de strings, se vc quiser serializar qualquer outra coisa procure um serializador na internet. Ele é capaz de processar tudo que tá dentro do retangulo vermelho Ele só funciona com NO MÁXIMO +- 8k de caracteres, se vc quiser mais que isso vai precisar trocar a função table.concat e talvez umas outras coisinhas O que ele faz: Transforma qualquer texto num numero, divide esse número em espaços de 32 bits e nas posições da memória consecutivas (no exemplo eu to usando uma tabela, mas poderia ser num storage, por ex). Depois ele ainda é capaz de retornar a string original a partir do serial gerado. Funcionamento: por incrivel q pareça a lógica é bem simples, pega o código ascii de cada caractere da string, subtrai 21 para deixar o numero menor (21 é o máximo que a gente consegue encurtar pq 32 - 21 é 11 e 127 - 21 é 106, aí se eu lê-se 10 eu não saberia dizer se é o código do espaço ou dos 5 ultimos ali da tabela) Os storages são int_32 então o maior valor q eu consigo colocar dentro de um storage é 2^31 - 1, aí tudo q eu faço é ir pegando os 10 ultimos numeros e vendo se eles cabem dentro desse limite máximo, se não couber eu pego os 9 ultimos, até caber dentro do limite. Aí eu jogo pra tabela e contabilizo quantas vezes eu to fazendo isso (isso vai ser importante depois qnd formos inserir ou pegar do storage) Como eu já li os lines ultimos numeros da string, eu posso retirar eles e refazer o processo até não restar mais nada. No final dentro da tabela tb vc vai ter no i o numero q vc soma no storage e no v o valor que deve ir pro storage. Pra deserializar o processo é parecido, primeiro eu percorro a tabela concatenando os numeros na ordem inversa e depois vou vendo 2 a 2 se o numero é menor que 11 (nosso menor código ascii que representaria o espaço, lembrando que removemos 21 para encurtar). Se ele for menor então significa que estamos lidando com um dos ultimos numeros da tabela (10X), nesse caso temos que ler 3 numeros ao invés de só 2. Depois de passar tudo pra caractere e concatenar, nos é retornado a string inicial. Código: Quem quiser testar é só modificar a variável entrada pra qualquer texto que vc quiser e dar run. O resultado aparece na tela a direita. https://repl.it/repls/LongtermVioletTakin- [TFS 1.2] Offline Message
- Programação
Eu vou te fazer uma pergunta que pouquíssimas pessoas fazem: Pelo tempo e experiencia que eu tenho no fórum e na computação, a probabilidade maior é de que eu não tenha entendido ou que você não tenha entedido? Reflete um pouco sobre isso, e aí depois que você descobrir a resposta você re-lê meu primeiro comentário: Se chama Uniqueid justamente porque só há 1 instancia de um uniqueid no jogo. Se você coloca uniqueid em dois itens diferentes, o jogo vai ignorar o segundo e só vai ter o primeiro. O erro acusa exatamente isso, duplicata de uniqueid: 1 Seleciona um dos uniqueids mencionados 2- Procura no map editor os itens que tem esse uniqueid 3- Vai ter mais de um item com o valor de uniqueid (o ctrl + f no valor do uniqueid vai te mostrar exatamente quais são os itens) 4- Pega a posição desses itens 5- Vai dentro do jogo nessas posições 6- Note que dentro do jogo só um desses itens manteve o uniqueid. Agora que você entendeu o que eu quis dizer, você faz o que eu falei: Repete até o passo 3 e escolhe qual desses itens realmente devia ter o uniqueid da quest, os outros você pode remover pq de qualquer forma eles já não estão usando esse uniqueid.- (Resolvido)[PEDIDO] Critical System
roda o código do jeito q eu passei e me fala que valor que aparece no seu console (a tela q roda as coisas do seu server, o seu executavel do servidor). Deve ter uns números lá, me fala qual foi o maior q apareceu- Programação
cara vc não entendeu. Você só pode ter 1 item usando aquele uniqueid, do contrário qnd vc ligar o server ele vai considerar só o primeiro item q ele achar e os outros vão ficar sem uniqueid de qualquer forma
Informação Importante
Confirmação de Termo