Ir para conteúdo
Banner com Efeitos

Yamili

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Yamili recebeu reputação de Gabrielxxxxx em (Resolvido)Skill Rate/Velocidade para upar skill   
    @BangxD
    Quando treinamos uma skill (fist, axe, sword...) os níveis mais baixos dela (do nível 1 ao 2, 3, 4, 5) sempre é muito fácil de upar.
    Mesmo com skill rate em 1x e o multiplier do vocations em 1.0 ainda era "fácil" (rápido) demais para o que eu queria.
    Exemplo para contexto (Só para contexto)
    Ao treinar a sword skill do nível 0 ao 1, você demoraria alguns segundos para chegar ao nível 1 (Isso se não upar rapidamente do 0 ao 9,10,11 e tals).

    Com essa alteração que eu fiz, para upar uma skill nos níveis mais baixos fica bem difícil (depende do quanto de dificuldade você quer).
    Na parte que eu editei no tópico também tem uma breve explicação minha.
    Mas se tu não entendeu essa parte vou dar outros exemplos abaixo.

    - Fórmula - (da source)
    (skillBase[skill] * std::pow(skillMultipliers[skill], (level - 11)));
    - Valores de testes, o máximo que consegui dificultar sem alterar na source -
    Com o skill rate (que você configura no config.lua) em 1x
    Multipliers de sword (que você configura no vocations.xml) em 1.0
    O baseskill (que é configurado na source, se não me falha a memória é em vocation.cpp) em 50
    E (level - 11) como padrão

    ! Com a sword skill no nível 1 !
    A cada 1 hit que eu dou em um monstro/player com uma sword, eu vou upar 2% da barra de sword skill.

    Então ao alterar o baseskill de 50 para -> 100 
    A cada 1 hit que eu dou em um monstro/player com uma sword, eu vou upar 1% (Ou 1,5%) da barra de sword skill. 

    Ou seja, alterando o baseskill eu consigo dificultar para upar a skill em níveis baixos.
    A cada +50 de skill base = [ -0,5% para upar a skill ao dar um hit ]

    - Valores atuais no meu servidor - 
    Skill rate: 1x (config.lua)
    Multipliers: 1.0
    Baseskill: 4000

    vocation.cpp  (baseskill)


    vocation.xml (multipliers)



    Se ainda estiver com dúvidas pode me perguntar.
    Perdão a demora para responder. 
    C ya!
     
     
  2. Gostei
    Yamili recebeu reputação de Gabrielxxxxx em (Resolvido)Skill Rate/Velocidade para upar skill   
    Qual servidor ou website você utiliza como base?
    TFS 0.4 8.60

    Olá a todos, eu gostaria de deixar bem (bastante) difícil para os jogadores uparem as skills (Do fist ao shield) nos valores mais baixos (Do 0 ao 25), o que ocorre é que não consigo deixar mais difícil de upar do que alguns segundos (Uns 2% da barrinha de skill a cada hit) para upar 1 skill level (Nos valores mais baixos, como upar do skill level 1 para o 2).

    Tem alguma forma de dificultar (mais ainda) a velocidade de up da skill nos valores mais baixos?
     
    Informações extras:
    Eu testei de várias formas e percebi que o mínimo de rate skill que dá pra colocar é 1x (Seja no config.lua ou em script de skills por stages).
    No vocations.xml do meu servidor a linha:
    <skill fist="1.5" club="1.5" sword="1.5" axe="1.5" distance="1.5" shielding="1.5" fishing="1.5" experience="2.0"/> Que serve para definir a velocidade com que a skill vai upar tem o valor minimo de "1.0", abaixo disso não upa (No meu servidor quanto menor o número, menor a velocidade que vai upar a skill).
    Tendo isso em mente eu testei com rate skill 1x no config e com skill fist="1.0" na tag das vocations (Que foi o mais lento que consegui colocar para upar nos níveis mais baixos das skills) mas ainda assim não é lento o suficiente para mim.
    O script de stages que eu estava usando para alguns testes era o:
    Eu reparei que esse script pega o valor do skill rate definido no config.lua e multiplica pelo valor definido no script, e como no magic level dá pra colocar valores como 0.3x (deixando assim extremamente difícil de upar) eu tentei fazer o mesmo com as skills e não tive sucesso.
    Nesse script dá para colocar um limite de skill level (Que vai setar a rate skill para 0x) e reparei que quanto mais perto de chegar no limite, mais difícil de upar fica (Do modo que eu quero para os valores baixos).

    Minhas dúvidas: 
    É possível ajustar esse script para fazer a velocidade do up ser sempre igual a velocidade de quando está chegando no limite de skill? (Se é que esta diminuição está sendo aplicada por este script)
    Qual a função que faz essa velocidade diminuir perto do limite de skill? (O que está fazendo ela diminuir?)
    É possível de alguma forma abaixar o rate de skills para 0.X?
    É possível dificultar, extremamente, para upar as skills nos valores mais baixos? (Seja por script ou pela source)

    Ps: 
    Sou bem leigo se tratando de scripts e tals, então me desculpem se não consegui me expressar bem.
    Perdão se eu não estiver na área correta, não estou acostumado com fóruns ainda.

    Obrigado a todos que tentarem me ajudar, peço perdão pelo texto enorme ? é justamente para evitar algumas dúvidas sobre o que eu estou tentando fazer.
    Caso ainda tenham dúvidas sobre algo que eu disse, me perguntem.
    E caso exista algum tópico sobre algo relacionado ao que eu quero, por favor, me mostrem. Não achei nada parecido sobre isso ?

    ! :EDIT: ! - :!Duvida solucionada!:
    Como o @Naze me guiou ao caminho de onde fica a formula na source, eu resolvi fazer alguns testes para entender melhor como funcionava.
    A formula é: 
    (skillBase[skill] * std::pow(skillMultipliers[skill], (level - 11))); E entendi que é baseskill × multiplier do vocations ^(level da skill - 11), com os valores do meus servidor ficariam:
    50 x 1.0 ^ (level - 11) (Onde com rate skill 1x cada hit upava cerca de 2% da barra de skill, o que me levou a crer que eram os hits necessário para upar)
    Então eu resolvi testar essa baseskill e aumentei para 100, o que resultou em 1% da barra por hit. (Que no caso a cada +50 de skill base = [ -0,5% para upar a skill ao dar um hit])

    E seguindo isso consigo ajustar certinho a dificuldade que quero para upar skill.
    Se essa alteração na baseskill pode acarretar em algum problema me avisem, por favor (Pois não entendo muito de programação).
    Mas caso não acarrete em nenhum problema, funcionou perfeitamente para o que eu queria então.
    Para quem quer fazer o mesmo (Dificultar para upar a skill nos níveis mais baixos [como do skill level 0 ao 1]) está ai.
    Duvida encerrada! Rep++ @Naze Por me ajudar ^-^ ajudou muito mesmo, de coração, agradeço.  
     
  3. Gostei
    Yamili deu reputação a FeeTads em Correções gesior/myacc + configurações + proteções (ddos?)   
    Salve rapaziada do  TK e da comunidade de tibia Otserv.

    Recentemente alguns invejosos estão atacando servidores (DDoS), bugando o guilds de varios sites (tirando o lider e membros), assim buga a guild e muita coisa no OT.
    Eles vão até o teu servidor e se passam por "adm do deletebra", já ouvi a uns tempos algumas pessoas falando disso, mas como eu tinha contato isso caiu por terra facilmente, um deles foi o ADM brendo, dono do antigo strongerFusion, onde ele me contou toda essa história, essa foi a primeira vez que me foi relatado sobre isso, hoje vejo que está parecendo ser mais frequente.

    Caso qualquer pessoa entre no seu OT se passando pelo ADM do deletebra, favor entrar em contato comigo via discord: FeeTads#0246 Te ajudarei a resolver problemas que eles exploram sem cobrar nada por isso, para provar que não necessito atacar outros OT's para ter algum publico. Já tenho em mente quem pode ser essas pessoas, caso alguém tenha numero de telefone, nome real, ou alguma informação a mais dessas pessoas atacando e se passando por mim ou meu sócio, favor enviar no discord, irei atrás de resolver isso.

    Vou deixar aqui alguns tutoriais de coisas básicas para você conseguir proteger o seu site desses SQL injections, e mais algumas coisinhas, caso futuramente eu resolva outros bugs explorados, vou postar aqui as correções.


    Configurando CloudFlare (SSL) E subDominio (sv.seuIP)
     
    Após isso para que a pessoa não entre no site pelo (sv.seudominio.com.br) 
    abra o index.php da pasta raiz (está dentro da pasta html)
     
    if($_SERVER['HTTP_HOST'] == 'sv.seuDominio.com.br') { header("Location: https://seuDominio.com.br"); } if($_SERVER['HTTP_HOST'] == 'IP NUMÉRICO') { header("Location: https://seuDominio.com.br"); }
    Isso fará que quando a pessoa tente entrar no seu site usando meios não seguros (DNS only) ele redirecione pro seguro > proxiado pela cloudflare

    _________________________________________________________________________________________________________________________________________


    CORREÇÃO GUILDS.PHP / INJECTION SQL TIRANDO LIDER DA GUILD
     

    PROTEÇÕES PARA DIMINUIR EFEITOS DE DDoS
     
     
     
    Espero que isso ajude a muitos, a se prevenir de pessoas que tentam atacar OT's se passando por outros, ou até que vão la pedir pontos para jogar se não eles irão atacar, se prevenir de pessoas mal intencionadas.

    PS: Caso você tenha no seu site a pagine "house" e "tickets" recomendo retirar do seu site, pois há maneira de injetar SQL por esses arquivos.
    Vou postar em breve o tickets arrumado.

    Boa sorte rapaziada, se cuidem, e caso alguém faça isso, por favor entre em contato comigo.
     
     
     
     
  4. Gostei
    Yamili deu reputação a Gengo em [OTClient] Sistema de Dialogo Otpokemon   
    [OTClient] Sistema de Dialogo Otpokemon
     
    Venho através desse tópico contribuir para a comunidade, um simples modulo de dialogo no estilo do Otpokemon,
    não é um sistema de dialogo avançado é algo simples que deixa seu servidor intuitivo.
     
    1) Faça o download do modulo no qual se encontra no final do tópico e abrindo a pasta do seu client,, extraia e coloque o modulo na pasta modules.
     
    2) O módulo utiliza uma função chamada switch que não é comum ter no otclient, porem podemos colocar sem muito esforço, na pasta do otclient abra o arquivo util.lua que se encontra em modules/corelib/ e no final do arquivo coloque o seguinte código:
     
    Feito o passo 1 e 2, vamos para a parte do servidor.
     
    1) Crie um arquivo na pasta data/lib/ podendo ter o nome de npcdialog_lib.lua e coloque o seguinte código:
     
    2) O arquivo que acabamos de criar utiliza uma função chamada table.serialize que não é comum ter nos servidores, para que funcione sem erros vamos adicionar, abra o arquivo 012-table.lua que fica na pasta do seu servidor em data/lib/ ou você pode criar o arquivo e adicionar o seguinte código:
     
     
    Feito todo esse procedimento, estarei disponibilizando um npc para que vocês possam ter uma noção de como utilizar esse sistema de dialogo.
     
    1) Crie um arquivo na pasta do servidor em data/npc/ chamado Gengo.xml e adicione o seguinte código:
     
    2) Crie um arquivo na pasta do servidor em data/npc/lib/ com o nome gengo.lua e adicione o seguinte código:
     
     
    O npc é algo simples, porem serve para que você possa ter uma noção de como utilizar as funções do npc.
     
    Demostrativo dentro do game:

     
    Arquivos para download e o scan:
  5. Curtir
    Eu usei as dll que gera a partir da compilação, joguei tudo na pasta e executei.
    Testei com outro TFS e parece mesmo ser as dll porém não sei qual, vou procurar aqui.
     
    #SOLUÇÃO
    Consegui resolver por outro fórum, aqui algumas soluções que encontrei:
     
    Meu tópico no outro fórum: aqui
     
    É importante usar o CMD para executar o seu '.exe', é bem fácil.
    Abra o CMD, coloque 'cd <destino do seu projeto>', logo após isso use '<seu executador>.exe' para iniciar.
     
    Problema com dummy:
    avoid name conflict from boost::variant Solução:
    https://github.com/otland/forgottenserver/pull/2678/files/f51321dde4e9a40f23d3df4269849154395a4326  
     
    Problema após compilar (tela preta ao executar):
    Vá em Propriedades do seu projeto -> Debugging -> Working Directory e mude para a pasta do seu projeto. Logo após isso edite as propriedades do projeto e alterne o Conjunto de Instruções Avançadas para SSE2.
    https://otland.net/threads/illegal-instruction-on-compilling.259997/#post-2514777  
    Vai compilar sem problemas.
  6. Obrigado
    Yamili deu reputação a Roy em DISCORD RPC - Para Tibia [New Update]   
    Bem eu não sei nem por onde começar já que. Acredito eu que faz uns 2 anos mais ou menos que não me envolvo com Tíbia então hoje vim trazer algo novo para todos nós.
     Bem o que è Discord RPC? Nada mais nada menos que, aquela janelinha que mostra qual jogo você está jogando no Discord. E ao passar o mouse em cima do úsuario você pode checar os detalhes.

     
    Bem o Tíbia em sí já tem o Discord RPC por padrão mas o que eu trouxe a vocês o Discord-RPC que você pode editar como você quiser.
    Por exemplo.
     

     
    Talvez seja uma contribuição bem clichê. Mas para aqueles que deseja que os players mostre para os outros que está jogando seu otserv é uma boa, que possa ajudar a divulgar também. Acredito eu. Enfim vamos lá.
     
    Bem primeiro de tudo você precisa criar sua aplicação no Discord.
    Vá até o site de Desenvolvimentos de Aplicações do Discord e crie o seu canal clicando em New Aplication.
     
    Após Criar seu canal com o nome do seu Otserv, Descrição e ter colocado sua logo ou sei lá. Seu Canal Está quase completo. (Lembrando que as imagens precisam ser ou 512x512 ou 1024x1024)
    Vá até Rich Presence: Escolha sua logo e também clique em Add Image(s) e adicione uma imagem para sua Logo do Discord-RPC. Para quando o cara passar o mouse por cima do úsuario enxergar ela.
    Ok até aqui tudo OK. Só precisa aguardar o Discord carregar sua logo e enquanto isso vamos fazer o restante.
     
    Baixe a source do Discord-RPC.
    Tibia-RPC.rar
    https://drive.google.com/file/d/1N9oOlxEdMmPZbwPNFRNMXI4z86_v_AbL/view?usp=share_link
     
    Após baixar e abrir. Vá até o Discord.Cpp

     
    e vai aparecer assim pra você.
    Primeiro precisamos definir o ID do nosso Canal que criamos no Discord.
    Quando criamos o canal ele já nos da o ID do nosso canal. 
     

     
    Você cópia o ID e cola em cima do outro que está no Discord.CPP.
    Após isso vamos ver os detalhes.
     
    Em Rich Presence conseguimos visualizar a imagem que adicionamos Ok.
    Abaixo de Rich Presence tem o Art Assets que é onde adicionamos as imagens de logo e tal. Vamos em Visualizer Clicamos nele e então vamos editar nosso Dircord RPC da forma que desejarmos.

     
    Após Editar a direita veremos como ele vai ficar quando alguém passar o mouse em cima do úsuario.
     
    Vamos em Show Code e vemos como ficou o código nele. certo!

     
    bem de alguns não necessitamos necessáriamente a não ser que você queira adicionar mais alguma coisa. recomendo não mexer nessas linhas.
     
     
    DiscordRichPresence discordPresence; memset(&discordPresence, 0, sizeof(discordPresence)); discordPresence.startTimestamp = starttime; Discord_UpdatePresence(&discordPresence);  
    Tudo ok.
    Então vá até o Discord.cpp e edite-as como quiser. E vemos tudo lindo assim:

     
    Após isso só compilar e importar a dll no seu cliente tibia.
    Se você não tem nenhum importador de .dll eu vou disponibilizar pra você o link do Stud_PE
    Com ele você pode importa sua dll no seu cliente e ser feliz.
     
    Para importar a dll ao seu cliente, instale o Stud_PE no seu computador, após instalar. Abra.
    Importe o Tibia ou arraste o Tibia pra dentro do Stud_PE 
    Vá em Functions > Clique com o botão direito dentro da janela de Fuctions.

     
    Cliqu em Add New Import > Dll Select > Selecione a dll do Discord-RPC > Após isso Clique em > Select func. > Selecione a função > Após Clique em > Add to List e clique em ADD.
     

     
    Então só da Ok e abrir o seu Cliente.
     
    Bem eu vou mandar a versão que mostra o Nome e Level pra vocês assim:
     

     
    Essa versão mostra o Nome do personagem quando loga e o level. OBS: a dll faz um update de checagem a cada 5 segundos então precisa aguardar até seu nome aparecer.
     

     
    Em Discord.h você pode determinar o level máximo do seu servidor. fazendo cada linha por level.
     
    Você precisa procurar os endereços com o Cheat Engine.
    Se caso for procurar pelo Check Login pesquisa por 1 se o char estiver logado. E 0 quando estiver deslogado, vai procurando até encontar qual endereço muda quando logar e deslogar.
     
    Em questão do nome procura pro string e o nome do seu personagem. Na maioria das vezes é quase sempre o primeiro mas você pode mudar o nome no Cheat pra ter certeza.
    Em questão do Level Procura pelo valor do level por exemplo: 211, da um addskill pra level o level 212 e da um Next Scan na pesquisa com o valor novo pra ter certeza. e vai adicionando mais um pouco até ter a certeza.
    Supostamente eu encontrei na primeira pesquisa e só precisei upar 1 level mas vocês podem demorar um pouco.
    único coisa que não consegui identificar foi a vocação do personagem que eu queria muito mas com isso acho que já é o suficiente.
     
    Tibia-RPC N.L.rar✔️
    https://drive.google.com/file/d/1N9oOlxEdMmPZbwPNFRNMXI4z86_v_AbL/view?usp=share_link

    perdõe se eu não fui autoexplicativo e se postei na sessão errada. Corrijam-me se eu falei algo errado ou fiz algo de errado. Essa Source não fui eu quem criei.
    Eu usei o VS 2019. Qualquer dúvida por favor sinta-se a vontade.
     
    Meu obtjetivo é trazer algo novo pra comunidade e que possa ajudar outras pessoas.
    Esse lançamento pode ser inútil pra alguns mas para outros pode servidor de grande favor. Para aqueles que jogam usando Discord e tal.
     
     
     
  7. Obrigado
    Yamili deu reputação a MaTTch em Verificar se existe XX item naquela position   
    É porque a função getTileItemById não esta sendo usada corretamente nessa parte:
    if t1 and t2 and t3 and t4 then  
    Você precisa verificar se existe algum item checando se id ou o unique id é diferente de 0.
    Tipo assim:
    if t1.uid ~= 0 then doRemoveItem(t1.uid, 1) end  
    Você precisa fazer isso pra cada posição que quiser remover o item, e se quiser adicionar o efeito basta colocar junto a função doSendMagicEffect:
    if t1.uid ~= 0 then doRemoveItem(t1.uid, 1) doSendMagicEffect(config.pos1, 0000) end  
     
  8. Obrigado
    Yamili recebeu reputação de ashteroth em (Resolvido)Skill Rate/Velocidade para upar skill   
    Olha eu também não entendo muito, but, pelo que você mostrou ali o multiplier do distance está 1.5.
    Eu sei que alguns servidores quanto maior o multiplier, mais difícil fica de upar (no meu servidor é o contrario).
    Então testa abaixar ou aumentar o multiplier do distance até você ver uma diferença.
    Se precisar de mais ajuda, crie outro tópico específico para o seu problema ou me manda teu discord no PV que eu tento te ajudar
  9. Gostei
    Yamili recebeu reputação de XGaduX em (Resolvido)Skill Rate/Velocidade para upar skill   
    Qual servidor ou website você utiliza como base?
    TFS 0.4 8.60

    Olá a todos, eu gostaria de deixar bem (bastante) difícil para os jogadores uparem as skills (Do fist ao shield) nos valores mais baixos (Do 0 ao 25), o que ocorre é que não consigo deixar mais difícil de upar do que alguns segundos (Uns 2% da barrinha de skill a cada hit) para upar 1 skill level (Nos valores mais baixos, como upar do skill level 1 para o 2).

    Tem alguma forma de dificultar (mais ainda) a velocidade de up da skill nos valores mais baixos?
     
    Informações extras:
    Eu testei de várias formas e percebi que o mínimo de rate skill que dá pra colocar é 1x (Seja no config.lua ou em script de skills por stages).
    No vocations.xml do meu servidor a linha:
    <skill fist="1.5" club="1.5" sword="1.5" axe="1.5" distance="1.5" shielding="1.5" fishing="1.5" experience="2.0"/> Que serve para definir a velocidade com que a skill vai upar tem o valor minimo de "1.0", abaixo disso não upa (No meu servidor quanto menor o número, menor a velocidade que vai upar a skill).
    Tendo isso em mente eu testei com rate skill 1x no config e com skill fist="1.0" na tag das vocations (Que foi o mais lento que consegui colocar para upar nos níveis mais baixos das skills) mas ainda assim não é lento o suficiente para mim.
    O script de stages que eu estava usando para alguns testes era o:
    Eu reparei que esse script pega o valor do skill rate definido no config.lua e multiplica pelo valor definido no script, e como no magic level dá pra colocar valores como 0.3x (deixando assim extremamente difícil de upar) eu tentei fazer o mesmo com as skills e não tive sucesso.
    Nesse script dá para colocar um limite de skill level (Que vai setar a rate skill para 0x) e reparei que quanto mais perto de chegar no limite, mais difícil de upar fica (Do modo que eu quero para os valores baixos).

    Minhas dúvidas: 
    É possível ajustar esse script para fazer a velocidade do up ser sempre igual a velocidade de quando está chegando no limite de skill? (Se é que esta diminuição está sendo aplicada por este script)
    Qual a função que faz essa velocidade diminuir perto do limite de skill? (O que está fazendo ela diminuir?)
    É possível de alguma forma abaixar o rate de skills para 0.X?
    É possível dificultar, extremamente, para upar as skills nos valores mais baixos? (Seja por script ou pela source)

    Ps: 
    Sou bem leigo se tratando de scripts e tals, então me desculpem se não consegui me expressar bem.
    Perdão se eu não estiver na área correta, não estou acostumado com fóruns ainda.

    Obrigado a todos que tentarem me ajudar, peço perdão pelo texto enorme ? é justamente para evitar algumas dúvidas sobre o que eu estou tentando fazer.
    Caso ainda tenham dúvidas sobre algo que eu disse, me perguntem.
    E caso exista algum tópico sobre algo relacionado ao que eu quero, por favor, me mostrem. Não achei nada parecido sobre isso ?

    ! :EDIT: ! - :!Duvida solucionada!:
    Como o @Naze me guiou ao caminho de onde fica a formula na source, eu resolvi fazer alguns testes para entender melhor como funcionava.
    A formula é: 
    (skillBase[skill] * std::pow(skillMultipliers[skill], (level - 11))); E entendi que é baseskill × multiplier do vocations ^(level da skill - 11), com os valores do meus servidor ficariam:
    50 x 1.0 ^ (level - 11) (Onde com rate skill 1x cada hit upava cerca de 2% da barra de skill, o que me levou a crer que eram os hits necessário para upar)
    Então eu resolvi testar essa baseskill e aumentei para 100, o que resultou em 1% da barra por hit. (Que no caso a cada +50 de skill base = [ -0,5% para upar a skill ao dar um hit])

    E seguindo isso consigo ajustar certinho a dificuldade que quero para upar skill.
    Se essa alteração na baseskill pode acarretar em algum problema me avisem, por favor (Pois não entendo muito de programação).
    Mas caso não acarrete em nenhum problema, funcionou perfeitamente para o que eu queria então.
    Para quem quer fazer o mesmo (Dificultar para upar a skill nos níveis mais baixos [como do skill level 0 ao 1]) está ai.
    Duvida encerrada! Rep++ @Naze Por me ajudar ^-^ ajudou muito mesmo, de coração, agradeço.  
     
  10. Curtir
    Yamili deu reputação a leozincorsair em (Resolvido)Colocar posição de efeito nesse action   
    obrigado meu amigo
  11. Obrigado
    Yamili recebeu reputação de leozincorsair em (Resolvido)Colocar posição de efeito nesse action   
    Em:
    function efeitosAura(i,tm,cid)     if(isCreature(cid)) then             local atual = getCreaturePosition(cid) Muda para: 
    function efeitosAura(i,tm,cid)     if(isCreature(cid)) then             local atual = {x = getPlayerPosition(cid).x + 1, y = getPlayerPosition(cid).y + 0, z = getPlayerPosition(cid).z}  
  12. Gostei
    Yamili recebeu reputação de Cat em (Resolvido)Colocar posição de efeito nesse action   
    Em:
    function efeitosAura(i,tm,cid)     if(isCreature(cid)) then             local atual = getCreaturePosition(cid) Muda para: 
    function efeitosAura(i,tm,cid)     if(isCreature(cid)) then             local atual = {x = getPlayerPosition(cid).x + 1, y = getPlayerPosition(cid).y + 0, z = getPlayerPosition(cid).z}  
  13. Curtir
    Yamili deu reputação a BangxD em (Resolvido)Skill Rate/Velocidade para upar skill   
    Vlw tendi agora
  14. Curtir
    Yamili deu reputação a ilLusioN em Pack de sprites free   
    Bom eu sou novo aq no TK, e resolvi postar umas sprites "minhas" por conta de desavenças com 1 certo ADM não vou citar nomes nem nd, bom é isso.
     
    Caso as sprites tenham algum bug de posição, peço q me desculpem pois teve algumas q não testei.


    Scan: https://www.virustotal.com/gui/file/a3e38f7b19163c088bb8b4efc33b2bdc780e580f90f3308607f6fdd606288d43/detection
     
    Download: http://www.mediafire.com/file/tcsum7vaqzgwqg6/Packzinho+de+gratís.rar/file
     
    Bom uso !
     

  15. Obrigado
    Yamili deu reputação a Naze em (Resolvido)Spellbook com descrição   
    so to com tfs 1.3 então não posso testa, mas tenta ai e me fala oq da
    local desc = { ["exori flam"] = "Dano do tipo 'fire' no alvo.", ["exori vis"] = "Dano do tipo 'energy' no alvo.", ["exori ice"] = "Dano do tipo 'ice' no alvo." } function onUse(cid, item, fromPosition, itemEx, toPosition) local t = {} for i = 0, getPlayerInstantSpellCount(cid) - 1 do local spell = getPlayerInstantSpellInfo(cid, i) if(spell.level ~= 0) then if(spell.manapercent > 0) then spell.mana = spell.manapercent .. "%" end table.insert(t, spell) end end table.sort(t, function(a, b) return a.level < b.level end) local text, prevLevel = "", -1 for i, spell in ipairs(t) do local line = "" if(prevLevel ~= spell.level) then if(i ~= 1) then line = "\n" end line = line .. "Spells for Level " .. spell.level .. "\n" prevLevel = spell.level end local description = desc[spell.name] or "Sem descrição." text = text .. line .. " " .. spell.words .. " - " .. spell.name .. " = "..description.." : " .. spell.mana .. "\n" end doShowTextDialog(cid, item.itemid, text) return true end  
  16. Curtir
    Yamili recebeu reputação de Naze em (Resolvido)Skill Rate/Velocidade para upar skill   
    Qual servidor ou website você utiliza como base?
    TFS 0.4 8.60

    Olá a todos, eu gostaria de deixar bem (bastante) difícil para os jogadores uparem as skills (Do fist ao shield) nos valores mais baixos (Do 0 ao 25), o que ocorre é que não consigo deixar mais difícil de upar do que alguns segundos (Uns 2% da barrinha de skill a cada hit) para upar 1 skill level (Nos valores mais baixos, como upar do skill level 1 para o 2).

    Tem alguma forma de dificultar (mais ainda) a velocidade de up da skill nos valores mais baixos?
     
    Informações extras:
    Eu testei de várias formas e percebi que o mínimo de rate skill que dá pra colocar é 1x (Seja no config.lua ou em script de skills por stages).
    No vocations.xml do meu servidor a linha:
    <skill fist="1.5" club="1.5" sword="1.5" axe="1.5" distance="1.5" shielding="1.5" fishing="1.5" experience="2.0"/> Que serve para definir a velocidade com que a skill vai upar tem o valor minimo de "1.0", abaixo disso não upa (No meu servidor quanto menor o número, menor a velocidade que vai upar a skill).
    Tendo isso em mente eu testei com rate skill 1x no config e com skill fist="1.0" na tag das vocations (Que foi o mais lento que consegui colocar para upar nos níveis mais baixos das skills) mas ainda assim não é lento o suficiente para mim.
    O script de stages que eu estava usando para alguns testes era o:
    Eu reparei que esse script pega o valor do skill rate definido no config.lua e multiplica pelo valor definido no script, e como no magic level dá pra colocar valores como 0.3x (deixando assim extremamente difícil de upar) eu tentei fazer o mesmo com as skills e não tive sucesso.
    Nesse script dá para colocar um limite de skill level (Que vai setar a rate skill para 0x) e reparei que quanto mais perto de chegar no limite, mais difícil de upar fica (Do modo que eu quero para os valores baixos).

    Minhas dúvidas: 
    É possível ajustar esse script para fazer a velocidade do up ser sempre igual a velocidade de quando está chegando no limite de skill? (Se é que esta diminuição está sendo aplicada por este script)
    Qual a função que faz essa velocidade diminuir perto do limite de skill? (O que está fazendo ela diminuir?)
    É possível de alguma forma abaixar o rate de skills para 0.X?
    É possível dificultar, extremamente, para upar as skills nos valores mais baixos? (Seja por script ou pela source)

    Ps: 
    Sou bem leigo se tratando de scripts e tals, então me desculpem se não consegui me expressar bem.
    Perdão se eu não estiver na área correta, não estou acostumado com fóruns ainda.

    Obrigado a todos que tentarem me ajudar, peço perdão pelo texto enorme ? é justamente para evitar algumas dúvidas sobre o que eu estou tentando fazer.
    Caso ainda tenham dúvidas sobre algo que eu disse, me perguntem.
    E caso exista algum tópico sobre algo relacionado ao que eu quero, por favor, me mostrem. Não achei nada parecido sobre isso ?

    ! :EDIT: ! - :!Duvida solucionada!:
    Como o @Naze me guiou ao caminho de onde fica a formula na source, eu resolvi fazer alguns testes para entender melhor como funcionava.
    A formula é: 
    (skillBase[skill] * std::pow(skillMultipliers[skill], (level - 11))); E entendi que é baseskill × multiplier do vocations ^(level da skill - 11), com os valores do meus servidor ficariam:
    50 x 1.0 ^ (level - 11) (Onde com rate skill 1x cada hit upava cerca de 2% da barra de skill, o que me levou a crer que eram os hits necessário para upar)
    Então eu resolvi testar essa baseskill e aumentei para 100, o que resultou em 1% da barra por hit. (Que no caso a cada +50 de skill base = [ -0,5% para upar a skill ao dar um hit])

    E seguindo isso consigo ajustar certinho a dificuldade que quero para upar skill.
    Se essa alteração na baseskill pode acarretar em algum problema me avisem, por favor (Pois não entendo muito de programação).
    Mas caso não acarrete em nenhum problema, funcionou perfeitamente para o que eu queria então.
    Para quem quer fazer o mesmo (Dificultar para upar a skill nos níveis mais baixos [como do skill level 0 ao 1]) está ai.
    Duvida encerrada! Rep++ @Naze Por me ajudar ^-^ ajudou muito mesmo, de coração, agradeço.  
     
  17. Curtir
    Yamili recebeu reputação de Cat em (Resolvido)Skill Rate/Velocidade para upar skill   
    Qual servidor ou website você utiliza como base?
    TFS 0.4 8.60

    Olá a todos, eu gostaria de deixar bem (bastante) difícil para os jogadores uparem as skills (Do fist ao shield) nos valores mais baixos (Do 0 ao 25), o que ocorre é que não consigo deixar mais difícil de upar do que alguns segundos (Uns 2% da barrinha de skill a cada hit) para upar 1 skill level (Nos valores mais baixos, como upar do skill level 1 para o 2).

    Tem alguma forma de dificultar (mais ainda) a velocidade de up da skill nos valores mais baixos?
     
    Informações extras:
    Eu testei de várias formas e percebi que o mínimo de rate skill que dá pra colocar é 1x (Seja no config.lua ou em script de skills por stages).
    No vocations.xml do meu servidor a linha:
    <skill fist="1.5" club="1.5" sword="1.5" axe="1.5" distance="1.5" shielding="1.5" fishing="1.5" experience="2.0"/> Que serve para definir a velocidade com que a skill vai upar tem o valor minimo de "1.0", abaixo disso não upa (No meu servidor quanto menor o número, menor a velocidade que vai upar a skill).
    Tendo isso em mente eu testei com rate skill 1x no config e com skill fist="1.0" na tag das vocations (Que foi o mais lento que consegui colocar para upar nos níveis mais baixos das skills) mas ainda assim não é lento o suficiente para mim.
    O script de stages que eu estava usando para alguns testes era o:
    Eu reparei que esse script pega o valor do skill rate definido no config.lua e multiplica pelo valor definido no script, e como no magic level dá pra colocar valores como 0.3x (deixando assim extremamente difícil de upar) eu tentei fazer o mesmo com as skills e não tive sucesso.
    Nesse script dá para colocar um limite de skill level (Que vai setar a rate skill para 0x) e reparei que quanto mais perto de chegar no limite, mais difícil de upar fica (Do modo que eu quero para os valores baixos).

    Minhas dúvidas: 
    É possível ajustar esse script para fazer a velocidade do up ser sempre igual a velocidade de quando está chegando no limite de skill? (Se é que esta diminuição está sendo aplicada por este script)
    Qual a função que faz essa velocidade diminuir perto do limite de skill? (O que está fazendo ela diminuir?)
    É possível de alguma forma abaixar o rate de skills para 0.X?
    É possível dificultar, extremamente, para upar as skills nos valores mais baixos? (Seja por script ou pela source)

    Ps: 
    Sou bem leigo se tratando de scripts e tals, então me desculpem se não consegui me expressar bem.
    Perdão se eu não estiver na área correta, não estou acostumado com fóruns ainda.

    Obrigado a todos que tentarem me ajudar, peço perdão pelo texto enorme ? é justamente para evitar algumas dúvidas sobre o que eu estou tentando fazer.
    Caso ainda tenham dúvidas sobre algo que eu disse, me perguntem.
    E caso exista algum tópico sobre algo relacionado ao que eu quero, por favor, me mostrem. Não achei nada parecido sobre isso ?

    ! :EDIT: ! - :!Duvida solucionada!:
    Como o @Naze me guiou ao caminho de onde fica a formula na source, eu resolvi fazer alguns testes para entender melhor como funcionava.
    A formula é: 
    (skillBase[skill] * std::pow(skillMultipliers[skill], (level - 11))); E entendi que é baseskill × multiplier do vocations ^(level da skill - 11), com os valores do meus servidor ficariam:
    50 x 1.0 ^ (level - 11) (Onde com rate skill 1x cada hit upava cerca de 2% da barra de skill, o que me levou a crer que eram os hits necessário para upar)
    Então eu resolvi testar essa baseskill e aumentei para 100, o que resultou em 1% da barra por hit. (Que no caso a cada +50 de skill base = [ -0,5% para upar a skill ao dar um hit])

    E seguindo isso consigo ajustar certinho a dificuldade que quero para upar skill.
    Se essa alteração na baseskill pode acarretar em algum problema me avisem, por favor (Pois não entendo muito de programação).
    Mas caso não acarrete em nenhum problema, funcionou perfeitamente para o que eu queria então.
    Para quem quer fazer o mesmo (Dificultar para upar a skill nos níveis mais baixos [como do skill level 0 ao 1]) está ai.
    Duvida encerrada! Rep++ @Naze Por me ajudar ^-^ ajudou muito mesmo, de coração, agradeço.  
     
  18. Gostei
    Yamili recebeu reputação de Cat em (Resolvido)Skill Rate/Velocidade para upar skill   
    @Jeff Delay Eu estava utilizando este script só para alguns testes, como eu disse no post:
     
  19. Gostei
    Yamili recebeu reputação de Cat em (Resolvido)Skill Rate/Velocidade para upar skill   
    @Naze  Eu sou totalmente leigo no assunto kk você consegue me ajudar a fazer essas alterações? (Seja no script ou na source)  Ficaria muito grato se puder me ajudar  
    E sobre a dúvida que você não entendeu, é que o rate skill minimo que consegui colocar no config.lua foi de 1x queria saber se da pra fazer ler em 0.5x por exemplo, mas creio que ela foi esclarecida com a frase "tudo possível so saber oq e onde modificar" hehe

    EDIT: Fiz alguns testes e coloquei o resultado no tópico, se puder conferir e me dizer se errei em algo (sobre qualquer coisa) grato estarei ^~^
  20. Obrigado
    Yamili deu reputação a Naze em (Resolvido)Skill Rate/Velocidade para upar skill   
    É possivel, você so precisaria fazer um calculo que anule o calculo feito das 'skill_tries' necessaria pra dar o up, que vc pode achar em "Vocation::getReqSkillTries" no vocation.cpp, Ou modificar essa função para ser um valor fixo pra up.
     
    Nenhuma, como falei na primeira pergunta ela não diminui a velocidade e sim a "experiencia" que vc ganha da skill é cada vez mais necessaria para upar. è a mesma forma que acontece com Level, mas com outros cálculos. No caso é a função "Vocation::getReqSkillTries".
     
    Não entendi direito a pergunta, mas pra essa e qualquer outra do tipo, tudo possível so saber oq e onde modificar,
     
    Tudo é possivel... por script o que citou no topico ja te da um exemplo de como mudar com 
    doPlayerSetRate(cid, skill, skillRate)
  21. Curtir
    TUTORIAL BY L3K0T PT~EN
     
    Olá pessoal, trago a vocês uma atualização que fiz no sistema, contendo 3 novas funcionalidades de movimentação de itens e uma proteção contra Elf Bot. Estas adições foram cuidadosamente implementadas para aperfeiçoar a experiência de jogo e manter a integridade do seu servidor.
    As novas funcionalidades têm a função vital de impedir que jogadores deixem itens indesejados em locais inapropriados, como na entrada de sua casa, em cima de seus depósitos ou em teleportes. Agora, apenas proprietários, subproprietários e convidados têm permissão para manipular itens nesses locais.
    Este pacote de atualização foi meticulosamente revisado para evitar abusos por parte de jogadores mal-intencionados e garantir um ambiente de jogo justo e equilibrado para todos os usuários.
     
     
     
    Iniciando o Tutorial
    1Abra o arquivo "creatureevents.cpp" com o editor de sua preferência. Eu pessoalmente recomendo o Notepad++. 
     
     
    Em creatureevents.cpp:
    return "onPrepareDeath"; Adicione abaixo:
    case CREATURE_EVENT_MOVEITEM: return "onMoveItem"; case CREATURE_EVENT_MOVEITEM2: return "onMoveItem2";  
    Em:
    return "cid, deathList"; Adicione abaixo:
    case CREATURE_EVENT_MOVEITEM: return "moveItem, frompos, topos, cid"; case CREATURE_EVENT_MOVEITEM2: return "cid, item, count, toContainer, fromContainer, fromPos, toPos";  
    Em:
    m_type = CREATURE_EVENT_PREPAREDEATH; Adicione abaixo:
    else if(tmpStr == "moveitem") m_type = CREATURE_EVENT_MOVEITEM; else if(tmpStr == "moveitem2") m_type = CREATURE_EVENT_MOVEITEM2;  
    Procure por:
    bool CreatureEvents::playerLogout(Player* player, bool forceLogout) { //fire global event if is registered bool result = true; for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if((*it)->getEventType() == CREATURE_EVENT_LOGOUT && (*it)->isLoaded() && !(*it)->executeLogout(player, forceLogout) && result) result = false; } return result; } Adicione abaixo:
    uint32_t CreatureEvents::executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos) { // fire global event if is registered for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if((*it)->getEventType() == CREATURE_EVENT_MOVEITEM) { if(!(*it)->executeMoveItem(actor, item, frompos, pos)) return 0; } } return 1; }  
    Em:
    bool CreatureEvents::playerLogin(Player* player) { //fire global event if is registered bool result = true; for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if((*it)->getEventType() == CREATURE_EVENT_LOGIN && (*it)->isLoaded() && !(*it)->executeLogin(player) && result) result = false; } if (result) { for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { CreatureEvent* event = *it; if(event->isLoaded() && ( event->getRegister() == "player" || event->getRegister() == "all") ) player->registerCreatureEvent(event->getName()); } } return result; } Adicione Abaixo:
    uint32_t CreatureEvent::executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos) { //onMoveItem(moveItem, frompos, position, cid) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(pos); std::stringstream scriptstream; env->streamThing(scriptstream, "moveItem", item, env->addThing(item)); env->streamPosition(scriptstream, "position", frompos, 0); env->streamPosition(scriptstream, "position", pos, 0); scriptstream << "local cid = " << env->addThing(actor) << std::endl; scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[35]; sprintf(desc, "%s", player->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(pos); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); LuaInterface::pushThing(L, item, env->addThing(item)); LuaInterface::pushPosition(L, frompos, 0); LuaInterface::pushPosition(L, pos, 0); lua_pushnumber(L, env->addThing(actor)); bool result = m_interface->callFunction(4); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } } uint32_t CreatureEvent::executeMoveItem2(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack) { //onMoveItem2(cid, item, count, toContainer, fromContainer, fromPos, toPos) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(player->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; env->streamThing(scriptstream, "item", item, env->addThing(item)); scriptstream << "local count = " << count << std::endl; env->streamThing(scriptstream, "toContainer", toContainer, env->addThing(toContainer)); env->streamThing(scriptstream, "fromContainer", fromContainer, env->addThing(fromContainer)); env->streamPosition(scriptstream, "fromPos", fromPos, fstack); env->streamPosition(scriptstream, "toPos", toPos, 0); scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[30]; sprintf(desc, "%s", player->getName().c_str()); env->setEvent(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(player->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); LuaInterface::pushThing(L, item, env->addThing(item)); lua_pushnumber(L, count); LuaInterface::pushThing(L, toContainer, env->addThing(toContainer)); LuaInterface::pushThing(L, fromContainer, env->addThing(fromContainer)); LuaInterface::pushPosition(L, fromPos, fstack); LuaInterface::pushPosition(L, toPos, 0); //lua_pushnumber(L, env->addThing(actor)); bool result = m_interface->callFunction(7); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } }  
     
     
    Agora em em creatureevents.h:
    CREATURE_EVENT_PREPAREDEATH, Adicione abaixo:
    CREATURE_EVENT_MOVEITEM, CREATURE_EVENT_MOVEITEM2  
    Em:
    uint32_t executePrepareDeath(Creature* creature, DeathList deathList); Adicione abaixo:
    uint32_t executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos); uint32_t executeMoveItem2(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack);  
    Em:
    bool playerLogout(Player* player, bool forceLogout); Abaixo adicone também
    uint32_t executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos); uint32_t executeMoveItem2(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack);  
     
    Agora em em game.cpp:
    if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } ReturnValue ret = internalMoveItem(player, fromCylinder, toCylinder, toIndex, item, count, NULL); if(ret == RET_NOERROR) return true; player->sendCancelMessage(ret); return false; } Altere para:
    if (!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } bool success = true; CreatureEventList moveitemEvents = player->getCreatureEvents(CREATURE_EVENT_MOVEITEM2); for (CreatureEventList::iterator it = moveitemEvents.begin(); it != moveitemEvents.end(); ++it) { Item* toContainer = toCylinder->getItem(); Item* fromContainer = fromCylinder->getItem(); if (!(*it)->executeMoveItem2(player, item, count, fromPos, toPos, (toContainer ? toContainer : 0), (fromContainer ? fromContainer : 0), fromStackpos) && success) success = false; } if (!success) return false; if (g_config.getBool(ConfigManager::ANTI_PUSH)) { std::string antiPushItems = g_config.getString(ConfigManager::ANTI_PUSH_ITEMS); IntegerVec tmpVec = vectorAtoi(explodeString(antiPushItems, ",")); if (tmpVec[0] != 0) { for (IntegerVec::iterator it = tmpVec.begin(); it != tmpVec.end(); ++it) { if (item->getID() == uint32_t(*it) && player->hasCondition(CONDITION_EXHAUST, 1)) { player->sendTextMessage(MSG_STATUS_SMALL, "Please wait a few seconds to move this item."); return false; } } } } int32_t delay = g_config.getNumber(ConfigManager::ANTI_PUSH_DELAY); if (Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, delay, 0, false, 1)) player->addCondition(condition); if (!g_creatureEvents->executeMoveItems(player, item, mapFromPos, mapToPos)) return false; ReturnValue ret = internalMoveItem(player, fromCylinder, toCylinder, toIndex, item, count, NULL); if (ret != RET_NOERROR) { player->sendCancelMessage(ret); return false; } player->setNextAction(OTSYS_TIME() + g_config.getNumber(ConfigManager::ACTIONS_DELAY_INTERVAL) - 10); return true; }  
    Agora em configmanager.h
    ADMIN_ENCRYPTION_DATA Adicione abaixo:
    ANTI_PUSH_ITEMS,  
    em:
    STAMINA_DESTROY_LOOT, Adicione abaixo:
    ANTI_PUSH_DELAY,  
    em:
    ADDONS_PREMIUM, Adicione abaixo:
    ANTI_PUSH  
    Agora você pode compilar a Source.
     
     
    Configurando no servidor:
     
    Abra seu config.lua do servidor e adicione isso dentro qualquer lugar:
    -- Anti-Push useAntiPush = true antiPushItems = "2148,2152,2160,3976" antiPushDelay = 500  
     
    Navegue até o diretório 'creaturescripts' e localize o arquivo 'login.lua'.
    em resgistros de eventos adicione:
    login.lua
    registerCreatureEvent(cid, "MoveItem") registerCreatureEvent(cid, "MoveItem2")  
    Agora abra o aquivo creaturescript .xml
    <event type="moveitem" name="MoveItem" event="script" value="houseprotecao.lua"/> <event type="moveitem2" name="MoveItem2" event="script" value="moveitem2.lua"/>  
    Crie um novo arquivo lua em scripts com o nome houseprotecao.lua e adicione isso:
    function onMoveItem(moveItem, frompos, position, cid) if position.x == CONTAINER_POSITION then return true end local house = getHouseFromPos(frompos) or getHouseFromPos(position) --correção 100% if type(house) == "number" then local owner = getHouseOwner(house) if owner == 0 then return false, doPlayerSendCancel(cid, "Isso não é Possível.") end if owner ~= getPlayerGUID(cid) then local sub = getHouseAccessList(house, 0x101):explode("\n") local guest = getHouseAccessList(house, 0x100):explode("\n") local isInvited = false if (#sub > 0) and isInArray(sub, getCreatureName(cid)) then isInvited = true end if (#guest > 0) and isInArray(guest, getCreatureName(cid)) then isInvited = true end if not isInvited then return false, doPlayerSendCancel(cid, "Desculpe, você não está invitado.") end end end return true end  
    Crie um novo arquivo lua em scripts com o nome moveitem2.lua e adicione isso abaixo:
    local depottiles = {} --piso pra n jogar local depots = {2589} --id dos dps local group = 3 --id dos group 6 é todos. local function checkIfThrow(pos,topos) if topos.x == 0xffff then return false end local thing = getThingFromPos(pos) if isInArray(depottiles,thing.itemid) then if not isInArea(topos,{x=pos.x-1,y=pos.y-1,z=pos.z},{x=pos.x+1,y=pos.y+1, z=pos.z}) then return true end else for i = 1, #depots do if depots[i] == getTileItemById(topos,depots[i]).itemid or getTileInfo(topos).actionid == 7483 then return true end end end return false end function onMoveItem2(cid, item, count, toContainer, fromContainer, fromPos, toPos) if isPlayer(cid) then local pos = getThingPos(cid) if getPlayerGroupId(cid) > group then return true end if checkIfThrow({x=pos.x,y=pos.y,z=pos.z,stackpos=0},toPos) then doPlayerSendCancel(cid,"Não jogue item ai!!") doSendMagicEffect(getThingPos(cid),CONST_ME_POFF) return false end end return true end  
    ajudei?? REP+
    CRÉDITOS:
    @L3K0T
    Fir3element
    Summ
    Wise
    GOD Wille
    Yan Lima
     
     
     
     

Informação Importante

Confirmação de Termo