Ir para conteúdo

Refe

Conde
  • Total de itens

    645
  • Registro em

  • Última visita

  • Dias Ganhos

    10

Histórico de Reputação

  1. Upvote
    Refe recebeu reputação de Taiger em Adicionando mais tiles a visão do jogador!   
    Hoje eu vim ensinar como aumenta a "tela" de jogo do OTCLIENT

    (Desculpe o merchant, era a unica imagem que eu tinha salvo)

    Testado em : 0.3.6pl1, Pode funcionar em 1.0 com alterações pequenas.


    Em protocolgame.cpp ache:
    return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) && (y >= myPos.y - 6 + offsetz) && (y <= myPos.gety + 7 + offsetz)); e troque por:
    return ((x >= myPos.x - Map::maxClientViewportX + offsetz) && (x <= myPos.x + (Map::maxClientViewportX+1) + offsetz) && (y >= myPos.y - Map::maxClientViewportY + offsetz) && (y <= myPos.y + (Map::maxClientViewportY+1) + offsetz)); Agora, continuando em protocolgame.cpp ache:
    GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); E troque por:
    GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg); Continuando em protocolgame.cpp ache a função:
    void ProtocolGame::sendMoveCreature(const Creature* creature, const Tile* newTile, const Position& newPos, uint32_t newStackpos, const Tile* oldTile, const Position& oldPos, uint32_t oldStackpos, bool teleport) Dentro da função encontre:
    A parte que começa em if (oldPos.y > newPos.y) { e Termina em GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg); } e troque por:
    if (oldPos.y > newPos.y) { // north, for old x msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } else if (oldPos.y < newPos.y) { // south, for old x msg->AddByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y + (Map::maxClientViewportY+1), newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } if (oldPos.x < newPos.x) { // east, [with new y] msg->AddByte(0x66); GetMapDescription(newPos.x + (Map::maxClientViewportX+1), newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } else if (oldPos.x > newPos.x) { // west, [with new y] msg->AddByte(0x68); GetMapDescription(newPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); Agora ache:
    if(newPos.z == 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 5, 18, 14, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 4, 18, 14, 4, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 3, 18, 14, 5, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 2, 18, 14, 6, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 1, 18, 14, 7, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 0, 18, 14, 8, skip); Depedendo da Source, a parte será assim:

     
    Por:
    if(newPos.z == 7) //going to surface { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 5, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 4, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 4, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 5, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 6, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 7, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 0, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 8, skip); Agora ache:
    else if(newPos.z > 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.getZ() - 3, 18, 14, 3, skip); Depedendo da source será assim:

     
    Por:
    else if(newPos.z > 7) //underground, going one floor up (still underground) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.z - 3, (Map::maxClientViewportX+1), (Map::maxClientViewportY+1)*2, 3, skip); Agora ache:
    //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - 8, oldPos.y - 5, newPos.z, 1, 14, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg); E troque por:
    //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); Agora ache:
    if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 14, -1, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 1, 18, 14, -2, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Dependendo da source poderá ser:

     
    e troque por:
    if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -1, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -2, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Agora ache:
    else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Depedendo da source pode ser assim:

     
    E troque por:
    else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Agora em map.h edite essa parte como quiser:
    static const int32_t maxViewportX = 11; //min: maxClientViewportX + 1 static const int32_t maxViewportY = 11; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 8; static const int32_t maxClientViewportY = 6; O modo de Edição é assim:

     

    Agora em map.cpp do OTCLIENT
    Ache:
    void Map::resetAwareRange() { AwareRange range; range.left = 8; range.top = 6; range.bottom = 7; range.right = 9; setAwareRange(range); } Troque por:
    { AwareRange range; range.left = 8; //Valor que colocou em maxClientViewportX range.top = 6; //Valor que colocou em maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); } Créditos:
    Flatlander - OTLAND - Criação
    Ceetros - Tradução


    Agora vamos deixar o OTCLIENT lindão.





    Troque tudo de modules/game_interface/interface.lua (na pasta do OTCLIENT)
    por:
    http://pastebin.com/tH7qyreW
    (para o tutorial não ficar muito grande botei no pastebin, já que o spoiler tá bugando)
    Creditos dessa parte:
    Edubart (Criador do OTCLIENT)
    Ceetros
     
    Caso tenha ajudado, dê um rep+
  2. Upvote
    Refe recebeu reputação de Ayron5 em Central de Aprendizado LUA: Desvios condicionais!   
    Bom, eu vou tentar trazer semanalmente umas dicas de programação, começando com LUA de após fechar todas as dicas eu irei começar o central de aprendizado em c++.
     
    Hoje, sendo a primeira "aula" eu irei explicar os desvios condicionais, que são:
    If else elseif Como utilizar IF?
    Basicamente, o "if" se trata de uma condição, sendo utilizado da seguinte forma:
    if <condição> then Como exemplo, irei fazer um desvio caso o nível do jogador seja maior ou igual a 15:
    if player:getLevel() >= 15 then Após isto, deve se colocar oque o script irá realizar caso a condição seja satisfeita.
    No exemplo a seguir ele irá printar para o console o nível do jogador:
    if player:getLevel() >= 15 then print(player:getLevel()) end Else e Elseif: caso condição não seja satisfeita
    Digamos que no script anterior eu queria que caso a condição não seja satisfeita o console printe "no", eu posso fazer com ajuda do "else":
    if player:getLevel() >= 15 then print(player:getLevel()) else print('no') end O elseif é mais "complexo", por exemplo: ele nega a condição anterior e adiciona uma nova condição.
    Quero que de acordo com o nome do jogador ele printe uma informação como exemplo:
    if player:getName() =="Refe" then print('feio') elseif player:getName() == "Sone" then print('lindo') elseif player:getName() == "Frenvius" then print('feio') end Resumo das dicas:
     
    If: Usado para adicionar uma condição
    Else: Nega a condição anterior, ou caso ela não seja satisfeita
    Elseif: Nega a condição anterior e adiciona uma nova condição.
  3. Amei
    Refe recebeu reputação de raulcdj em Central de Aprendizado LUA: Desvios condicionais!   
    Bom, eu vou tentar trazer semanalmente umas dicas de programação, começando com LUA de após fechar todas as dicas eu irei começar o central de aprendizado em c++.
     
    Hoje, sendo a primeira "aula" eu irei explicar os desvios condicionais, que são:
    If else elseif Como utilizar IF?
    Basicamente, o "if" se trata de uma condição, sendo utilizado da seguinte forma:
    if <condição> then Como exemplo, irei fazer um desvio caso o nível do jogador seja maior ou igual a 15:
    if player:getLevel() >= 15 then Após isto, deve se colocar oque o script irá realizar caso a condição seja satisfeita.
    No exemplo a seguir ele irá printar para o console o nível do jogador:
    if player:getLevel() >= 15 then print(player:getLevel()) end Else e Elseif: caso condição não seja satisfeita
    Digamos que no script anterior eu queria que caso a condição não seja satisfeita o console printe "no", eu posso fazer com ajuda do "else":
    if player:getLevel() >= 15 then print(player:getLevel()) else print('no') end O elseif é mais "complexo", por exemplo: ele nega a condição anterior e adiciona uma nova condição.
    Quero que de acordo com o nome do jogador ele printe uma informação como exemplo:
    if player:getName() =="Refe" then print('feio') elseif player:getName() == "Sone" then print('lindo') elseif player:getName() == "Frenvius" then print('feio') end Resumo das dicas:
     
    If: Usado para adicionar uma condição
    Else: Nega a condição anterior, ou caso ela não seja satisfeita
    Elseif: Nega a condição anterior e adiciona uma nova condição.
  4. Upvote
    Refe recebeu reputação de Ayron5 em Adicionando mais tiles a visão do jogador!   
    Hoje eu vim ensinar como aumenta a "tela" de jogo do OTCLIENT

    (Desculpe o merchant, era a unica imagem que eu tinha salvo)

    Testado em : 0.3.6pl1, Pode funcionar em 1.0 com alterações pequenas.


    Em protocolgame.cpp ache:
    return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) && (y >= myPos.y - 6 + offsetz) && (y <= myPos.gety + 7 + offsetz)); e troque por:
    return ((x >= myPos.x - Map::maxClientViewportX + offsetz) && (x <= myPos.x + (Map::maxClientViewportX+1) + offsetz) && (y >= myPos.y - Map::maxClientViewportY + offsetz) && (y <= myPos.y + (Map::maxClientViewportY+1) + offsetz)); Agora, continuando em protocolgame.cpp ache:
    GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); E troque por:
    GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg); Continuando em protocolgame.cpp ache a função:
    void ProtocolGame::sendMoveCreature(const Creature* creature, const Tile* newTile, const Position& newPos, uint32_t newStackpos, const Tile* oldTile, const Position& oldPos, uint32_t oldStackpos, bool teleport) Dentro da função encontre:
    A parte que começa em if (oldPos.y > newPos.y) { e Termina em GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg); } e troque por:
    if (oldPos.y > newPos.y) { // north, for old x msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } else if (oldPos.y < newPos.y) { // south, for old x msg->AddByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y + (Map::maxClientViewportY+1), newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } if (oldPos.x < newPos.x) { // east, [with new y] msg->AddByte(0x66); GetMapDescription(newPos.x + (Map::maxClientViewportX+1), newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } else if (oldPos.x > newPos.x) { // west, [with new y] msg->AddByte(0x68); GetMapDescription(newPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); Agora ache:
    if(newPos.z == 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 5, 18, 14, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 4, 18, 14, 4, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 3, 18, 14, 5, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 2, 18, 14, 6, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 1, 18, 14, 7, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 0, 18, 14, 8, skip); Depedendo da Source, a parte será assim:

     
    Por:
    if(newPos.z == 7) //going to surface { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 5, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 4, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 4, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 5, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 6, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 7, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 0, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 8, skip); Agora ache:
    else if(newPos.z > 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.getZ() - 3, 18, 14, 3, skip); Depedendo da source será assim:

     
    Por:
    else if(newPos.z > 7) //underground, going one floor up (still underground) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.z - 3, (Map::maxClientViewportX+1), (Map::maxClientViewportY+1)*2, 3, skip); Agora ache:
    //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - 8, oldPos.y - 5, newPos.z, 1, 14, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg); E troque por:
    //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); Agora ache:
    if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 14, -1, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 1, 18, 14, -2, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Dependendo da source poderá ser:

     
    e troque por:
    if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -1, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -2, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Agora ache:
    else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Depedendo da source pode ser assim:

     
    E troque por:
    else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Agora em map.h edite essa parte como quiser:
    static const int32_t maxViewportX = 11; //min: maxClientViewportX + 1 static const int32_t maxViewportY = 11; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 8; static const int32_t maxClientViewportY = 6; O modo de Edição é assim:

     

    Agora em map.cpp do OTCLIENT
    Ache:
    void Map::resetAwareRange() { AwareRange range; range.left = 8; range.top = 6; range.bottom = 7; range.right = 9; setAwareRange(range); } Troque por:
    { AwareRange range; range.left = 8; //Valor que colocou em maxClientViewportX range.top = 6; //Valor que colocou em maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); } Créditos:
    Flatlander - OTLAND - Criação
    Ceetros - Tradução


    Agora vamos deixar o OTCLIENT lindão.





    Troque tudo de modules/game_interface/interface.lua (na pasta do OTCLIENT)
    por:
    http://pastebin.com/tH7qyreW
    (para o tutorial não ficar muito grande botei no pastebin, já que o spoiler tá bugando)
    Creditos dessa parte:
    Edubart (Criador do OTCLIENT)
    Ceetros
     
    Caso tenha ajudado, dê um rep+
  5. Thanks
    Refe recebeu reputação de StrikersBR12 em Ball System + Tutorial Adicionando Pokebolas [PDE]   
    Hoje vou postar mais um sistema para o PDE

    Sistema da vez:


    Pokébolas com maior chance de catch dependendo do tipo do pokemon!
    Também vou ensinar a adicionar pokébolas
    Não pensei em um nome melhor, então vou chamar de:
    Ball System


    Adicionando novas Pokebolas:



    Pokébolas com maior chance de catch dependendo do tipo do pokemon!




    Créditos:
    @Ceetros (talvez ? )
    @zipter98 (tive a ideia no tópico do @@Bluester, para acessar clique aqui)
  6. Upvote
    Refe recebeu reputação de Kobrakt em Central de Aprendizado LUA: Desvios condicionais!   
    Bom, eu vou tentar trazer semanalmente umas dicas de programação, começando com LUA de após fechar todas as dicas eu irei começar o central de aprendizado em c++.
     
    Hoje, sendo a primeira "aula" eu irei explicar os desvios condicionais, que são:
    If else elseif Como utilizar IF?
    Basicamente, o "if" se trata de uma condição, sendo utilizado da seguinte forma:
    if <condição> then Como exemplo, irei fazer um desvio caso o nível do jogador seja maior ou igual a 15:
    if player:getLevel() >= 15 then Após isto, deve se colocar oque o script irá realizar caso a condição seja satisfeita.
    No exemplo a seguir ele irá printar para o console o nível do jogador:
    if player:getLevel() >= 15 then print(player:getLevel()) end Else e Elseif: caso condição não seja satisfeita
    Digamos que no script anterior eu queria que caso a condição não seja satisfeita o console printe "no", eu posso fazer com ajuda do "else":
    if player:getLevel() >= 15 then print(player:getLevel()) else print('no') end O elseif é mais "complexo", por exemplo: ele nega a condição anterior e adiciona uma nova condição.
    Quero que de acordo com o nome do jogador ele printe uma informação como exemplo:
    if player:getName() =="Refe" then print('feio') elseif player:getName() == "Sone" then print('lindo') elseif player:getName() == "Frenvius" then print('feio') end Resumo das dicas:
     
    If: Usado para adicionar uma condição
    Else: Nega a condição anterior, ou caso ela não seja satisfeita
    Elseif: Nega a condição anterior e adiciona uma nova condição.
  7. Upvote
    Refe recebeu reputação de M i s s em Ball System + Tutorial Adicionando Pokebolas [PDE]   
    Hoje vou postar mais um sistema para o PDE

    Sistema da vez:


    Pokébolas com maior chance de catch dependendo do tipo do pokemon!
    Também vou ensinar a adicionar pokébolas
    Não pensei em um nome melhor, então vou chamar de:
    Ball System


    Adicionando novas Pokebolas:



    Pokébolas com maior chance de catch dependendo do tipo do pokemon!




    Créditos:
    @Ceetros (talvez ? )
    @zipter98 (tive a ideia no tópico do @@Bluester, para acessar clique aqui)
  8. Upvote
    Refe recebeu reputação de kaioboyy em Pokemon Dash Evolution ~> Projeto Comunitário <~   
    Conteúdo:

     
     
     
    Imagens Mapa não incluso
    Downloads:

     
     
     
    Removendo Bugs de itens (como order, fishing, etc)
     
     
     
    Sistemas feitos para o PDE:

     
     
    Tutoriais feitos para o PDE:
     
     
    Bugs reportados:
     
     
     
  9. Upvote
    Refe recebeu reputação de BrunooMaciell em Item Editor v0.4.2 + Tradução xTibia.com   
    Hoje eu vim trazer para vocês a última versão do Item Editor.
    Oque há de novo na última versão?
    Oque essa versão suporta?
     
    + Créditos:
      - Mignari Desenvolvimento
     
    + Contribuidores: 
      - Refe Tradução
      -  Daniel (Ícone da aplicação)
     
    Downloads Originais (v 0.4.0.2 sem Tradução:)
    Source
    Binários
     
    Downloads Traduzidos:
    Item Editor - PTBR.zip
    A tradução não está completa, pretendo terminar essa semana.
     
     
    Mini Explicações sobre os Atributos
     
     
     

  10. Amei
    Refe recebeu reputação de Yan Liima em xTibia - Novidades   
    Modificações das Áreas de downloads
     
    APROVAÇÃO NECESSÁRIA
    Com o intuito de fornecer mais segurança a nossos usuários nós vimos a necessidade de aprovar o upload de arquivos e a criação de tópicos em determinadas áreas, assim organizando melhor nosso fórum, e protegendo ainda mais os usuários de links falsos.
     
    RECOMPENSAS
    Ao seu tópico ser aprovado você irá receber em sua conta uma quantidade de xPoints, tal quantidade irá depender de alguns fatores como qualidade do conteúdo, organização do post, entre outros fatores.
     

    xTibia Shop
    RECEBENDO PONTOS
    Há atualmente duas formas de receber os xPoints:
    Ao sua resposta ser marcada como Melhor Resposta automaticamente você receberá 10 xPoints Ao seu tópico ser aprovado, você recebera alguns pontos dependendo da qualidade e organização do mesmo.  
    ITEMS A VENDA
    Nossos items a venda poderão ser vistos na aba xTibia Shop do menu superior, novos items poderão ser adicionados em breve, assim como promoções e reajuste de preços.
     

    xTibia Patrocina
    CICLO ENTRE PARCEIROS
    O xTibia caminha ao lado de outros dois projetos importantes, o nosso parceiro de berço OTPanel e a otserv-list.com. É notável ressaltar que através dessa parceria formulamos regras para convivência dos projetos dentro da nossa comunidade. De certo modo, as normas presentes nesta resolução acompanham as definições já em funcionamento (disponíveis nas regras gerais da comunidade).

    A IMPORTÂNCIA DO PATROCÍNIO
    Os projetos patrocinados pelo xTibia já contribuíram muitas vezes mais que vice-versa. O objetivo principal desta resolução visa aumentar as chances de crescimento desses projetos que possuem potencial.
     
    NÍVEIS DE PATROCÍNIO
    Os patrocínios serão dividido por níveis, cada um com suas vantagens
    Bronze: Área do projeto no fórum, Banner de divulgação.
    Prata: Benefícios do nível anterior e patrocínio na otserv-list.com.
    GOLD: Benefícios dos níveis anteriores e uma hospedagem na OTPanel com suporte a até 200 jogadores.
     
    PORQUE SER PATROCINADO?
    Estão previstos aqui, além de normas de conduta ou execução administrativa dos projetos, normas para benefícios e incentivo aos projetos. Sendo estas:
     
     Operação            Visto que queremos incentivar os projetos a interagirem com a comunidade, os parceiros terão direitos a benefícios extras. Os membros participantes do    projeto patrocinado terão o limite de mensagens privadas triplicado, assim como o limite de upload de arquivos. Ainda falando em limite, estes poderão trocar o nome em 50% menos tempo que membros comuns. Também serão donos de um rank de identificação diferenciado do padrão de membros da comunidade, junto a medalhas exclusivas para a categoria. Tudo isso visando dar ênfase aos desenvolvedores parceiros dentro da comunidade.
     
    Expansão            A área de interação para com o público do projeto aumentará com a permissão para membros parceiros publicarem artigos no Portal xTibia. Também terão  apoio direto da equipe do xTibia, que deverá, acima de tudo, promover o incentivo ao publico para que acompanhe os conteúdos ou composições do projeto em discussão, do mesmo modo que incentivem diretamente estas ações.
     
    TENHA UMA CHANCE
    Os projetos apresentados irão ser julgados por tópicos, que são:
    Inovação: O projeto deverá ter traços de inovação, sendo algo que não vimos em outros projetos do meio. Qualidade: Além da inovação, nós queremos dar chance a projetos de extrema qualidade. Comprometimento: O projeto deverá semanalmente colaborar com algo no xTibia, haverá tolerância de 2 semanas sem colaborações. União: O projeto deverá adicionar em seu site uma banner da nossa comunidade: xTibia.com, OTPanel ou otserv-list  
    Para participar é só criar um tópico de apresentação nesta área contendo:
    Informações do projeto: Nome, Apresentação de integrantes, Estilo, Versão, Público Alvo. Conteúdo: Conteúdos prontos, Conteúdos em desenvolvimento e listagem de conteúdos a desenvolver. Mídia: Apresentação de mídia (vídeo, gif, imagem) de conteúdos prontos. Metas: Os Objetivos & Metas do projeto.  
    Após a apresentação nossa equipe irá julgar o projeto.
     
  11. Upvote
    Refe deu reputação a Benny em [8.60] NTO Space V2 SERVER+SOURCE+CLIENT+SITE   
    Obrigado pela postagem ?
     
  12. Upvote
    Refe recebeu reputação de ITALOx em Item Editor v0.4.2 + Tradução xTibia.com   
    Hoje eu vim trazer para vocês a última versão do Item Editor.
    Oque há de novo na última versão?
    Oque essa versão suporta?
     
    + Créditos:
      - Mignari Desenvolvimento
     
    + Contribuidores: 
      - Refe Tradução
      -  Daniel (Ícone da aplicação)
     
    Downloads Originais (v 0.4.0.2 sem Tradução:)
    Source
    Binários
     
    Downloads Traduzidos:
    Item Editor - PTBR.zip
    A tradução não está completa, pretendo terminar essa semana.
     
     
    Mini Explicações sobre os Atributos
     
     
     

  13. Upvote
    Refe recebeu reputação de ITALOx em BUGS: Clonar item e "derrubar" servidores   
    Hoje eu percebi que muitas pessoas estão levando a melhor com bugs de otserver.
    E eu vim aqui ensinar para vocês como fazer tais bugs, e para quem administra um servidor também saber como tal bug é feito e assim pensar em uma forma de fixar.
     
     
    Bug de mochilas:
    Morte no trade:
    Bug da nurse:
    Clonar item por guild:
     
     
    Bom, a minha ideia é mostrar como os bugs são feitos para os donos de servidores arrrumar.
    Obrigado pela atenção!
    Até a próxima.
  14. Upvote
    Refe recebeu reputação de Ayron5 em TalkColor - RedMoon   
    Para esse tutorial você precisa de:
    --> Sources OTCLIENT --> Cores (Parte 2 Tutorial) Parte 1, Sources OTC
    Parte 2: Cores
     
     
    Esse sistema eu desenvolvi para o RedMoon: a Real RPG Server
    Página do facebook: RedMoon
     
  15. Upvote
    Refe recebeu reputação de wenderotpoke em Look System!!   
    local NPCBattle = { ["Brock"] = {artig = "He is", cidbat = "Pewter"}, ["Misty"] = {artig = "She is", cidbat = "Cerulean"}, ["Blaine"] = {artig = "He is", cidbat = "Cinnabar"}, ["Sabrina"] = {artig = "She is", cidbat = "Saffron"}, --alterado v1.9 \/ peguem tudo! ["Kira"] = {artig = "She is", cidbat = "Viridian"}, ["Koga"] = {artig = "He is", cidbat = "Fushcia"}, ["Erika"] = {artig = "She is", cidbat = "Celadon"}, ["Surge"] = {artig = "He is", cidbat = "Vermilion"}, } local shinys = { ["Shiny Abra"] = "Dark Abra", ["Shiny Onix"] = "Crystal Onix", ["Shiny Gyarados"] = "Red Gyarados", ["Shiny Charizard"] = "Elder Charizard", ["Shiny Venusaur"] = "Ancient Venusaur", ["Shiny Blastoise"] = "Ancient Blastoise", ["Shiny Farfetch'd"] = "Elite Farfetch'd", ["Shiny Hitmonlee"] = "Elite Hitmonlee", ["Shiny Himonchan"] = "Elite Hitmonchan", ["Shiny Snorlax"] = "Big Snorlax", } local pokeprice = { ["Bulbasaur"] = "3k", ["Poke2"] = "3k and 500 dollars", } local itemprice = { [2222] = "100 dollars", --[ITEMID] = "Preço, utilizar k ou dollars", } function onLook(cid, thing, position, lookDistance) local str = {} local isTrade = false if lookDistance == 0 then isTrade = true end -- trade lookDistanc end if not isCreature(thing.uid) then local iname = getItemInfo(thing.itemid) if isPokeball(thing.itemid) and getItemAttribute(thing.uid, "poke") then local isDittoBall = isInArray({"Ditto", "Shiny Ditto"}, getItemAttribute(thing.uid, "poke")) and true or false unLock(thing.uid) local lock = getItemAttribute(thing.uid, "lock") local pokename = isDittoBall and getItemAttribute(thing.uid, "copyName") or getItemAttribute(thing.uid, "poke") local heldx = getItemAttribute(thing.uid, "xHeldItem") local heldy = getItemAttribute(thing.uid, "yHeldItem") local megaID = getItemAttribute(thing.uid, "megaID") local pokeBallName = getItemAttribute(thing.uid, "ball") if not pokeBallName then doItemSetAttribute(thing.uid, "ball", "poke") pokeBallName = "Poke" end if isGod(cid) then table.insert(str, "ItemID[".. thing.itemid .."].\n") end table.insert(str, "You see ".. doCorrectString(pokeBallName) .."ball.") if getItemAttribute(thing.uid, "unique") then table.insert(str, " It's an unique item.") end table.insert(str, "\nIt contains "..getArticle(pokename).." "..pokename.. (isDittoBall and " (Ditto)" or "") .. ".\n") if lock and lock > 0 then table.insert(str, "It will unlock in ".. os.date("%d/%m/%y %X", lock)..".\n") end local boost = getItemAttribute(thing.uid, "boost") or 0 if boost > 0 then table.insert(str, "Boost level: +"..boost..".\n") end if getItemAttribute(thing.uid, "nick") then table.insert(str, "It's nickname is: "..getItemAttribute(thing.uid, "nick")..".\n") end local heldName, heldTier = "", "" local heldYName, heldYTier = "", "" if heldx or heldy then if heldx then heldName, heldTier = string.explode(heldx, "|")[1], string.explode(heldx, "|")[2] end if heldy then heldYName, heldYTier = string.explode(heldy, "|")[1], string.explode(heldy, "|")[2] end local heldString = heldName .. " (tier: " .. (heldTier or heldx) .. ")" local heldYString = heldYName .. (not isInArray({"Mega", "GHOST"}, heldYTier) and " (tier: " .. heldYTier .. ")" or "") if heldx and heldy then table.insert(str, "Holding: " .. heldString .. " and " .. heldYString .. ". ") elseif heldx then table.insert(str, "Holding: "..heldString..". ") elseif heldy then table.insert(str, "Holding: "..heldYString ..". ") end end if pokeprice[getItemAttribute(thing.uid, "poke")] then table.insert(str, "\nPrice: "..pokeprice[getItemAttribute(thing.uid, "poke")]) end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false elseif getItemAttribute(thing.uid, "pokeName") and string.find(getItemAttribute(thing.uid, "pokeName"), "fainted") then local lootName = getItemAttribute(thing.uid, "pokeName") if isGod(cid) then table.insert(str, "ItemID[".. thing.itemid .."].\n") end table.insert(str, "You see a "..string.lower(lootName)..". ") if isContainer(thing.uid) then table.insert(str, "(Vol: "..getContainerCap(thing.uid)..")") end if getItemAttribute(thing.uid, "corpseowner") then if getItemAttribute(thing.uid, "corpseowner") == "asçdlkasçldkaçslkdçaskdçaslkdçlsakdçkaslç" then table.insert(str, "\nSuicidou-se.") else table.insert(str, "\nEle foi morto por: ("..getItemAttribute(thing.uid, "corpseowner")..")") end end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false elseif isContainer(thing.uid) then --containers if isGod(cid) then table.insert(str, "ItemID[".. thing.itemid .."].\n") end if getItemAttribute(thing.uid, "iname") then table.insert(str, "You see "..iname.article.." "..iname.name..". (Vol:"..getContainerCap(thing.uid)..").") table.insert(str, getItemAttribute(thing.uid, "iname")..".") else table.insert(str, "You see "..iname.article.." "..iname.name..". (Vol:"..getContainerCap(thing.uid)..").") end if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then table.insert(str, "\nItemID: ["..thing.itemid.."]") local pos = getThingPos(thing.uid) table.insert(str, "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]") end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false elseif getItemAttribute(thing.uid, "unique") then if isGod(cid) then table.insert(str, "ItemID[".. thing.itemid .."].\n") end local p = getThingPos(thing.uid) table.insert(str, "You see ") if thing.type > 1 then table.insert(str, thing.type.." "..iname.plural..".") else table.insert(str, iname.article.." "..iname.name..".") end table.insert(str, " It's an unique item.\n"..iname.description) if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then table.insert(str, "\nItemID: ["..thing.itemid.."]") table.insert(str, "\nPosition: ["..p.x.."]["..p.y.."]["..p.z.."]") end sendMsgToPlayer(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false else elseif itemprice[thing.itemid] then local item = getItemInfo(thing.itemid) table.insert(str, "You see "..item.article.." "..item.name".\n") table.insert(str, "Price: "..itemprice[thing.itemid]) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) if getPlayerGroupId(cid) >= 4 and getPlayerGroupId(cid) <= 6 then table.insert(str, "\nItemID: ["..thing.itemid.."]") table.insert(str, "\nPosition: ["..p.x.."]["..p.y.."]["..p.z.."]") end return true end end local npcname = getCreatureName(thing.uid) if ehNPC(thing.uid) and NPCBattle[npcname] then --npcs duel table.insert(str, "You see "..npcname..". "..NPCBattle[npcname].artig.." leader of the gym from "..NPCBattle[npcname].cidbat..".") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false end if getPlayerStorageValue(thing.uid, 697548) ~= -1 then table.insert(str, getPlayerStorageValue(thing.uid, 697548)) local pos = getThingPos(thing.uid) if youAre[getPlayerGroupId(cid)] then table.insert(str, "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]") end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false end if not isPlayer(thing.uid) and not isMonster(thing.uid) then --outros npcs table.insert(str, "You see "..getCreatureName(thing.uid)..".") doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false end if isPlayer(thing.uid) then --player doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, getPlayerDesc(cid, thing.uid, false)) return false end if getCreatureName(thing.uid) == "Evolution" then return false end if not isSummon(thing.uid) then --monstros table.insert(str, "You see a wild "..string.lower(getCreatureName(thing.uid))..".\n") if isGod(cid) then table.insert(str, "Hit Points: "..getCreatureHealth(thing.uid).." / "..getCreatureMaxHealth(thing.uid)..".\n") end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) return false elseif isSummon(thing.uid) and not isPlayer(thing.uid) then --summons local boostlevel = getItemAttribute(getPlayerSlotItem(getCreatureMaster(thing.uid), 8).uid, "boost") or 0 local isDittoBall = isInArray({"Ditto", "Shiny Ditto"}, getItemAttribute(getPlayerSlotItem(getCreatureMaster(thing.uid), 8).uid, "poke")) and true or false if getCreatureMaster(thing.uid) == cid then local myball = getPlayerSlotItem(cid, 8).uid table.insert(str, "You see your "..doCorrectString(getCreatureName(thing.uid)).. (isDittoBall and " (Ditto)" or "") ..".") if boostlevel > 0 then table.insert(str, "\nBoost level: +"..boostlevel..".") end table.insert(str, "\n"..getPokemonHappinessDescription(thing.uid)) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, table.concat(str)) else local health = "\nHit points: "..getCreatureHealth(thing.uid).."/"..getCreatureMaxHealth(thing.uid).."." doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You see a "..doCorrectString(getCreatureName(thing.uid)).. (isDittoBall and " (Ditto)" or "") ..".\nIt belongs to "..getCreatureName(getCreatureMaster(thing.uid)).."." .. (isGod(cid) and health or "") ) end return false end return true end  
  16. Upvote
    Refe recebeu reputação de Tibiano Pro em Pokemon Dash Evolution ~> Projeto Comunitário <~   
    Conteúdo:

     
     
     
    Imagens Mapa não incluso
    Downloads:

     
     
     
    Removendo Bugs de itens (como order, fishing, etc)
     
     
     
    Sistemas feitos para o PDE:

     
     
    Tutoriais feitos para o PDE:
     
     
    Bugs reportados:
     
     
     
  17. Upvote
    Refe recebeu reputação de notFoxTro em Pokemon Dash Evolution ~> Projeto Comunitário <~   
    Conteúdo:

     
     
     
    Imagens Mapa não incluso
    Downloads:

     
     
     
    Removendo Bugs de itens (como order, fishing, etc)
     
     
     
    Sistemas feitos para o PDE:

     
     
    Tutoriais feitos para o PDE:
     
     
    Bugs reportados:
     
     
     
  18. Upvote
    Refe recebeu reputação de Bagastalgia22 em Pokemon Dash Evolution ~> Projeto Comunitário <~   
    Conteúdo:

     
     
     
    Imagens Mapa não incluso
    Downloads:

     
     
     
    Removendo Bugs de itens (como order, fishing, etc)
     
     
     
    Sistemas feitos para o PDE:

     
     
    Tutoriais feitos para o PDE:
     
     
    Bugs reportados:
     
     
     
  19. Thanks
    Refe recebeu reputação de JulianoZN em Pokemon Dash Evolution ~> Projeto Comunitário <~   
    Conteúdo:

     
     
     
    Imagens Mapa não incluso
    Downloads:

     
     
     
    Removendo Bugs de itens (como order, fishing, etc)
     
     
     
    Sistemas feitos para o PDE:

     
     
    Tutoriais feitos para o PDE:
     
     
    Bugs reportados:
     
     
     
  20. Thanks
    Refe recebeu reputação de steelpzeza em Source Launcher Pokemon Rubrum   
    Hoje estou liberando a Source do Launcher Pokémon Rubrum

    (Ainda falta uns ajustes, coisas básicas, como por função nos botões)



    Imagem:





    Download

    Scan





  21. Upvote
    Refe recebeu reputação de ManoTobira em Pokemon Dash Evolution ~> Projeto Comunitário <~   
    Conteúdo:

     
     
     
    Imagens Mapa não incluso
    Downloads:

     
     
     
    Removendo Bugs de itens (como order, fishing, etc)
     
     
     
    Sistemas feitos para o PDE:

     
     
    Tutoriais feitos para o PDE:
     
     
    Bugs reportados:
     
     
     
  22. Thanks
    Refe recebeu reputação de fabiano24 em Pokemon Dash Evolution ~> Projeto Comunitário <~   
    Conteúdo:

     
     
     
    Imagens Mapa não incluso
    Downloads:

     
     
     
    Removendo Bugs de itens (como order, fishing, etc)
     
     
     
    Sistemas feitos para o PDE:

     
     
    Tutoriais feitos para o PDE:
     
     
    Bugs reportados:
     
     
     
  23. Upvote
    Refe recebeu reputação de NdboHakai em Item Editor v0.4.2 + Tradução xTibia.com   
    Hoje eu vim trazer para vocês a última versão do Item Editor.
    Oque há de novo na última versão?
    Oque essa versão suporta?
     
    + Créditos:
      - Mignari Desenvolvimento
     
    + Contribuidores: 
      - Refe Tradução
      -  Daniel (Ícone da aplicação)
     
    Downloads Originais (v 0.4.0.2 sem Tradução:)
    Source
    Binários
     
    Downloads Traduzidos:
    Item Editor - PTBR.zip
    A tradução não está completa, pretendo terminar essa semana.
     
     
    Mini Explicações sobre os Atributos
     
     
     

  24. Upvote
    Refe recebeu reputação de XednuX em Pokemon Dash Evolution ~> Projeto Comunitário <~   
    Conteúdo:

     
     
     
    Imagens Mapa não incluso
    Downloads:

     
     
     
    Removendo Bugs de itens (como order, fishing, etc)
     
     
     
    Sistemas feitos para o PDE:

     
     
    Tutoriais feitos para o PDE:
     
     
    Bugs reportados:
     
     
     
  25. Upvote
    Refe recebeu reputação de showman357 em BUGS: Clonar item e "derrubar" servidores   
    Hoje eu percebi que muitas pessoas estão levando a melhor com bugs de otserver.
    E eu vim aqui ensinar para vocês como fazer tais bugs, e para quem administra um servidor também saber como tal bug é feito e assim pensar em uma forma de fixar.
     
     
    Bug de mochilas:
    Morte no trade:
    Bug da nurse:
    Clonar item por guild:
     
     
    Bom, a minha ideia é mostrar como os bugs são feitos para os donos de servidores arrrumar.
    Obrigado pela atenção!
    Até a próxima.
  • Quem Está Navegando   0 membros estão online

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