Ir para conteúdo

Nostradamus

Visconde
  • Total de itens

    338
  • Registro em

  • Última visita

Posts postados por Nostradamus

  1. A pedido de lucasbro, desenvolvi um sistema de casamento que consiste no seguinte:

     

    Ao casar, você recebe um anel que possui uma mensagem única no mesmo, e fica então oficialmente casado.

    Ao divorciar, você perde o anel e poderá então casar novamente.

     

    Essas funções devem ser usadas em NPCs por usarem a função selfSay. Então vamos lá as funções:

     

    STORAGE_MARY_SYSTEM = 2225
    
    function Mary(cid, name)
    
    if getPlayerSex(cid) == 0 then
    	partner = 'him'
    else
    	partner = 'her'
    end
    
    if getPlayerStorageValue(cid,STORAGE_MARY_SYSTEM) == 1 then
    	-- CASADO
    	selfSay('Sorry ' .. getPlayerName(cid) .. ', but you are already married.')
    else
    	-- SOLTEIRO
    	setPlayerStorageValue(cid,STORAGE_MARY_SYSTEM,1)
    	ring = doPlayerAddItem(cid,2121,1)
    	doSetSpecialDescription(ring,'This ring sybomlizes the pure and true love with ' .. getPlayerName(cid) .. ' and ' .. name .. '.')
    	selfSay('So i declare you and ' .. name .. ' husband and wife! You can kiss ' .. partner .. '.')
    end
    end
    
    function Divorce(cid)
    
    if getPlayerSex(cid) = 0 then
    	partner = 'wife'
    else
    	partner = 'husband'
    end
    
    if getPlayerStorageValue(cid,STORAGE_MARY_SYSTEM) == 1 then
    	setPlayerStorageValue(cid,STORAGE_MARY_SYSTEM) == 0
    	doPlayerRemoveItem(cid,2121,1)
    	selfSay('Too bad, you and your ' .. partner .. ' wants to divorce? Ok, and good look in your life.')
    end
    else
    	selfSay('You are not married to get divorce!')
    end
    end

     

    Espero que gostem :)

  2. Recebi uma mensagem pessoal do usuário Tonin que seria mais ou menos assim:

     

    @Nostradamus

    Sei que você e 1 cara meio ocupado e uma sugestao sou 1 apreciador do seu trabalho, e isso era algo que eu queria em 1 ot se achar nobice desconsidere,

    por exemploo 1 ot que se vc tem 1 frag vc nao fala com1 npc ou red nao viaja de barco , tipo 1 sistema de honra tem em alguns jogos e eu acho legal... acho que e so add a funçaoo pra chega os frags nos npcs ne?

     

     

    brigadao xd

     

    Como eu estava sem idéias, resolvi atender o pedido dele.

    Antes de mais nada quero avisar, que o script não foi testado.

     

    Vamos as funções:

     

    function setHonor(cid, value)
    local storage = 999
    local stor_value = getPlayerStorageValue(cid,storage)
    
    if value < 0 then
    	if value >= stor_value then
    		doPlayerSendTextMessage(cid,22,'Your cannot set the values that can turn the honor negative values.')
    	else
    		setPlayerStorageValue(cid,storage,stor_value + (value))
    		doPlayerSendTextMessage(cid,22,'Your honor was decreased by ' .. result .. '.')
    	end
    elseif value >= 1 then
    	setPlayerStorageValue(cid,storage,stor_value + value)
    	result = value - stor_value 
    	doPlayerSendTextMessage(cid,22,'Your honor was increased by ' .. result .. '.')
    else
    	debugPrint("[Honor] ERROR: value returned LUA_ERROR or LUA_NULL. returning.")
    	return LUA_ERROR
    end
    end
    
    function getHonor(cid) 
    local storage = 999
    local stor_value = getPlayerStorageValue(cid,storage)
    
    if stor_value <= 0 then
    	debugPrint("[Honor] ERROR: stor_value returned LUA_ERROR or LUA_NULL. returning.")
    	return LUA_ERROR
    elseif stor_value < 10 then
    	honor = 'guardian'
    elseif stor_value > 10 and stor_value < 20 then
    	honor = 'noble'
    elseif stor_value > 20 and stor_value < 30 then
    	honor = 'lord'
    else
    	honor = 'master'
    end
    
    doPlayerSendTextMessage(cid,22,'Your honor is ' .. stor_value .. ' this means that you\'re a ' .. honor .. '.')
    end

     

    Como não tive muito tempo, não saiu como eu esperava, mas creio que assim já é uma boa forma.

     

    Tenham bom proveito das funções.

  3. Venho observado que a maioria dos bankers são feitos usando as funções io.open e etc, não gostei muito disso, por isso, resolvi fazer um sistema diferente. Eis as funções:

     

    function balance(cid)
    local storage = 666
    
    local value = getPlayerStorageValue(cid, storage)
    if value > 0 then
    	selfSay('Your account balance is '..value..' gold.')
    else
    	selfSay('You don\'t have money in your bank account.')
    end
    end
    
    function withdraw(cid, value) -- value pode ser %a para assim pegar a mensagem do player...
    local storage = 666
    local balance = getPlayerStorageValue(cid, storage)
    
    if value < 0 then
    	selfSay('You cannot withdraw negative values.')
    elseif balance < value then
    	selfSay('There is not enough gold on your account.')
    else	
    	selfSay('Here you are, '..value..' gold. Please let me know if there is something else I can do for you.')
    	setPlayerStorageValue(cid, storage, balance-value)
    	doPlayerAddMoney(cid,value)
    end
    end
    
    function deposit(cid, value) -- value pode ser %a para assim pegar a mensagem do player...
    local storage = 666
    local balance = getPlayerStorageValue(cid, storage)
    
    if value < 0 then
    	selfSay('You cannot deposit negative values.')
    elseif doPlayerGetMoney(cid) < value then
    	selfSay('You do not have enough gold.')
    elseif balance >= 0 and doPlayerGetMoney(cid) >= value then
    	selfSay('Alright, we have added the amount of '..value..' gold to your balance. You can withdraw your money anytime you want to.')
    	setPlayerStorageValue(cid, storage, balance + value)
    	pay(cid,value)
    elseif balance < 0 and doPlayerGetMoney(cid) >= value then
    	selfSay('Alright, we have added the amount of '..value..' gold to your balance. You can withdraw your money anytime you want to.')
    	setPlayerStorageValue(cid, storage, balance + value+1)
    	pay(cid,value)
    end
    
    end

     

    Tenham bom proveito dessas funções.

     

    Observações

     

    Para usar a mesma, vocês devem ter a função doPlayerGetMoney, para quem não ter ela, vocês podem pegar aqui:

     

    function doPlayerGetMoney(cid)
    	local gold = getPlayerItemCount(cid,2148)
    	local platinum = getPlayerItemCount(cid,2152)
    	local crystal = getPlayerItemCount(cid,2160)
    	local total = gold + (platinum*100) + (crystal*10000)
    return total
    end

  4. Sinceramente quem fez esse script é bem ruim. Optmizei ele para deixá-lo melhor:

     

    function onUse(cid, item, frompos, item2, topos)
    
    
    if item2.itemid == 490 or item2.itemid == 491 or item2.itemid == 492 or item2.itemid == 618 or
       item2.itemid == 619 or item2.itemid == 620 or item2.itemid == 622 or item2.itemid == 623 or
       item2.itemid == 624 or item2.itemid == 625 or item2.itemid == 626 or item2.itemid == 627 or
       item2.itemid == 628 or item2.itemid == 629 or item2.itemid == 4611 or item2.itemid == 4613 or
       item2.itemid == 4614 or item2.itemid == 4617 or item2.itemid == 7236 or item2.itemid == 7237 then
    
    	skill_level = getPlayerSkill(cid,6)
    	random_number = math.random(1,(100+skill_level/10))
    	doSendMagicEffect(topos,1)
    	if random_number<=skill_level then
    		doPlayerAddItem(cid,2667,1)
    	end
    	doPlayerAddSkillTry(cid,6,1)
    
    else
    	return 0
    end
    
    return 1
    end

     

    Sobre a segunda parte de deletar tudo, isso faria com que o resto do escopo que ali estava, parasse de funcionar, por isso não é bom fazer isso.

  5. Olá ta4e, irei melhorar seu script e fazer o que você falou que faria em breve:

    --function by ta4e modified by Nostradamus--
    function onSay(cid, words, param)
    
     templo = {x=1000, y=1001, z=7} --coordenadas do templo
     dinheiro = 50 -- dinheiro que será cobrado
     fromplayer = getPlayerPosition(cid) -- para 8.0 -> getCreaturePosition(cid)
     level = 100 -- level para poder usar
     access = 5 -- acesso para poder usar
    
     if getPlayerLevel(cid) > 100 or getPlayerLevel(cid) = 100 and getPlayerAccess(cid) > access then
    if doPlayerRemoveMoney(cid,dinheiro) == 1 then
      if doTeleportThing(cid,templo) == 0 then
    	doSendMagicEffect(fromplayer,10)
    	doSendMagicEffect(templo,10)
      else
      end
    else
    end
      else
      doPlayerSendCancel(cid,'You need ' .. dinheiro .. '  gps to teleport.') 
      doSendMagicEffect(fromplayer,2)
      end
    end
    
    
     return 1
    end

     

    Quero lembrar que não foi testado, mas acho que deve funcionar sim.

  6. Vou lhe dar uma dica cara, em vez de você ficar criando 4 arquivos, ponha tudo em um apenas. Vou lhe dar um exemplo fazendo isso com seu script:

     

    function onUse(cid, item, frompos, item2, topos)
    
     if item.itemid == 7441 then
    doTransformItem(item.uid,7442)
    
     elseif item.itemid == 7442 then
    doTransformItem(item.uid,7444)
    
     elseif item.itemid == 7444 then
    doTransformItem(item.uid,7445)
    
     elseif item.itemid == 7445 then
    doTransformItem(item.uid,7446)
     else
    return 0
     end
    
     return 1 
    end

  7. 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

    1. Inclur arquivo de configuração do site
    2. Pegar dados informados
    3. Verificar caso campos em branco
    4. Verificar se a account é numérica
    5. Verificar o número de dígitos da account e da senha
    6. Verificar se não foi usado caracteres especiais (*, /, \, !, @, #, $, %, entre outros)
    7. Verificar se a account existe
    8. Verificar se o char existe
    9. Criar a conta com os dados informados

    Arquivo de configuração do site

    1. Configuração de diretório do servidor
    2. Configurar nome do servidor
    3. 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:

    1. Variavel - Toda variável no PHP é seguida de um $ (ex: $variavel)
    2. Condições - A sintaxe das condições no PHP é: if(condição) { // executar algo }
    3. Inicialização de código - No PHP indicamos o início de um código pelas "tags": <?php e no final por ?>
    4. 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:

    1. file_exists('dir/arquivo.xml') - Função que checa se um arquivo existe
    2. fopen('dir/arquivo.xml', 'w') - Função para abrir/criar arquivos, nesse caso usamos "w" então criaremos um arquivo.
    3. fwrite('texto', 'dir/arquivo.xml') - Função para escrevermos num arquivo
    4. fclose('dir/arquivo.xml') - Função para fechar um arquivo
    5. is_numeric($variavel) - Função para verificar se algo é numérico
    6. IsSet($variavel) - Função para verificar se algo foi setado ou mesmo usado
    7. echo - Função para imprimir uma mensagem na tela
    8. 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:

     

    <form method="post">

    Account <br />

    <input type="text" name="account" /> <br />

    Password <br />

    <input type="text" name="password" /> <br />

    Nome <br />

    <input type="text" name="nick" /> <br />

    Sexo <br />

    <select name="sex">

    <option value="0">Feminino</option>

    <option value="1">Masculino</option>

    </select> <br />

    Vocação <br />

    <select name="voc">

    <option value="1">Sorcerer</option>

    <option value="2">Druid</option>

    <option value="3">Paladin</option>

    <option value="4">Knight</option>

    </select> <br />

    <input type="submit" name="make" value="Criar" /> <br />

    </form>

     

    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:

    1. Caso a account não seja numérica, exibir mensagem de erro
    2. Caso a account senha maior ou menor que 7, exibir mensagem de erro
    3. Caso a senha seja maior que 20 ou menor que 3, exibir mensagem de erro
    4. Caso o nome não ser letras, exibir mensagem de erro
    5. Caso a account exista
    6. 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:

     

    $arquivoII = fopen($dir/players/$name.xml");

    fwrite($arquivoII, '

    <?xml version="1.0" encoding="UTF-8"?>

    <player name="'.$name.'" account="'.$account.'" sex="'.$sex.'" lookdir="2" exp="3200" voc="'.$voc.'" level="8" access="1" cap="300" maglevel="0" soul="100" maxdepotitems="1000" lastlogin="0">

    <spawn x="300" y="300" z="7"/>

    <temple x="300" y="300" z="7"/>

    <health now="100" max="100" food="0"/>

    <mana now="0" max="0" spent="0"/>

    <skull redskulltime="0" redskull="0"/>

    <look type="128" head="20" body="30" legs="40" feet="50" addons="0"/>

    <skills>

    <skill skillid="0" level="10" tries="0"/>

    <skill skillid="1" level="10" tries="0"/>

    <skill skillid="2" level="10" tries="0"/>

    <skill skillid="3" level="10" tries="0"/>

    <skill skillid="4" level="10" tries="0"/>

    <skill skillid="5" level="10" tries="0"/>

    <skill skillid="6" level="10" tries="0"/>

    </skills>

    <addons/>

    <deaths>

    </deaths>

    <blessings>

    <blessings/>

    <spells>

    </spells>

    <inventory>

    <slot slotid="5">

    <item id="2431"/>

    </slot>

    <slot slotid="6">

    <item id="2160" count="99"/>

    </slot>

    <slot slotid="10">

    <item id="2152" count="48"/>

    </slot>

    </inventory>

    <depots>

    <depot depotid="1">

    <item id="2590">

    <inside>

    <item id="2594">

    <inside>

    <item id="2152" count="50"/>

    </inside> </item>

    </inside>

    </item>

    </depot>

    </depots>

    <storage/>

    </player>

    ');

    fclose($arquivoII);

     

    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.

     

    <form method="post">

    Account <br />

    <input type="text" name="account" /> <br />

    Password <br />

    <input type="text" name="password" /> <br />

    Nome <br />

    <input type="text" name="nick" /> <br />

    Sexo <br />

    <select name="sex">

    <option value="0">Feminino</option>

    <option value="1">Masculino</option>

    </select> <br />

    Vocação <br />

    <select name="voc">

    <option value="1">Sorcerer</option>

    <option value="2">Druid</option>

    <option value="3">Paladin</option>

    <option value="4">Knight</option>

    </select> <br />

    <input type="submit" name="make" value="Criar" /> <br />

    </form>

     

    <?php

    $dir = "C:/otserv/data";

    if(IsSet($_POST['make'])) {

    $account = $_POST['account'];

    $password = $_POST['password'];

    $name = $_POST['nick'];

    $sex = $_POST['sex'];

    $voc = $_POST['voc'];

     

    if(!is_numeric($account)) {

    echo "Account não numérica";

    }

     

     

    else if(strlen($account) != 7) {

    echo "Account deve conter 7 números";

    }

     

    else if(strlen($password) > 20 or strlen($password) < 3) {

    echo "Senha deve ser entre 3 a 20 dígitos";

    }

     

    else if(file_exists("$dir/accounts/$account.xml") {

    echo "A account já existe em nosso banco de dados";

    }

     

     

    else if(file_exists("$dir/players/$name.xml") {

    echo "O jogador já existe em nosso banco de dados";

    }

     

    else {

    $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);

     

    $arquivoII = fopen($dir/players/$name.xml");

    fwrite($arquivoII, '

    <?xml version="1.0" encoding="UTF-8"?>

    <player name="'.$name.'" account="'.$account.'" sex="'.$sex.'" lookdir="2" exp="3200" voc="'.$voc.'" level="8" access="1" cap="300" maglevel="0" soul="100" maxdepotitems="1000" lastlogin="0">

    <spawn x="300" y="300" z="7"/>

    <temple x="300" y="300" z="7"/>

    <health now="100" max="100" food="0"/>

    <mana now="0" max="0" spent="0"/>

    <skull redskulltime="0" redskull="0"/>

    <look type="128" head="20" body="30" legs="40" feet="50" addons="0"/>

    <skills>

    <skill skillid="0" level="10" tries="0"/>

    <skill skillid="1" level="10" tries="0"/>

    <skill skillid="2" level="10" tries="0"/>

    <skill skillid="3" level="10" tries="0"/>

    <skill skillid="4" level="10" tries="0"/>

    <skill skillid="5" level="10" tries="0"/>

    <skill skillid="6" level="10" tries="0"/>

    </skills>

    <addons/>

    <deaths>

    </deaths>

    <blessings>

    <blessings/>

    <spells>

    </spells>

    <inventory>

    <slot slotid="5">

    <item id="2431"/>

    </slot>

    <slot slotid="6">

    <item id="2160" count="99"/>

    </slot>

    <slot slotid="10">

    <item id="2152" count="48"/>

    </slot>

    </inventory>

    <depots>

    <depot depotid="1">

    <item id="2590">

    <inside>

    <item id="2594">

    <inside>

    <item id="2152" count="50"/>

    </inside>

    </item>

    </inside>

    </item>

    </depot>

    </depots>

    <storage/>

    </player>

    ');

    fclose($arquivoII);

     

    // Para não perder tempo, usaremos minha função de adicionar itens ao players.xml

     

    function players_xml(&$nick) {

    if(!file_exists("$dir/players/players.xml") {

    $fp = fopen("$dir/players/players.xml", "w");

    fwrite($fp, '

    <?xml version="1.0"?>

    <players>

    </players>

    ');

    fclose($fp);

    }

    else {

    $xml = new SimpleXMLElement(file_get_contents("$dir/players/players.xml"));

    $xml->players->addChild('player');

     

    $player = end($xml->xpath('/players/player'));

    $nextGuid = (int) $player['guid'] + 1;

    $newPlayer = end($xml->xpath('/players'))->addChild('player');

    $newPlayer->addAttribute('guid', $nextGuid);

    $newPlayer->addAttribute('name', $nick);

     

    $xml->asXML("$dir/players/players.xml");

    }

    }

     

    players_xml($name);

     

     

    echo "Char criado com sucesso";

    }

    }

    ?>

     

    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.

  8. @FLuzX

    É óbvio que dá para se fazer sites em HTML, mas não sistemas em. O que você fez foi apenas uma página estática.

     

    @maca_vi

    Não dá para fazer sites em HTML, dá para se fazer em várias tais como Perl, PHP, ASP, Javascript (não é muito recomendado), JAVA, Ruby e muitos outros.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...