-
Total de itens
338 -
Registro em
-
Última visita
Tudo que Nostradamus postou
-
Tópico movido. Destino: Informática -> Dúvidas.
-
Otserver Lua Functions & Structures!
tópico respondeu ao bizugo de Nostradamus em Tutoriais de Scripting
Seria bom que você desse a sintaxe e a descrição de cada uma também. -
@thiagosh Não estava não
-
Introdução Estava observando que em 99,9 % dos casos de sites, a maioria apenas troca de layout. Pois hoje ensinarei a criar um website simples em PHP na garra! Requerimentos Conheçimento básico de HTML Um pouco de lógica, para saber o que é possível e o que não é dentro do PHP Dedicação Editor de textos (Bloco de notas, notepad++, entre outros) Lógica estruturada Primeiramente, antes de entrar em qualquer linguagem, vamos planejar como o site será. Formulário para account, senha, nome do char, vocação, sexo Inclur arquivo de configuração do site Pegar dados informados Verificar caso campos em branco Verificar se a account é numérica Verificar o número de dígitos da account e da senha Verificar se não foi usado caracteres especiais (*, /, \, !, @, #, $, %, entre outros) Verificar se a account existe Verificar se o char existe Criar a conta com os dados informados Arquivo de configuração do site Configuração de diretório do servidor Configurar nome do servidor Configurar life, mana, level, skills, entre outros dos jogadores a serem criados Rápida explicação Para entender o que iremos fazer em PHP é fácil vamos trabalhar com isso no código: Variavel - Toda variável no PHP é seguida de um $ (ex: $variavel) Condições - A sintaxe das condições no PHP é: if(condição) { // executar algo } Inicialização de código - No PHP indicamos o início de um código pelas "tags": <?php e no final por ?> Comentários - No PHP indicamos um comentário simples por // texto livre ou um comentário multi-linha por /* texto simples */ Usaremos algumas funções nativas do PHP, são elas: file_exists('dir/arquivo.xml') - Função que checa se um arquivo existe fopen('dir/arquivo.xml', 'w') - Função para abrir/criar arquivos, nesse caso usamos "w" então criaremos um arquivo. fwrite('texto', 'dir/arquivo.xml') - Função para escrevermos num arquivo fclose('dir/arquivo.xml') - Função para fechar um arquivo is_numeric($variavel) - Função para verificar se algo é numérico IsSet($variavel) - Função para verificar se algo foi setado ou mesmo usado echo - Função para imprimir uma mensagem na tela strlen - Função para verificar o número de caracteres de uma palavra (string) Mãos na massa! Primeiramente, criemos uma variável e damos a ela um valor de um diretório, o diretório da pasta data: $dir = "C:/otserv/data"; // não coloque o "/" no final Agora, vamos fazer um formulário em HTML, irei fazer um bem simples para o fácil entendimento: Vejamos agora o texto em negrito: Podemos observar que demos nomes para os campos para texto e botões, podemos dar o nome disso de identificação. Usaremos isso para saber quais valores correspondem a tais lugares. Pois sem isso, como saberíamos os dados informados? Observe que usamos o método (method) post para pegar os dados, que no PHP é "chamado" por $_POST['campo']; Vejamos como pegamos a account, senha, nome, e dados do player com POST: $account = $_POST['account']; $password = $_POST['password']; $name = $_POST['nick']; $sex = $_POST['sex']; $voc = $_POST['voc']; Depois de tudo pronto, está na hora de por a mão na massa começando a fazer as condições de criação. Primeiramente vamos ver quais faremos: Caso a account não seja numérica, exibir mensagem de erro Caso a account senha maior ou menor que 7, exibir mensagem de erro Caso a senha seja maior que 20 ou menor que 3, exibir mensagem de erro Caso o nome não ser letras, exibir mensagem de erro Caso a account exista Caso o char exista Vamos fazer pela ordem então: 1) Caso a account não seja numérica, exibir mensagem de erro if(!is_numeric($account)) { echo "Account não numérica"; } 2) Caso a account senha maior ou menor que 7, exibir mensagem de erro if(strlen($account) != 7) { echo "Account deve conter 7 números"; } 3) Caso a senha seja maior que 20 ou menor que 3, exibir mensagem de erro if(strlen($password) > 20 or strlen($password) < 3) { echo "Senha deve ser entre 3 a 20 dígitos"; } 4) Caso o nome não ser letras, exibir mensagem de erro 5) Caso a account exista if(file_exists("$dir/accounts/$account.xml") { echo "A account já existe em nosso banco de dados"; } 6) Caso o char exista if(file_exists("$dir/players/$name.xml") { echo "O jogador já existe em nosso banco de dados"; } Agora depois de todas as condições, faremos a parte de criação da account: $arquivo = fopen("$dir/account/$account.xml"); fwrite($arquivo, ' <?xml version="1.0"?> <account pass="'.$password.'" premDays="0" premEnd="0"> <characters> <character name="'.$name.'"/> </characters> </account> '); fclose($arquivo); OBS: Lembrando que estou me baseando no Evolutions. Agora vamos fazer a criação do player: OBS: Eu apenas peguei o player padrão que vem no servidor do Evolutions, caso queira modificar, é simples. Agora, vamos para a última parte: iremos juntar tudo que foi feito. OBS: O fórum acabou com minha estruturação do código. E chegamos ao fim de mais um tutorial, qualquer dúvida, é só postar aqui.
-
@Ta4e A lógica da condição é sim, mas não precisa estar necessáriamente nessa ordem.
-
Você se esqueçeu de por function onUse....
-
Para quem não sabe, está sendo criado uma versão de OT para TibIAME, o nome é OTME.
-
@tibiaa4e Eu sempre soube C/C++ (Desde que nos conheçemos)
-
@GunsWebMaster Folgado você né? Se você se auto-entitula "Webmaster" faça você ao invés de usar códigos de terceiros.
-
Tilangotrainer [primeiro Monstro]
tópico respondeu ao Lionblood de Nostradamus em NPCs, monsters e raids
Para que você repetiu a tag: <attack name="melee" interval="2000" min="0" max="0" /> várias vezes? Não há necessidades... -
Obrigado pelos comentários. Depois irei fazer um configurável por config.lua
-
Local errado, o certo seria em Programação Open-Tibia -> Actions
-
@Jackson Zani Eu nem ia pois acho inútil, mas como o Tibia Global fez...
-
Blackonix Random Exp 0.1
tópico respondeu ao Nostradamus de Nostradamus em Linguagens de Programação
Não deve funcionar no Zorzin. Teste no Forgotten, já que Zorzin usa SVN velha. -
ATK/DEF/ARM Increase Explicação: No Tibia 8.0 nós temos algumas armas que aumentam a Def (e.g: You see a XXXX. (Atk: YY Def: ZZ + A) Fiz semelhante, mas a diferença é que ele pode aumentar o ataque ou mesmo a armor. Esse é meu primeiro código em OTServ, não tive recursos de testar, mas acho que está 100% Vamos ao código Items.cpp Em ItemType::ItemType() Adicione: atkbonus = 0; armbonus = 0; defbonus = 0; Depois de: else if(strcasecmp(strValue.c_str(), "attack") == 0){ if(readXMLInteger(itemAttributesNode, "value", intValue)){ it.attack = intValue; } } else if(strcasecmp(strValue.c_str(), "armor") == 0){ if(readXMLInteger(itemAttributesNode, "value", intValue)){ it.armor = intValue; } } else if(strcasecmp(strValue.c_str(), "defense") == 0){ if(readXMLInteger(itemAttributesNode, "value", intValue)){ it.defense= intValue; } } Adicione: else if(strcasecmp(strValue.c_str(), "atkincrease") == 0){ if(readXMLInteger(itemAttributesNode, "value", intValue)){ it.atkbonus = intValue; } } else if(strcasecmp(strValue.c_str(), "armincrease") == 0){ if(readXMLInteger(itemAttributesNode, "value", intValue)){ it.armbonus = intValue; } } else if(strcasecmp(strValue.c_str(), "defincrease") == 0){ if(readXMLInteger(itemAttributesNode, "value", intValue)){ it.defbonus = intValue; } } Troque: return baseDefense + (defense * shieldSkill) / 100; Por: if(getDefBonus) { return getDefBonus() + baseDefense + (defense * shieldSkill) / 100; } else if(getArmBonus) { return getArmBonus() + baseDefense + (defense * shieldSkill) / 100; } else if(getDefBonus && getArmBonus) { return getArmBonus() + getDefBonus() + baseDefense + (defense * shieldSkill) / 100; } else { return baseDefense + (defense * shieldSkill) / 100; } Items.h Declare esses valores: int32_t atkbonus; int32_t armbonus; int32_t defbonus; E depois de: int32_t getAttack() const {return items[id].attack;} int32_t getArmor() const {return items[id].armor;} int32_t getDefense() const {return items[id].defence;} Adicione: int32_t getAtkBonus() const {return items[id].atkbonus;} int32_t getArmBonus() const {return items[id].armbonus;} int32_t getDefBonus() const {return items[id].defbonus;} Troque: if(getAttack()) s << article(it.name) << " (Atk:" << (int32_t)getAttack() << " Def:" << (int32_t)getDefense() << ")."; else s << article(it.name) << " (Def:" << (int32_t)getDefense() << ")."; } else if(getArmor()) s << article(it.name) << " (Arm:" << (int32_t)getArmor() << ")."; Por: if(getAttack()) { if(getAtkBonus()) { s << article(it.name) << " (Atk:" << (int32_t)getAttack() << " + " << (int32_t)getAtkBonus() << " Def:" << (int32_t)getDefense() << ")."; } else if(getDefBonus()) { s << article(it.name) << " (Atk:" << (int32_t)getAttack() << " Def:" << (int32_t)getDefense() << " + " << (int32_t)getDefBonus() << ")."; } else if(getAtkBonus() && getDefBonus()) { s << article(it.name) << " (Atk:" << (int32_t)getAttack() << " + " << (int32_t)getAtkBonus() << " Def:" << (int32_t)getDefense() << " + " << (int32_t)getDefBonus() << ")."; } else { s << article(it.name) << " (Atk:" << (int32_t)getAttack() << " Def:" << (int32_t)getDefense() << ")."; } } else if(getArmor()) { if(getArmBonus()) { s << article(it.name) << " (Arm:" << (int32_t)getArmor() << ") +" << (int32_t)getArmBonus(); } else { s << article(it.name) << " (Arm:" << (int32_t)getArmor() << ")."; } } else { if(getDefBonus()) { s << article(it.name) << " (Def:" << (int32_t)getDefense() << " + " << (int32_t)getDefBonus() << ")."; } else { s << article(it.name) << " (Def:" << (int32_t)getDefense() << ")."; } } Weapons.cpp Troque: int32_t attackValue = item->getAttack(); Por: if(item->getAtkBonus()) int32_t attackValue = item->getAttack() + item->getAtkBonus(); else int32_t attackValue = item->getAttack(); Para usar é fácil: <attribute key="atkincrease" value="3"/> <attribute key="defincrease" value="5"/> <attribute key="armincrease" value="4"/> Basta por isso em algum item no items.xml Caso não queira por increases, basta deixar sem. Código desenvolvido totalmente por mim
-
A dança dos LOL's Estava sem nada, mas NADA mesmo para fazer e resolvi brincar um pouco com o PHP. Estava ouvindo um pouco de Arctic Monkeys quando tive a idéia. Vejamos abaixo: Crie um arquivo chamado lol_dancante.php E ponha: <body bgcolor="black"> <font size="50"> <?php $min = 10; $max = 40; $speed = 0.01; $rand = rand(1,7); switch($rand) { case 1: $lol = "<font color=red> <o/ <o/ <o/ <o/ <o/</font>"; break; case 2: $lol = "<font color=green>|o| |o| |o| |o| |o|</font>"; break; case 3: $lol = "<font color=purple> /o/ /o/ /o/ /o/ /o/</font>"; break; case 4: $lol = "<font color=yellow>\o> \o> \o> \o> \o></font>"; break; case 5: $lol = "<font color=orange> \o/ \o/ \o/ \o/ \o/</font>"; break; case 6: $lol = "<font color=white>\o| \o| \o| \o| \o|</font>"; case 7: $lol = "<font color=white> |o/ |o/ |o/ |o/|o/ |o/</font>"; break; default: $lol = "<font color=white> lol lol lol lol lol</font>"; } echo '<META HTTP-EQUIV="REFRESH" CONTENT="'.$speed.'; URL=lol_dancante.php">'; for($min; $min<$max; $min++) { echo $lol; } ?> </font> Agora é só executar. Caso queira mudar o número de "LOL" configure as variáveis $min e $max. Caso queira mudar a velocidade mude a varíavel $speed. Por padrão eu pus 0.01 segundos. Cuidado, pois esse script pode ser meio "perigoso" se executado com uma speed muito alta e um $min e $max altos.
-
Rapha's Ip Changer For Tibia 8.0 V 0.1
tópico respondeu ao picachu de Nostradamus em Lixeira Pública
Primeiramente o Rapha é registrado aqui sim, segundamente, o nome não é Baxnie e sim Banxie. E a única coisa que muda de 7.92 para 8.0 talvez é a RSA Key e um memory address, ou seja, nenhum trabalho extra... -
Lembrando: Dev C++ não é compilador, é uma IDE do GCC Para quem for usar o Turbo C para OT, terá provavelmente dificuldades, já que o SVN não é programado em uma forma "nativa".
-
Só achei "Baronete" um nome meio esquisito hehe
-
Olá! Modifiquei o script para deixá-lo melhor, esse math.random é desnecessário, portanto tirei ele. Esse math.random ele vai de 1 para 1, ou seja, é totalmente sem nexo e pode gerar leaks... Aqui vai a minha versão do mesmo script: --Action de skill by Armageddom modified by Nostradamus-- -- Configuração--- id_skill = 5 item_skill = 4869 num_skill = 2 ------------------- function onUse(cid, item, frompos, item2, topos) if item.itemid == item_skill then doPlayerAddSkillTry(cid,id_skill,num_skill * 1000) doRemoveItem(item.uid,1) doSendMagicEffect(frompos, 28) doSendAnimatedText(getPlayerPosition(cid), "Skill Up", TEXTCOLOR_BLUE) end end Explicando: id_skill -> É a ID do skill (0=first, 1=club, ...) item_skill -> É o item que você dará USE num_skill -> São quantos de skill que irá subir
-
Só existe um erro nessa história: Nostradamus morre. Sendo que na verdade, Nostradamus é imortal
-
@Mustorze Porque não mostra suas "incríveis" habilidades e faz melhor?
-
@JV Chequer Quem treinou esse NPC foi o próprio Chuck Norris, portanto ele não rouba e sim ganha todas (NOTA: Na verdade a chance é de 50% para cada)
-
Blackonix Random Exp 0.1
tópico respondeu ao Nostradamus de Nostradamus em Linguagens de Programação
@Clic Rejeitamos porque fizemos um melhor com opções de variação de porcentagem e maiores variações em experiência ganha. Além disso, é possível desativar o sistema facilmente.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.