Histórico de Curtidas
-
NoturnoBRN deu reputação a omarwsk em Pokemon HuatsonOT (DXP) Custom lvl sysHello, i come here to share my own version of the opensource dxp3 with too many new features
Custom level system Custom Stat System Smeargle System Kecleon System Mega Stone system Outland zone lvl +150 Nightmare Zone (open pvp zone, no revives) lvl +300 Held System (elemental added) Tokens Machine !invite fixed on the source (need to activate on talkactions)
Here are some Prints
Share Exp with other pokes of your same team
Mega stones looted by normal pokes with custom loot system (can check on the dex)
New 3 quests untested and without pokes inside, only bosses and rewards on chests
Known Bugs
Pokes need to be included (have sprite on the client)
Scans
Download Links
Use my database included on the links!!
Credits
All mentioned on the original post of DXP Me (Omarwsk)
If you want to support me and get some custom help, you can donate me some items on PXG red server
-
NoturnoBRN deu reputação a Beeny em Extraindo sprite (pokepro, otpoke, etc)eae, se n me engano esse rolê não funciona no gla/pxg. mas, tem outros jeitos de pegar lá tb
links:
ninjaripper - https://gamebanana.com/tools/download/5638
dds converter - http://www.softsea.com/download/DDS-Converter.html
scan:
ninja ripper - https://www.virustotal.com/gui/file/60541e6a43661f0ee2e70c0a7cedb86d44a874e5376949db7a2e1f604fa5cdf1/detection
dds - https://www.virustotal.com/gui/file/611d6bbb534b8a3210b2ca1e7954d6abc3055c6f2995833fbb04b6093f418263/detection
-
NoturnoBRN deu reputação a SrP1kachu em [Link Quebrado]Pokémon MythologyBom tava com um projetinho a um tempo atras mas como eu resolvi parar com ele resolvi trazer aqui pra vcs.
Sim tem a maioria das coisas que a DXP tem porem tem bastante bugs removidos, o servidor fica online sem algum tipo de queda.
esta estavel para por online alem de ter um mapa unico tem um cliente lido d+ meu orgulho huahuahua
mais em fim vamos ao que interessa
• Informações Basicas •
• Duel System.
• Nick System.
• Autoloot System.
• Block Respaw System.
• Mega Evolução Ssystem.
• Auto Stacking System.
• Player passa por dentro de outros Players(Não sei o nome deste sistema kk).
• Ditto Memory System.
• Player pode usar potions, revive, soltar poke andando sem parar.
• Limite de efeitos aumentados nas sources até 380(Podendo aumentar muito mais)
• Transparência.
• Cliente criptografado(Acompanha OBD único para o cliente).
• Sistemas básicos como fly, ride, surf, order etc.
• Held System(Não tem todos, falta fazer alguns, ja tem o x-luck).
• Fishing trocando o outfit automaticamente.
• Icone System.
• Varias Pokeballs novas.
• Task System.
• Guild System.
• NPC dialogo
E muito+, não testei o servidor todo. podem ter sistemas no server que eu esqueci de colocar aqui na lista.
Tem mais coisas mas não me lembro ao certo de tudo que eu coloquei ;-; </3
• Bugs •
Irei postar os que eu sei, podem haver mais.
• Gym System não esta funcionando.
• O famoso bug do autoloot '-
• Pokemons da 3 geração todos arrumados porem pode dar revive mesmo com ele pra fora da ball
• scizor ao ser chamado de volta pra ball fica com o icon de shiny scizor
• Alguns erros no cliente que faz dar umas speed pra frente
Que eu saiba e só isso mas provavelmente tenha mais que eu não estou ciente :C
• Prints •
Não queria ter que postar meu projeto mas como Minha Propia equipe esta ameaçando a fazer isso tai pra vcs :C
• Dowload •
scan : https://www.virustotal.com/#/file-analysis/Yjg0MTM2YmRkNjZkNmRjNDJhODgxMThlOWFjZmM2YmM6MTUwMzI3MzI0Mg==
servidor+sources+cliente : https://mega.nz/#!sIJ1nATJ!cEXaqXdkW0iXWnFeklNpa9yRS0y9exoRDkM-WBnpACo
Senha : domviniciusbr
• Créditos •
•CipSoft
•Nintendo
•TFS Team
•Dark X Poke
•PXG
•Tom Lukz (Smix)
•Allan Harlen (Kttallan/lordsorte)
•Eduardo Meskita (FuuinFake)
•Noninhouh
•Tony Araujo
•Taiger/Dudu
•Drakopoulos
•Justiceiro751
•Vinicius Clel (Walox)
•Vinicius FT (K95)
•DeadPool
•Marshmello
E a todos que tiveram alguma participação em sistemas, server, site, cliente etc.
Se estiver faltando algo como créditos, má formatação etc, por favor me avisem, é meu primeiro post de server.
-
NoturnoBRN deu reputação a GOD Vitor em [2016] Sprites Completas - PokeXGamesEae Galera, estava vasculhando alguns fóruns e encontrei as novas sprites da PokeXGames, então resolvi trazer para o TK. Façam bom aproveito!
Screenshot
Como Abrir a spr pelo Object Builder
Download
Créditos
-
NoturnoBRN deu reputação a MikaelsonTO em [8.54] Pokémon Imperium [V1]Fala galera do TibiaKing, beleza?
Eu estava desenvolvendo o projeto Imperium, porém estou tendo alguns problemas e não vou conseguir terminar. Então vou liberar o avanço do projeto pra vocês.
• Menu:
├ Informações;
├ Edições;
├ Erros;
├ ScreenShots;
├ Download;
└ Créditos.
• Informações:
• Edições:
• Erros:
• ScreenShots:
• Download:
• Créditos:
-
NoturnoBRN deu reputação a zipter98 em Ditto Memory System por talkactionOK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
Introdução:
A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando.
Você pode configurar quantos slots de "memória" quiser.
Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
Comandos:
/memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
Instalação:
Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:
Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado. Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais. -
NoturnoBRN deu reputação a 001rafa em Compilando com Microsoft Visual Studio 2013Desculpa reviver o topico mas é para ajuda de todos então quem tiver com o problema do amigo ai acima...
Baixa esse arquivo aki e substitui
https://mega.co.nz/#!zgknnTTb!W1ymVQBWUfPo7YloOo70oDf6-NkZFN-nXn2te9or05o
-
NoturnoBRN deu reputação a Jepart em Compilando com Microsoft Visual Studio 2013Procurei um tutorial aqui no fórum que utiliza-se o Microsoft Visual Studio 2013 para complilar o OTC porem não achei então fui pra outro fórum e vim trazer para o TK
1.Download
MSVC 2013 Libs - Aqui Source - Aqui 2.Agora que temos as source e libs está na hora de colocá-los nos lugares corretos.
Coloque as "otclient-master" e "otclient-msvc13-libs" na "C:\" .Isto vai poupar muito tempo, porque você não tem que ligar manualmente todas as inclui e libs.
3.Abrindo o MSVC 2013
(Imagem de outro forum - dominique120)
4. Agora vamos configurar as propriedades
5. Agora selecione a configuração correta:
6. Agora, aqui ele pode ficar um pouco confuso, então preste atenção.
6.1 Se você extraiu as libs para o ? / drive você só precisa adicionar isso ao seu includes:
E isso para as suas libs
6.2 Mas, se você extraiu os libs em outros lugares que você deve adicionar esses diretórios também.
Isto é para o includes:
Isto é para as libs:
6. Agora clique em Aplicar e deixar os arquivos analisar, isso é automático.
7. Uma vez que é você pode reconstruir os arquivos.
8. Construindo seu .exe .
9. Agora é só esperar termina e você vai ter seu .exe.
10. Caso precise das DLL basta baixar aqui.
Créditos:
@dominique120 - pelo tutorial
@edubart - pelo desenvolvimento do OTC
@Dalkon - por adicionar arquivos de compilação MSVC
@conde2- por fixar-se a fonte de modo que seja compatível com o compilador do MSVC
-
NoturnoBRN deu reputação a
Golfem Tutorial Mod OtClientOlá, amigos esta muito tempo parado e sem tempo para meche no meu otserv por isso esto liberando um sistema meu de tutorial client.
Oque ele faz, ele abre uma janela com menus e seus texto para ajudar os player a ter uma boa jogabilidade ao o game.
-versão:todas
Opcodes: Nao precisa de opcodes, roda em qual quer versão otclient.
1- abra a pasta do otclient>mods>game_tutorial.zip
2- abra a pasta do otclient>mods>game_tutorial>configs.lua
2.1 em configs.lua voce vai configura todo os text que a no seu tutorial.
3- Menu texto
tutorialsIndex = { "1. Exp", "2. Exp", "3. Exp" } 4- oque a no menu texto
}, {name = "1.2 Exp", text = [[EXP: - EXP - HEXP - EXP - EXP Tibia King:100 ]] }, {name = "1.3 Exp", text = [[EXP: - EXP - HEXP - EXP - EXP Tibia King:100 ]] } } Se gosto mais rep.
-
NoturnoBRN deu reputação a Kenny Dxp em [Download] Sprites Ot Pokémon V 10.1Fala galera to tibiaking hoje estou aqui para postar as novas sprites do otp update data [06/04/2015]
Download Sprites -> http://www.mediafire.com/download/p9lxa7xq57oaxaf/otp+sprites+By+Kenny.rar
Scan -> https://www.virustotal.com/pt/file/a69fbba122e2644be047cfedd58eea4f7561c5750f93ef447cee9235c7c6e69a/analysis/1428322350/
Meu face www.facebook.com/kenny.fentons
Printes Do que tem
Créditos:
Otpokemon.com - pelas sprites
Kenny Dxp eu - por decompilar e postar.
-
NoturnoBRN deu reputação a xWhiteWolf em Magnus ChallengerFala galera, hoje vim trazer o projeto pronto do Magnus Challenger pra vocês instalarem no servidor de vocês!
Pra quem não conhece é um sistema de Tasks baseado no Zezenia onde você pode escolher entre tasks de matar monstros ou de coletar certos items para o npc Magnus, um guerreiro famoso da cidade que está atolado de tarefas e precisa da sua ajuda!
Peguei os aspectos que eu julguei serem os principais do modelo do Zezenia e editei com algumas coisas que eu achei que ficariam melhores.
Quem quiser pode ver um vídeo comentado de como o sistema funciona:
Dito isso vou ensinar vocês como instalar isso no server:
Pra começar vá em data\creaturescripts\scripts e procure login.lua, agora vá até o final do arquivo e antes do último return true coloque essas linhas abaixo
ainda em creaturescripts procure creaturescripts.xml e adicione essa linha junto com as outras que já estão lá (seguindo o padrão)
<!-- TASK SYSTEM --> <event type="kill" name="tasksystem" script="tasksystem.lua"/> Agora crie um arquivo em creaturescripts\scripts com o nome de tasksystem.lua e adicione o seguinte à ele:
Terminada a parte da contagem de kill vamos ao NPC em si.
Crie um arquivo chamado Magnus.xml em data\npc e coloque isso dentro dele:
Agora em data\npc\scripts crie um arquivo chamado zezeniaa.lua e adicione esse conteúdo dentro do arquivo:
~~~~~~~~~~~~~~~~ FEITO ISSO ESTÁ TERMINADO ~~~~~~~~~~~~~~~~~~
Agora aprendendo a configurar:
No tasksystem vc pode editar isso daqui:
Eu fiz um sistema onde se vc estiver em party com alguém e a pessoa matar os bixos conta como se você tivesse matado; Assim incentiva o pessoal a ir numa cave de Dragon e ao invés de matar quem está lá pra ficar sozinho na cave, eles vão chamar party pra fazerem a task juntos.. assim fazer amigos fica mais fácil e com maiores laços é maior a chance do povo não abandonar o seu server.
Apenas digite "true" ou "false" pra ativar/desativar esse sistema e em baixo temos a distancia máxima pro monstro estar do cara que está fazendo a task pra contar o kill. Se a distancia entre o monstro e a pessoa for maior que 7 não vai contar pra ele a kill.
No zezeniaa.lua as coisas que dão pra configurar são maiores mas são igualmente simples:
Toda vez que vc pedir uma task short (curta) vc vai ter de 100 a 400 monstros pra matar, ele gera um número de 0 a 6 e multiplica por 5 e soma com os 100 iniciais.. o mesmo vale pra todos os outros valores.
levelcollect é o level mínimo pra fazer tasks do tipo collect.
time é o tempo em segundos que você vai ficar sem poder falar com o npc caso desista de alguma task, o padrão é 8 * 60 * 60 (8 horas)
bonus é por quanto vai multiplicar caso vc permita que o npc escolha aleatoriamente entre todas as opções.. o padrão é 20% de bonus (1.2)
multiplicador é uma coisa que eu adicionei pra ficar mais fácil mexer na fórmula sem cometer cagadas, se vc tá ganhando 10% de exp e quer ganhar 80% é só colocar 8 no multiplicador.
Isso daqui é o banco de dados principal do sistema de kill, toda vez que vc escolher uma task do tipo fácil, médio, dificil ele vai acessar essas tabelas contendo o nome das criaturas.. vc pode facilmente adicionar novos nomes, o npc já está programado pra lidar com isso, apenas siga o padrão e mantenha sempre o último sem vírgula!
Ex: adicionando Morgaroth na tabela de hard
local hard = { [1] = "Giant Spider", [2] = "Dragon Lord", [3] = "Grim Reaper", [4] = "Demon", [5] = "Crystal Spider", [6] = "Demon Skeleton", [7] = "Juggernaut", [8] = "Destroyer", [9] = "Hand of Cursed Fate", [10] = "Morgaroth" } atente-se também pra não repetir o número no index.. se o anterior era [9] use [10].
O restante das tabelas são separadas para o banco de dados das tasks de collect:
segue a mesma lógica da de kill só que aqui você tem o id dos itens que serão usados... aquela count não tem nada a ver com o item pois ele vai gerar tanto o item aleatoriamente quanto à count;
Ex:
[1] = {id = 5880, count = 20}, -- iron ore isso não significa que se cair iron ore (id 5880) irá cair sempre 20.. até porque eu poderia escolher uma task long e easy e pegar a task de trazer até 50 iron ores, apenas tente manter os padrões que são os intervalos definidos.
No easy ele varia de 10 a 20, no medium ele varia de 20 a 35 e no hard de 40 a 50.
Espero que vocês tenham curtido, é um sistema grande mas bem simples de se mexer... se tiverem quaisquer problemas podem comentar aqui. Deu trabalho fazer isso então se você gostou deixe o seu comentário aí e o seu "Gostei" que vai me incentivar a trazer mais coisas desse tipo pra cá. Abraços do lobo.
PS: Pra sumonar o npc digite com o GOD: /n Magnus ou coloque ele pelo map editor.
-
NoturnoBRN deu reputação a Adriano SwaTT em Sistema: Cassino Slots.Boa noite galera,
após um pedido aqui no fórum sobre um sistema de Cassino, decidi então criar este e disponibilizar para vocês.
Introdução:
Bom, este script simula a máquina de Cassino conhecida como Cassino Slots, pra quem não conhece é a máquina que se encontra no spoiler abaixo:
Como funciona?
O jogador precisa escolher 1 (um) dos 10 (dez) itens disponíveis (da para configurar a quantidade de itens) como seu Item da Sorte, e após feito isso, terá que girar a alavanca e torcer para que a máquina sorteie 3 itens repetidos igual ao que o jogador em questão escolheu.
Para tornar um pouco mais fácil de vencer, criei para que a máquina dê pequenos brindes à quem acertar 1 ou 2 itens dos sorteados (configurável).
Como jogar?
Para jogar é simples, como desenvolvi todo script em apenas um arquivo, para facilitar na criação, na instalação e até mesmo na jogabilidade, o jogo se baseia na posição em que o jogador está para identificar qual ação executar.
Selecionar Item da Sorte: com seu personagem virado para baixo (sul), clique na alavanca e automaticamente o item da sorte aparecerá na mesa configurada no script, caso queira outro item, basta ir usando a alavanca até encontrar o item desejado.
Como Jogar: Após ter selecionado seu item da sorte, que deve estar à mostra em cima da mesa própria, basta virar seu personagem para cima (norte) e clicar novamente na alavanca.
E se virar esquerda ou direita?: Nada acontecerá, apenas uma mensagem ensinando como jogar será enviada para que o jogador se oriente.
Dicas de instalação!
Sugiro que quando for criar o mapa para o evento, não faça como do vídeo, pois os itens criados nas mesas não estão com atributos para que não possam ser movidos, sendo assim é provável que jogadores de má fé venham a roubar itens... Faça como a imagem abaixo:
Instalando:
Basta criar um arquivo na pasta “data/actions/scripts” chamado “cassino_slots.lua” e adicionar o código abaixo dentro:
Agora em “actions.xml” adicione a tag abaixo:
Agora basta configurar de acordo com as informações disponíveis no início do script.
Vejam o vídeo demonstrativo do Sistema em funcionamento.
Criado por: Adriano Swatt'
-
NoturnoBRN deu reputação a mee em Dowloand MewtwoLink= http://postimg.org/image/gpvbp83ed/
Creditos
=
Leshrot (Por criar) =Eu por disponibilizar!
-
NoturnoBRN deu reputação a luanluciano93 em [TFS 1.0] House market (buy/sell)Olá pessoal, para quem não sabe esse sistema permite vender items na "porta" da sua house, um tipo de market.
Requisitos: Ultimas versões do TFS, caso contrário não irá funcionar!
Imagens:
Bom, a iamgem mostra tudo ... sua casa deve ter algo borda acessível, e no caso da iamgem, foi usado uma cesta, e dentro colocamos uma label e umas bag com os itens que serão vendidos dentro, na label ficará como o exemplo:
sell [demon shield, 40000;]
buy [dragon shield, 5000;]
Bem simples né?
Para implementar esses sistema devemos fazer os passos a seguir:
[ 1 ] • Adicionar a seguinte tabela em sua database pelo phpmyadmin:
[ 2 ] • Agora crie um arquivo em data/actions/script/, com o nome de house_shop.lua e coloque esse código dentro:
[ 3 ] • Adicione a tag em data/actions/actions.xml
<action itemid="1989" script="house_shop.lua"/> [ 4 ] • Adicione em data/events/events.xml:
<event class="Player" method="onMoveItem" enabled="1"/> <event class="Player" method="onTradeRequest" enabled="1"/> [ 5 ] • Em data/events/scripts ... procure pelo arquivo player.lua e substitua essa parte:
Por esta:
[ 6 ] • Em data/events/scripts/player.lua, adicione isso:
[ 7 ] • Em data/creaturescripts/scripts/login.lua, adicione isso acima de return true:
Créditos: zbizu
É isso pessoal, só repassei, espero que ajude alguém, abração!
-
NoturnoBRN deu reputação a Nextbr em [Pokemon] Catch Channel SystemBoa Noite Glaera, BLZ?
Hoje Vou Postar Mais uma de minhas Ideias Loucas de Poketibia que eu particulamente achei legal ate que se Chama "Catch Channel"
[+] Para que Serve o Catch Channel?
- Simples Serve Para voce Ver todos os Catch do Servidor no Canal "Catch Channel"
- O Script é Bem Basico!
[+] Intao Vamos La:
[+] Servidor Testado:
Pokemon Dash Advanced (PDA V2.5 BY: BOLZ)
Vai em data/lib/CATCHSYSTEM.LUA e Procure por Essa funçao:
- Procure por essa Parte do Script:
- Logo Abaixo Adiciona isso:
Explicando:
TALKTYPE_CHANNEL_W: Letra Branca
5 : Channel ID (No Caso é o Game-Chat)
Depois vai em data/xml/channels.xml e troca seu Channel id "5" Para Esse:
[+] Imagem:
Creditos: NextBR
-
NoturnoBRN deu reputação a Ricardo Monteiro em [Poketibia] Remakes PxGFala galera do TK, vou estar trazendo pra vocês algumas sprites retiradas da PxG...
Nao sei ao certo se já tem elas rodando por ai, mas emfim, irei atualizando o topico com a medida que for retirando mais remakes..
Conteúdo:
-- Bronzong + Passiva. [sem Corpse]
-- Lapras + Surf + Corpse.
-- Steelix + Iron + Ride + Corpse.
Download (OBD):
[Requer Object Builder]
Remakes.rar
Scan:
Clicando aki.
Erros de versão não suportada:
Utilize este Object Builder 0.4
(Fonte: GitHub do projeto object builder)
Se mesmo assim você não conseguir, já atualizei o tópico com a versão 8.54 v1.
--Creditos:
PxG, eu por ripa-los.
--------------------------------------
Gostou? Dá um Rep+, não vai cair a mão.
-
NoturnoBRN deu reputação a kranzix em [Modern Acc] WebSite Otpokemon.com (2014) versão 1.0Iae pessoal blz?
*Sempre procurei um website igualzinho ao do otpokemon.com mas como nunca encontrei então tive a
iniciativa de montar um do "0" deu um trabalhozinho mas valeu a pena!!
+Aqui estão algumas imagens:
___________________________________________________________________________________________________________
Obs: No Otpokemon WebSite 1.0 as configuração do config.lua do seu servidor de poketibia so serão suportadas na versão criptografada Sha1 (Então altere para Sha1 e mysql) Não esqueça tambem de remover as linhas "----" do config.lua do seu servidor para evitar problemas futuros!. Desative o account manager do config.lua também pois se ele permanecer os irá bugar os char's e não vão poder logar no servidor.
A instalação é simples não precisa de senha de administrador, terão que mudar o acesso de pagina direto do banco de dados qualquer duvida comentem! Aconcelhado usar Xampp 1.7.7 pois não tive nenhum problema com ele! ___________________________________________________________________________________________________________
*Bom essa é a versão 1.0 então não está 100% igual ao website do otpokemon.com mas irei fazer o maximo
para que fique 100% igual.
- O WebSite é 100% Editavel so é preciso ter os conhecimentos necessarios.
...É isso ae galera espero que curtam o website!
(Em breve na versão 2.0 mas novidades aguardam)
$-Obs:Caso forem compartilhar esse post, não esqueçam de deixar os creditos-$
Ahh.... Lembrando não esqueça de dar REP+ até
porque deu um trabalhaço!
___________________________________________________________________________________________________________
Download:http://www.mediafire.com/download/cvttts1ae47usrb/WebSite+OTPokemon+1.0+%282014%29.rar
Scan:https://www.virustotal.com/pt/file/3b20e20c6f103fd508de6693abea5e2e16c36aaff139d605124e9db183260edc/analysis/1392469897/
Aviso: A senha para descompactar o WebSite OTPokemon 1.0 (2014).Rar é: (otpokemon!) sem os parenteses.
......................................................................................................................................................................................................................
*- Creditos -*
Modern Acc e (Kranzix).
-
NoturnoBRN deu reputação a MarcosFraga em Pagseguro Automatico Modern AACCrie um arquivo.php na pasta: xammp/htdocs/sytem/pages
com o nome de pagseguro.php
<?php global $config; require("config.php"); $ots = POT::getInstance(); $ots->connect(POT::DB_MYSQL, connection()); $SQL = $ots->getDBHandle(); $ide = new IDE; $ide->requireLogin(); if($ide->isLogged()){ $accountName = $_SESSION['name']; //$SQL->query('SELECT * FROM accounts WHERE name="'.$accountName.'"')->fetch(); ?> <form target="pagseguro" method="post" action="https://pagseguro.uol.com.br/checkout/checkout.jhtml"> <input type="hidden" name="email_cobranca" value="<?php echo $config['pagseguro']['email']; ?>"> <input type="hidden" name="tipo" value="CP"> <input type="hidden" name="moeda" value="BRL"> <input type="hidden" name="item_id_1" value="1"> <input type="hidden" name="item_descr_1" value="<?php echo $config['pagseguro']['produtoNome']; ?>"> <input type="hidden" name="item_valor_1" value="<?php echo $config['pagseguro']['produtoValor']; ?>"> <input type="hidden" name="item_frete_1" value="0"> <input type="hidden" name="item_peso_1" value="0"> <input type="hidden" name="ref_transacao" value="<?php echo $accountName; ?>"> <table border="0" cellpadding="4" cellspacing="1" width="100%" id="#estilo"><tbody> <tr> <th colspan="2">Escolha a quantidade de pontos que deseja comprar:</th> </tr> <tr> <td width="25%">Sua conta:</td> <td><strong><?php echo $accountName; ?></strong></td> </tr> <tr> <td width="25%">Pontos:</td> <td> <input name="item_quant_1" type="text" value="1" size="5" maxlength="5"> </td> </tr> <tr> <td colspan="2"> <input type="image" src="https://p.simg.uol.com.br/out/pagseguro/i/botoes/carrinhoproprio/btnFinalizar.jpg" name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!" /> </td> </tr> </tbody></table></form><p style="text-align: right; font-size: 10px">created by <a href="http://otland.net/members/tatu+hunter/" target="_blank">tatu hunter</a></p><?php } ?> Agora vá em htdocs e abra o arquivo config.php:
la em baixo antes do "?>"
você adiciona:
// Sistema automatico Pagseguro by tatu_hunter // Seu email cadastrado no pagseguro $config['pagseguro']['email'] = '[email protected]<script cf-hash='f9e31' type="text/javascript"> /* */</script>'; [b]-- seu email pagseguro--[/b] // Nome do Produto $config['pagseguro']['produtoNome'] = 'Pontos VIP'; // Valor unitario do produto ou seja valor de cada ponto // Exemplo de valores // 100 = R$ 1,00 // 235 = R$ 2,35 // 4254 = R$ 42,54 $config['pagseguro']['produtoValor'] = '100'; // Token gerado no painel do pagseguro [b]--token você pega após confirmar que tem mais de 18 anos para receber as donations--[/b] $config['pagseguro']['token'] = 'EFEB3B4CA8914CB3963C3695A6947965'; Agora crie na pasta htdocs um arquivo chamado retPagseguro.php
e cole:
<?php // Arquivo de configuracao do Modern AAC include('config.php'); // Aqui vai seu Token define('TOKEN', $config['pagseguro']['token']); // Incluindo o arquivo da biblioteca include('retorno.php'); // Função que captura os dados do retorno function retorno_automatico ( $VendedorEmail, $TransacaoID, $Referencia, $TipoFrete, $ValorFrete, $Anotacao, $DataTransacao, $TipoPagamento, $StatusTransacao, $CliNome, $CliEmail, $CliEndereco, $CliNumero, $CliComplemento, $CliBairro, $CliCidade, $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens) { global $config; if(strtolower($StatusTransacao) == 'aprovado') { require("system/application/libraries/POT/OTS.php"); $ots = POT::getInstance(); $ots->connect(POT::DB_MYSQL, array('host' => $config['database']['host'], 'user' => $config['database']['login'], 'password' => $config['database']['password'], 'database' => $config['database']['database'])); $SQL = $ots->getDBHandle(); $account_logged = $ots->createObject('Account'); $account_logged->find($Referencia); if($account_logged->isLoaded()) { $pontos = $account_logged->getCustomField("premium_points"); $account_logged->setCustomField("premium_points", $pontos + $produtos[0]['ProdQuantidade']); $nome = $Referencia.'-'.date('d-m-Y',$_SERVER['REQUEST_TIME']).'.txt'; if(file_exists('logsPagseguro/'.$nome)) $nome = $Referencia.'-2-'.date('d-m-Y',$_SERVER['REQUEST_TIME']).'.txt'; $arquivo = fopen('logsPagseguro/'.$nome, "w+"); $dados = "Conta: ".$Referencia."\n"; $dados = "Email: ".$CliEmail."\n"; $dados .= "Total de Points: ".$produtos[0]['ProdQuantidade']."\n"; $dados .= "Hora da Transação: ". date('d-m-Y H:i:s', $_SERVER['REQUEST_TIME']).""; fwrite($arquivo, $dados); fclose($arquivo); } } } // A partir daqui, é só HTML: ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Estamos verificando seu pagamento</title> </head> <body> <h1>Pedido em processamento</h1> <p>Recebemos seu pedido e estamos aguardando pela confirmação do pagamento. Obrigado por ajudar.</p> </body> </html> Depois ainda na pasta htdocs você cria uma pasta com o nome de logsPagseguro nela ficarão salvos todos os pagamentos completados.
E para que o pagamento apareça nessa pasta você tem que configurar no site do pagseguro a url de retorno:
Logue em sua conta no Pagseguro
Vá em: Preferências -> Retorno automático de dados
Procure 'Ative a URL de retorno', coloque Ativar.
e depois em URL de Retorno coloque a página que va para o retpagseguro.php do seu site:
http://www.seuservidor.com/retPagseguro.php
*Mais abaixo encontrara o botão "GERAR" para criar seu Token usado como encriptação pessoal para o seu sistema.
Cria outra página com o nome de Retorno.php
<?php if (!defined('TOKEN')) define ('TOKEN', ''); /** * RetornoPagSeguro * * Classe de manipulação para o retorno do post do pagseguro * * @package PagSeguro */ class RetornoPagSeguro { /** * _preparaDados * * Prepara os dados vindos do post e converte-os para url, adicionando * o token do usuario quando necessario. * * @internal é usado pela {@see RetornoPAgSeguro::verifica} para gerar os, * dados que serão enviados pelo PagSeguro * * @access private * * @param array $post Array contendo os posts do pagseguro * @param bool $confirmacao Controlando a adicao do token no post * @return string */ function _preparaDados($post, $confirmacao=true) { if ('array' !== gettype($post)) $post=array(); if ($confirmacao) { $post['Comando'] = 'validar'; $post['Token'] = TOKEN; } $retorno=array(); foreach ($post as $key=>$value){ if('string'!==gettype($value)) $post[$key]=''; $value=urlencode(stripslashes($value)); $retorno[]="{$key}={$value}"; } return implode('&', $retorno); } /** * _tipoEnvio * * Checa qual será a conexao de acordo com a versao do PHP * preferencialmente em CURL ou via socket * * em CURL o retorno será: * <code> array ('curl','https://pagseguro.uol.com.br/Security/NPI/Default.aspx') </code> * já em socket o retorno será: * <code> array ('fsocket', '/Security/NPI/Default.aspx', $objeto-de-conexao) </code> * se não encontrar nenhum nem outro: * <code> array ('','') </code> * * @access private * @global string $_retPagSeguroErrNo Numero de erro do pagseguro * @global string $_retPagSeguroErrStr Texto descritivo do erro do pagseguro * @return array Array com as configurações * */ function _tipoEnvio() { //Prefira utilizar a função CURL do PHP //Leia mais sobre CURL em: http://us3.php.net/curl global $_retPagSeguroErrNo, $_retPagSeguroErrStr; if (function_exists('curl_exec')) return array('curl', 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx'); elseif ((PHP_VERSION >= 4.3) && ($fp = @fsockopen('ssl://pagseguro.uol.com.br', 443, $_retPagSeguroErrNo, $_retPagSeguroErrStr, 30))) return array('fsocket', '/Security/NPI/Default.aspx', $fp); elseif ($fp = @fsockopen('pagseguro.uol.com.br', 80, $_retPagSeguroErrNo, $_retPagSeguroErrStr, 30)) return array('fsocket', '/Security/NPI/Default.aspx', $fp); return array ('', ''); } /** * not_null * * Extraido de OScommerce 2.2 com base no original do pagseguro, * Checa se o valor e nulo * * @access public * * @param mixed $value Variável a ser checada se é nula * @return bool */ function not_null($value) { if (is_array($value)) { if (sizeof($value) > 0) { return true; } else { return false; } } else { if (($value != '') && (strtolower($value) != 'null') && (strlen(trim($value)) > 0)) { return true; } else { return false; } } } /** * verifica * * Verifica o tipo de conexão aberta e envia os dados vindos * do post * * @access public * * @use RetornoPagSeguro::_tipoenvio() * @global string $_retPagSeguroErrNo Numero de erro do pagseguro * @global string $_retPagSeguroErrStr Texto descritivo do erro do pagseguro * @param array $post Array contendo os posts do pagseguro * @param bool $tipoEnvio (opcional) Verifica o tipo de envio do post * @return bool */ function verifica($post, $tipoEnvio=false) { global $_retPagSeguroErrNo, $_retPagSeguroErrStr; if ('array' !== gettype($tipoEnvio)) $tipoEnvio = RetornoPagSeguro::_tipoEnvio(); $spost=RetornoPagSeguro::_preparaDados($post); if (!in_array($tipoEnvio[0], array('curl', 'fsocket'))) return false; $confirma = false; if ($tipoEnvio[0] === 'curl') { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $tipoEnvio[1]); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $spost); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $resp = curl_exec($ch); if (!RetornoPagSeguro::not_null($resp)) { curl_setopt($ch, CURLOPT_URL, $tipoEnvio[1]); $resp = curl_exec($ch); } curl_close($ch); $confirma = (strcmp ($resp, 'VERIFICADO') == 0); } elseif ($tipoEnvio[0] === 'fsocket') { if (!$tipoEnvio[2]) { die ("{$_retPagSeguroErrStr} ($_retPagSeguroErrNo)"); } else { $cabecalho = "POST {$tipoEnvio[1]} HTTP/1.0\r\n"; $cabecalho .= "Content-Type: application/x-www-form-urlencoded\r\n"; $cabecalho .= "Content-Length: " . strlen($spost) . "\r\n\r\n"; $resp = ''; fwrite ($tipoEnvio[2], "{$cabecalho}{$spost}"); while (!feof($tipoEnvio[2])) { $resp = fgets ($tipoEnvio[2], 1024); if (strcmp ($resp, 'VERIFICADO') == 0) { $confirma = (strcmp ($resp, 'VERIFICADO') == 0); $confirma=true; break; } } fclose ($tipoEnvio[2]); } } if ($confirma && function_exists('retorno_automatico')) { $itens = array ( 'VendedorEmail', 'TransacaoID', 'Referencia', 'TipoFrete', 'ValorFrete', 'Anotacao', 'DataTransacao', 'TipoPagamento', 'StatusTransacao', 'CliNome', 'CliEmail', 'CliEndereco', 'CliNumero', 'CliComplemento', 'CliBairro', 'CliCidade', 'CliEstado', 'CliCEP', 'CliTelefone', 'NumItens', ); foreach ($itens as $item) { if (!isset($post[$item])) $post[$item] = ''; if ($item=='ValorFrete') $post[$item] = str_replace(',', '.', $post[$item]); } $produtos = array (); for ($i=1;isset($post["ProdID_{$i}"]);$i++) { $produtos[] = array ( 'ProdID' => $post["ProdID_{$i}"], 'ProdDescricao' => $post["ProdDescricao_{$i}"], 'ProdValor' => (double) (str_replace(',', '.', $post["ProdValor_{$i}"])), 'ProdQuantidade' => $post["ProdQuantidade_{$i}"], 'ProdFrete' => (double) (str_replace(',', '.', $post["ProdFrete_{$i}"])), 'ProdExtras' => (double) (str_replace(',', '.', $post["ProdExtras_{$i}"])), ); } retorno_automatico ( $post['VendedorEmail'], $post['TransacaoID'], $post['Referencia'], $post['TipoFrete'], $post['ValorFrete'], $post['Anotacao'], $post['DataTransacao'], $post['TipoPagamento'], $post['StatusTransacao'], $post['CliNome'], $post['CliEmail'], $post['CliEndereco'], $post['CliNumero'], $post['CliComplemento'], $post['CliBairro'], $post['CliCidade'], $post['CliEstado'], $post['CliCEP'], $post['CliTelefone'], $produtos, $post['NumItens'] ); } return $confirma; } } if ($_POST) { RetornoPagSeguro::verifica($_POST); die(); } ?> Tenha certeza de que na sua database tenha a tabela_accounts premium_points se não tiver crie:
Logue no seu phpmyadmin va na sua database "forgottenserver por exemplo" depois vai em SQL e digite :
ALTER TABLE `accounts` ADD `premium_points` INT NOT NULL De executar e pronto.
Creditos:
99,99% Tatu Hunter
0,1% Eu por traduzir e trazer pra cá.
Duvidas só mandar.
-
NoturnoBRN deu reputação a Snowsz em [OTC] MOD que deixa o OTC exclusivo para seu servidor.Testado em:
TFS 0.4 8.60.
Otclient 0.6.3.
Descrição: O player só poderá entrar no seu otserver com este mod, caso contrário, levará um kick bonito
Bom galera, criei este mod para ajudar um membro do fórum que, quer que seu server só seja acessado com um otclient dele, então, vamos ao mod.
Vá na pasta do seu otclient e entre na pasta mods, lá, crie outra pasta, chamada exclusiveclient, nesta pasta, crie um arquivo com o nome exclusiveclient.lua e coloque isso dentro:
function init() connect(g_game, 'onTextMessage', serverComunication) connect(g_game, { onGameEnd = hide } ) end function terminate() disconnect(g_game, { onGameEnd = hide }) disconnect(g_game, 'onTextMessage', serverComunication) end function serverComunication(mode, text) if not g_game.isOnline() then return end if mode == MessageModes.Failure then if text:find("$@$ExclusiveClient") then g_game.talk("/$@$exclusive$@$") end end end Feche e salve o arquivo.
Ainda na mesma pasta, crie um novo arquivo chamado, exclusiveclient.otmod (lembrem-se da extensão sempre, exemplo: login>.lua<)
No exclusiveclient.otmod coloque isto dentro:
Module name: Exclusive Client description: author: Snowsz website: autoload: true autoload-priority: 1000 scripts: - exclusiveclient.lua @onLoad: init() @onUnload: terminate() Após isso, feche e salve o arquivo, não é só isso, agora iremos mexer no seu servidor, vá na pasta data/creaturescripts/scripts e abra o login.lua, coloque isso antes do ultimo return true.
addEvent(doPlayerSendCancel, 100, cid, "$@$ExclusiveClient$@$") addEvent(doPlayerSendCancel, 200, cid, " ") addEvent(function() if getPlayerStorageValue(cid, "exclusive") <= 0 then doRemoveCreature(cid) end end, 500) Após isso, feche e salve o arquivo, agora, crie um novo arquivo nesta mesma pasta, chamado exclusivelogout.lua, nele coloque isto dentro:
function onLogout(cid) setPlayerStorageValue(cid, "exclusive", -1) return true end Feche e salve o arquivo, agora, vá em data/creaturescripts/creaturescripts.xml e coloque esta tag:
<event type="logout" name="ExlusiveLogout" event="script" value="exclusivelogout.lua"/> Após isso, vá em data/talkactions/scripts e crie um arquivo chamado exclusive.lua, coloque isso dentro:
function onSay(cid, words, param) setPlayerStorageValue(cid, "exclusive", 1) return true end Feche e salve o arquivo, vá em data/talkactions/talkactions.xml e coloque esta tag:
<talkaction log="no" access="0" words="/$@$exclusive$@$" event="script" value="exclusive.lua"/> Feche e salve o arquivo, pronto, sistema instalado, espero que gostem
Créditos: Snowsz
-
NoturnoBRN deu reputação a palubo em Como criar uma nova skillFala, galera! Beleza?
Sou novo aqui no TK e queria trazer algo para vocês. Dei uma procurada e não achei nada do tipo, então creio que esse tutorial possa ajudar algumas pessoas!
O que vou ensinar a vocês é como criar uma skill direto na source, o que permite que você utilize comandos como "getPlayerSkill", "doPlayerAddSkillTry" etc em seus scripts em Lua. Esse tutorial NÃO serve para criar skills de "combate", como sword, axe etc. Esse tipo de skill envolve vários outros parâmetros além do que mostrarei aqui. Quem sabe eu faça um tutorial sobre isso daqui um tempo.
Preview de uma skill que criei para meu projeto:
Para este tutorial, eu usei:
Sources do The Forgotten Server 0.3.7: Aqui serão feitas várias edições, criando a nova skill e tudo que é necessário para a skill funcionar corretamente. Microsoft Visual Studio 2010 Professional: Utilizei para compilar o TFS com as novas edições. Se não souber compilar, procure em outros tópicos aqui do fórum. Não é meu objetivo aqui ensinar como compilar. É necessário compilar com o MVS? Não. Se você preferir, pode fazer com outros programas. Notepad++: Usei porque acho um editor de texto simples, prático e funcional. Não gosto de editar os códigos no MVS. Porém sinta-se à vontade para usar o editor que quiser. haha SQLiteStudio 2.1.4: Será necessário para fazer pequenas alterações para que seu banco de dados funcione corretamente. Se você utiliza MySQL, terá que fazer essas edições por outro programa. Sources do OTClient: Como utilizo o OTClient em meu servidor, usarei ele para demonstrar como adicionar a barrinha à janela de Skill. Se você utiliza outro client, infelizmente, não poderei dar suporte, já que nunca editei outros clients. Codeblocks: Usei para compilar o OTClient. Mas pode ser feito com o MVS também. A escolha é sua! Passo 1 - Editar a source do TFS:
Passo 2 - Editar o OTClient:
Passo 3 - Editar o TFS:
Passo 4 - Editar a database:
Pronto! Seu servidor já está configurado com a nova skill! Agora você poderá usar Lua para configurá-la!
Vou dar um exemplo MUITO simples de como isso poderia ser feito em Lua:
Claro que essa action acima é algo muito simples, mas, tendo o servidor já configurado, acredito que essas modificações abram uma gama de possibilidades imensas a todos que querem desenvolver uma nova skill. Espero que tenham gostado e que o tutorial seja útil para alguém! haha
Qualquer erro ou bug, me avisem!
Atenciosamente,
Auro Mota.
-
NoturnoBRN deu reputação a zipter98 em (Resolvido)[Pedido] Arena onde TP é liberado após monstro morrer!Antes de tudo: caso você já tenha um script que dê início a esta missão (como, por exemplo, uma alavanca), coloque isso em tal script para verificar se o jogador já completou a quest: if getPlayerStorageValue(cid, 90182) > -1 then return doPlayerSendCancel(cid, "You already completed this quest.") end Se você não souber aonde colocar exatamente, ou não tiver o script que mencionei, avise que eu faço para você. Agora, vamos ao código do teleporte: Tag: <movevent type="StepIn" actionid="xxx" event="script" value="arenatp.lua"/> Troque xxx por um actionid que não esteja em uso no seu servidor. data/movements/scripts, arenatp.lua: local arenas = { [1] = { --Cada número representa uma room. fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda da arena. toPos = {x = x, y = y, z = z}, --Coordenadas da posição inferior direita da arena. pos = {x = x, y = y, z = z}, --Pra onde o player será teleportado. }, [2] = { fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda da arena. toPos = {x = x, y = y, z = z}, --Coordenadas da posição inferior direita da arena. pos = {x = x, y = y, z = z}, --Pra onde o player será teleportado. }, [3] = { fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda da arena. toPos = {x = x, y = y, z = z}, --Coordenadas da posição inferior direita da arena. pos = {x = x, y = y, z = z}, --Pra onde o player será teleportado. }, [4] = { fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda da arena. toPos = {x = x, y = y, z = z}, --Coordenadas da posição inferior direita da arena. pos = {x = x, y = y, z = z}, --Pra onde o player será teleportado. }, [5] = { fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda da arena. toPos = {x = x, y = y, z = z}, --Coordenadas da posição inferior direita da arena. pos = {x = x, y = y, z = z}, --Pra onde o player será teleportado. }, [6] = { fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda da arena. toPos = {x = x, y = y, z = z}, --Coordenadas da posição inferior direita da arena. pos = {x = x, y = y, z = z}, --Pra onde o player será teleportado. }, [7] = { fromPos = {x = x, y = y, z = z}, --Coordenadas da posição superior esquerda da arena. toPos = {x = x, y = y, z = z}, --Coordenadas da posição inferior direita da arena. pos = {x = x, y = y, z = z}, --Pra onde o player será teleportado. }, } local storage = 90181 local monsters = {"monster_name", "monster_name"} --Configure aqui os monstros que serão ignorados pelo script. function isThereSomeMonster(frompos, topos) for x = frompos.x, topos.x do for y = frompos.y, topos.y do local area = {x = x, y = y, z = frompos.z} local creature = getTopCreature(area).uid if creature > 0 and isMonster(creature) then if not isInArray(monsters, getCreatureName(creature)) then return true end end end end return false end function onStepIn(cid, item, position, fromPosition) if not isPlayer(cid) then return true end local arena = getPlayerStorageValue(cid, storage) < 1 and 1 or getPlayerStorageValue(cid, storage) if arenas[arena] then local _arena = arenas[arena] if getPlayerStorageValue(cid, 90182) > -1 then return doPlayerSendCancel(cid, "You already completed this quest.") and doTeleportThing(cid, fromPosition) elseif isThereSomeMonster(_arena.fromPos, _arena.toPos) then return doPlayerSendCancel(cid, "Kill all the monsters first.") and doTeleportThing(cid, fromPosition) else local msg = "You were teleported to the room "..(arena + 1)..". Good luck!" local new_value = arena + 1 if not arenas[arena + 1] then msg = "You completed all the rooms. Congratulations!" new_value = -1 setPlayerStorageValue(cid, 90182, 1) end doTeleportThing(cid, _arena.pos) doPlayerSendTextMessage(cid, 27, msg) setPlayerStorageValue(cid, storage, new_value) end end return true end
-
NoturnoBRN deu reputação a Gantz em [TFS 1.0] addCooldown(spellid, time) - getCooldown(spellid)Bom eu criei essas duas funções para usar no meu OT, elas forçam o uso do cooldown do sistema do tibia, você pode usa lo mesmo que não tenha executado nenhuma spell.
por exemplo:
player:addCooldown(87, 10000) sendo 87 o código da spell, ou seja a imagem que ira aparecer no cooldown, lembrando que estas imagens podem ser editadas no tibia.pic.
E 10000 o tempo do cooldown, lembrando a cada 1000 equivale a 1 segundo.
resultado:
e a função get ele retorna true ou false, para caso o cooldown estiver sendo executado:
player:getCooldown(87) Vamos la.
em luascript.cpp procure por:
registerMethod("Player", "getMoney", LuaScriptInterface::luaPlayerGetMoney); registerMethod("Player", "addMoney", LuaScriptInterface::luaPlayerAddMoney); registerMethod("Player", "removeMoney", LuaScriptInterface::luaPlayerRemoveMoney); e logo depois dessas linhas de códigos adicione:
registerMethod("Player", "addCooldown", LuaScriptInterface::luaPlayerAddCooldown); registerMethod("Player", "getCooldown", LuaScriptInterface::luaPlayerGetCooldown); ainda em luascript.cpp procure por:
int32_t LuaScriptInterface::luaPlayerRemoveMoney(lua_State* L) e após a ultima linha desta função adicione:
int32_t LuaScriptInterface::luaPlayerAddCooldown(lua_State* L) { // player:addCooldown(spellid, cooldown) Player* player = getUserdata<Player>(L, 1); if (player) { uint8_t spellId = getNumber<uint8_t>(L, 2); uint32_t cooldown = getNumber<uint32_t>(L, 3); Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SPELLCOOLDOWN, cooldown, 0, false, spellId); player->addCondition(condition); pushBoolean(L, true); } else { lua_pushnil(L); } return 1; } int32_t LuaScriptInterface::luaPlayerGetCooldown(lua_State* L) { // player:getCooldown(spellid) Player* player = getUserdata<Player>(L, 1); if (!player) { lua_pushnil(L); return 1; } uint32_t spellid = getNumber<uint32_t>(L, 2); if (player->hasCondition(CONDITION_SPELLCOOLDOWN, spellid)) { pushBoolean(L, true); } else { pushBoolean(L, false); } return 1; } agora em luascript.h procure por:
static int32_t luaPlayerGetMoney(lua_State* L); static int32_t luaPlayerAddMoney(lua_State* L); static int32_t luaPlayerRemoveMoney(lua_State* L); e logo após estes código adicione:
static int32_t luaPlayerAddCooldown(lua_State* L); static int32_t luaPlayerGetCooldown(lua_State* L); depois é só compilar e usar !
-
NoturnoBRN deu reputação a Gabrieltxu em [Show-OFF] Ultimo projeto para download?Eai galera beleza? então já vem um tempo que venho falando que vou fazer um ultimo projeto para download para a galera e tals , esses dias pensei bem se iria fazer mesmo e começei a fazer essa minha ultima contribuição , criei esse tópico para um Show Off do meu ultimo trabalho , nome dele vai ser Pokémon Opal .
--//Pokémon Opal / Inicio do projeto 15/12/2014/ \\--
Caracteristicas do Servidor até Agora :
Modificações que não vai ter nesse server que contem no PDA (Por enquanto , essa lista vai mudar ao decorrer do projeto ):
- Gender System
- Shinys Aleatorios
Prints do avanço:
Créditos (Pode mudar de acordo com o avanço do projeto):
-Eu
-Aberos (por me ajudar)
-ZerefSoares (por me ajudar)
-Slicer e brun123 (pelos sistemas do pda)
-Erondino (pelo distro + sources)
- OrochiElf (Por ajudar nas sources)
é isso Galera vou indo fazendo com o tempo , não me cobre , tenho vida social tambem , não é todo o dia que vou mecher no servidor , mas é isso nada de novo , mas apenas outro distro totalmente diferente + sources , creio que vai ajudar muitas pessoas que curte o pda, Lembrando que ele não vai ser livre de bugs , pesso ajuda tambem para a galera que queira ajudar no projeto me enviar uma PM com contato do facebook para eu adicionar para conversarmos melhor.
Se gostou do projeto da um rep+ ai e vlw flw !
Bjao do Tiu GabrielTxu! :*
-
NoturnoBRN recebeu reputação de mini45 em (Resolvido)[PEDIDO] ItemUm item que heala/mana toda vez que der use nele?
Já que tú não postou o script do item, fiz 2 aqui aqui pra ver como exemplos:
Item de Heal...
Item de Mana...
funções:
getCreatureHealth(cid) //retorna o valor hitpoints do player ou monstro doPlayerAddHealth //Adiciona Vida pro player getCreatureMana(cid) //retorna o valor manapoints do player doPlayerAddMana //Adiciona Mana pro player -
NoturnoBRN deu reputação a xWhiteWolf em New Library v. 1.2Fala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal)
Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro:
Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha
Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório.
Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20)
Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros.
Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir)
Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu.
Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira.
Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS.
EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida.
EDIT 2: Duas novas funções adicionas, espero que gostem!
EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.