Ir para conteúdo
  • Cadastre-se

11.x [WIP] OTXServer 12.31 Global Full + Kilmaresh (Issavi) + BESTIARY - QUICKLOOT


Posts Recomendados

Atualizando topico...

 

- Adicionando Protocolo 10.97

- Fixed Mana Heal

- Adicionando mudança de protocolo via config.lua apenas de 10.94 a 10.97

- Adicionando limite de itens no stack

- Adicionando getBaseMaxHealth & getBaseMaxMana

- Fixed Monster Idle

- Fixed Dano de magic field Ex.: Fire alto dano inicia de 20, Fire baixo inicia dano de 10 e etc...

- Fixed Morte por Monstros em Area PZ

- Fixed Formula de Armor.. bug das Wands e Rods sem hit

- Atualizado todas Features do Github Forgotten Oficial estamos com todas correções deles em dia.

- Fixado varios erros pequenos de codigo e re-organização de codigo!

 

Sistemas em andamento ainda não implementados:

- NPC Vendendo por Bank Balance <- Se alguem souber alguma coisa sobre... entre em contato!!!

- PVP-Expert <- este está mais proximo de ser colocado... muitos vem pedindo e já consegui estabilizar, sendo que estou com pouco tempo e da ultima vez que tentei, dei uma cagada no codigo bugou foi tudo kkk, mas prometo para proxima atualização!!!

- NPC Yanna <- npc que troca e encanta as novas armas por gold tokens, quase pronta!!!

- NPC Cledwyn <- npc que troca silver tokens por varias armaduras, este já está pronto vai ser lançado junto com Yanna...

 

Status do projeto: Distro 98% parecida com Aurera Global, estamos com padrão excelente se nos basear no sucesso deste servidor brasileiro... faltando apenas o pvp expert para ficarmos 100%, já que eles ainda não usam o npc trade by bank balance!!

 

Link para download disponibilizado dentro de alguns minutos!!

 

 

Razão da demora: sou apenas um, tenho uma vida normal como pessoas normais, tenho familia e problemas igual a qualquer um aqui!!!

 

 

O melhor conteúdo da atualidade!

http://www.gitlab.com/malucooo/otxserver-new/

- Full Global Map with 12.xx updates, all quests and many features!

- Protocol 12.31

Link para o post
Compartilhar em outros sites
  • Respostas 5k
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

OTXServer Global Full Kilmaresh by Malucooo   [CLIENTS COMPATÍVEIS]   http://www.gitlab.com/guilhermesidney/cliente10/   [DOWNLOAD] BAIXEM EM: https://github.com/malucooo

Adicionado Imbuing System, Inspection System por Charles (Eternal-Scripts) Corrigido e atualizado Prey System por Charles (Eternal-Scripts)   Obrigado pela colaboração, acredito que no

Atualizações de Médio Porte:   - Items.otb 11.31 (adicionado os novos barris de potion e mais uns 700 items adicionado..) - Client 10 Atualizado - Adicionado a categoria carpet...

Posted Images

Atualizando topico...

 

- Adicionando Protocolo 10.97

- Fixed Mana Heal

- Adicionando mudança de protocolo via config.lua apenas de 10.94 a 10.97

- Adicionando limite de itens no stack

- Adicionando getBaseMaxHealth & getBaseMaxMana

- Fixed Monster Idle

- Fixed Dano de magic field Ex.: Fire alto dano inicia de 20, Fire baixo inicia dano de 10 e etc...

- Fixed Morte por Monstros em Area PZ

- Fixed Formula de Armor.. bug das Wands e Rods sem hit

- Atualizado todas Features do Github Forgotten Oficial estamos com todas correções deles em dia.

- Fixado varios erros pequenos de codigo e re-organização de codigo!

 

Sistemas em andamento ainda não implementados:

- NPC Vendendo por Bank Balance
- PVP-Expert
- NPC Yanna
- NPC Cledwyn
 

Status do projeto: Distro 98% parecida com Aurera Global, estamos com padrão excelente se nos basear no sucesso deste servidor brasileiro... faltando apenas o pvp expert para ficarmos 100%, já que eles ainda não usam o npc trade by bank balance!!

 

Link para download disponibilizado dentro de alguns minutos!!

 

 

Razão da demora: sou apenas um, tenho uma vida normal como pessoas normais, tenho familia e problemas igual a qualquer um aqui!!!


Muito bom malucoo vc é o melhor membro do TK que disponibiliza parte que falta no servidor espero que vc continue assim. Aguardando o link do download.

                                          King is Back !                                  Está vendo esse coraçãozinho? Dar um Voto Positivo?                                                                                                                                                                                                       clica ali se eu te ajudei muito. Obrigado !

 

[Tutorial] Colocando sua senha no novo XAMPP

[Tutorial] Como compilar tfs 1.2 no Visual Studio 2015

------------------------------------------

  • Contato:

                    Discord: Lirosz#6563

                      Ts3: 104.154.235.159

 

 

Link para o post
Compartilhar em outros sites

Tou no aguardo :)

Tenta arrumar esse negocio do Reward System, @malucooo de sempre dropar o loot FULL do monstro.

Ja diminui a porcentagem pra 1 de chance, e sempre dropa o Loot.

Link para o post
Compartilhar em outros sites

- Topico Atualizado...

 

Fix para reward system:

Baixar o rate do loot para 1, infelizmente é a unica solução de imediato!

 

Procuro ajudantes para:

 

Corrigir Mapa;

Criar e atualizar NPCs;

Atualizar Monstros que ainda faltam;

 

Abraço a todos!!

 

Contato via facebook: Erick.Nunes.75

 

Obrigado pela atenção!

 

 

O melhor conteúdo da atualidade!

http://www.gitlab.com/malucooo/otxserver-new/

- Full Global Map with 12.xx updates, all quests and many features!

- Protocol 12.31

Link para o post
Compartilhar em outros sites

@malucooo Brother, obrigado pelas suas contribuições de alto nível, o mapa está global? estamos precisando muito do Other World e dos corpses dos new monsters, até tenho os novos só falta corpse.

 

@murilao Irmão seguinte, estou necessitando muito de um auxílio seu, eu quero que no meu servidor os jogadores ao upar de party shared, recebam 2x mais em Exp, sei que isso é nas sources, mas não tenho certeza onde.. acredito que seja aqui em Party.cpp, se sim me diz o que posso mudar.

 

Spoiler

/**
 * The Forgotten Server - a free and open-source MMORPG server emulator
 * Copyright (C) 2016  Mark Samman <[email protected]>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

#include "otpch.h"

#include "party.h"
#include "game.h"
#include "configmanager.h"
#include "events.h"

extern Game g_game;
extern ConfigManager g_config;
extern Events* g_events;

Party::Party(Player* leader)
{
    extraExpRate = 0.20f;

    sharedExpActive = false;
    sharedExpEnabled = false;

    this->leader = leader;
    leader->setParty(this);
}

void Party::disband()
{
    if (!g_events->eventPartyOnDisband(this)) {
        return;
    }

    Player* currentLeader = leader;
    leader = nullptr;

    currentLeader->setParty(nullptr);
    currentLeader->sendClosePrivate(CHANNEL_PARTY);
    g_game.updatePlayerShield(currentLeader);
    g_game.updatePlayerHelpers(*currentLeader);
    currentLeader->sendCreatureSkull(currentLeader);
    currentLeader->sendTextMessage(MESSAGE_INFO_DESCR, "Your party has been disbanded.");

    for (Player* invitee : inviteList) {
        invitee->removePartyInvitation(this);
        currentLeader->sendCreatureShield(invitee);
    }
    inviteList.clear();

    for (Player* member : memberList) {
        member->setParty(nullptr);
        member->sendClosePrivate(CHANNEL_PARTY);
        member->sendTextMessage(MESSAGE_INFO_DESCR, "Your party has been disbanded.");
    }

    for (Player* member : memberList) {
        g_game.updatePlayerShield(member);

        for (Player* otherMember : memberList) {
            otherMember->sendCreatureSkull(member);
        }

        member->sendCreatureSkull(currentLeader);
        currentLeader->sendCreatureSkull(member);
        g_game.updatePlayerHelpers(*member);
    }
    memberList.clear();
    delete this;
}

bool Party::leaveParty(Player* player)
{
    if (!player) {
        return false;
    }

    if (player->getParty() != this && leader != player) {
        return false;
    }

    if (!g_events->eventPartyOnLeave(this, player)) {
        return false;
    }

    bool missingLeader = false;
    if (leader == player) {
        if (!memberList.empty()) {
            if (memberList.size() == 1 && inviteList.empty()) {
                missingLeader = true;
            } else {
                passPartyLeadership(memberList.front());
            }
        } else {
            missingLeader = true;
        }
    }

    //since we already passed the leadership, we remove the player from the list
    auto it = std::find(memberList.begin(), memberList.end(), player);
    if (it != memberList.end()) {
        memberList.erase(it);
    }

    player->setParty(nullptr);
    player->sendClosePrivate(CHANNEL_PARTY);
    g_game.updatePlayerShield(player);
    g_game.updatePlayerHelpers(*player);

    for (Player* member : memberList) {
        member->sendCreatureSkull(player);
        player->sendPlayerPartyIcons(member);
        g_game.updatePlayerHelpers(*member);
    }

    leader->sendCreatureSkull(player);
    player->sendCreatureSkull(player);
    player->sendPlayerPartyIcons(leader);

    player->sendTextMessage(MESSAGE_INFO_DESCR, "You have left the party.");

    updateSharedExperience();
    updateVocationsList();

    clearPlayerPoints(player);

    std::ostringstream ss;
    ss << player->getName() << " has left the party.";
    broadcastPartyMessage(MESSAGE_INFO_DESCR, ss.str());

    if (missingLeader || empty()) {
        disband();
    }

    return true;
}

bool Party::passPartyLeadership(Player* player)
{
    if (!player || leader == player || player->getParty() != this) {
        return false;
    }

    //Remove it before to broadcast the message correctly
    auto it = std::find(memberList.begin(), memberList.end(), player);
    if (it != memberList.end()) {
        memberList.erase(it);
    }

    std::ostringstream ss;
    ss << player->getName() << " is now the leader of the party.";
    broadcastPartyMessage(MESSAGE_INFO_DESCR, ss.str(), true);

    Player* oldLeader = leader;
    leader = player;

    memberList.insert(memberList.begin(), oldLeader);

    updateSharedExperience();

    for (Player* member : memberList) {
        member->sendCreatureShield(oldLeader);
        member->sendCreatureShield(leader);
    }

    for (Player* invitee : inviteList) {
        invitee->sendCreatureShield(oldLeader);
        invitee->sendCreatureShield(leader);
    }

    leader->sendCreatureShield(oldLeader);
    leader->sendCreatureShield(leader);

    player->sendTextMessage(MESSAGE_INFO_DESCR, "You are now the leader of the party.");
    return true;
}

bool Party::joinParty(Player& player)
{
    if (!g_events->eventPartyOnJoin(this, &player)) {
        return false;
    }

    auto it = std::find(inviteList.begin(), inviteList.end(), &player);
    if (it == inviteList.end()) {
        return false;
    }

    inviteList.erase(it);

    std::ostringstream ss;
    ss << player.getName() << " has joined the party.";
    broadcastPartyMessage(MESSAGE_INFO_DESCR, ss.str());

    player.setParty(this);

    g_game.updatePlayerShield(&player);

    for (Player* member : memberList) {
        member->sendCreatureSkull(&player);
        player.sendPlayerPartyIcons(member);
    }

    player.sendCreatureSkull(&player);
    leader->sendCreatureSkull(&player);
    player.sendPlayerPartyIcons(leader);

    memberList.push_back(&player);

    g_game.updatePlayerHelpers(player);

    player.removePartyInvitation(this);
    updateSharedExperience();
    updateVocationsList();

    const std::string& leaderName = leader->getName();
    ss.str(std::string());
    ss << "You have joined " << leaderName << "'" << (leaderName.back() == 's' ? "" : "s") <<
       " party. Open the party channel to communicate with your companions.";
    player.sendTextMessage(MESSAGE_INFO_DESCR, ss.str());
    return true;
}

bool Party::removeInvite(Player& player, bool removeFromPlayer/* = true*/)
{
    auto it = std::find(inviteList.begin(), inviteList.end(), &player);
    if (it == inviteList.end()) {
        return false;
    }

    inviteList.erase(it);

    leader->sendCreatureShield(&player);
    player.sendCreatureShield(leader);

    if (removeFromPlayer) {
        player.removePartyInvitation(this);
    }

    if (empty()) {
        disband();
    } else {
        for (Player* member : memberList) {
            g_game.updatePlayerHelpers(*member);
        }

        g_game.updatePlayerHelpers(*leader);
    }

    return true;
}

void Party::revokeInvitation(Player& player)
{
    std::ostringstream ss;
    ss << leader->getName() << " has revoked " << (leader->getSex() == PLAYERSEX_FEMALE ? "her" : "his") << " invitation.";
    player.sendTextMessage(MESSAGE_INFO_DESCR, ss.str());

    ss.str(std::string());
    ss << "Invitation for " << player.getName() << " has been revoked.";
    leader->sendTextMessage(MESSAGE_INFO_DESCR, ss.str());

    removeInvite(player);
}

bool Party::invitePlayer(Player& player)
{
    if (isPlayerInvited(&player)) {
        return false;
    }

    std::ostringstream ss;
    ss << player.getName() << " has been invited.";

    if (memberList.empty() && inviteList.empty()) {
        ss << " Open the party channel to communicate with your members.";
        g_game.updatePlayerShield(leader);
        leader->sendCreatureSkull(leader);
    }

    leader->sendTextMessage(MESSAGE_INFO_DESCR, ss.str());

    inviteList.push_back(&player);

    for (Player* member : memberList) {
        g_game.updatePlayerHelpers(*member);
    }
    g_game.updatePlayerHelpers(*leader);

    leader->sendCreatureShield(&player);
    player.sendCreatureShield(leader);

    player.addPartyInvitation(this);

    ss.str(std::string());
    ss << leader->getName() << " has invited you to " << (leader->getSex() == PLAYERSEX_FEMALE ? "her" : "his") << " party.";
    player.sendTextMessage(MESSAGE_INFO_DESCR, ss.str());
    return true;
}

bool Party::isPlayerInvited(const Player* player) const
{
    return std::find(inviteList.begin(), inviteList.end(), player) != inviteList.end();
}

void Party::updateAllPartyIcons()
{
    for (Player* member : memberList) {
        for (Player* otherMember : memberList) {
            member->sendCreatureShield(otherMember);
        }

        member->sendCreatureShield(leader);
        leader->sendCreatureShield(member);
    }
    leader->sendCreatureShield(leader);
}

void Party::broadcastPartyMessage(MessageClasses msgClass, const std::string& msg, bool sendToInvitations /*= false*/)
{
    for (Player* member : memberList) {
        member->sendTextMessage(msgClass, msg);
    }

    leader->sendTextMessage(msgClass, msg);

    if (sendToInvitations) {
        for (Player* invitee : inviteList) {
            invitee->sendTextMessage(msgClass, msg);
        }
    }
}

void Party::broadcastPartyLoot(const std::string& loot)
{
    leader->sendTextMessage(MESSAGE_INFO_DESCR, loot);

    for (Player* member : memberList) {
        member->sendTextMessage(MESSAGE_INFO_DESCR, loot);
    }
}

void Party::updateSharedExperience()
{
    if (sharedExpActive) {
        bool result = canEnableSharedExperience();
        if (result != sharedExpEnabled) {
            sharedExpEnabled = result;
            updateAllPartyIcons();
        }
    }
}

void Party::updateVocationsList()
{
    std::set<uint32_t> vocationIds;

    uint32_t vocationId = leader->getVocation()->getFromVocation();
    if (vocationId != VOCATION_NONE) {
        vocationIds.insert(vocationId);
    }

    for (const Player* member : memberList) {
        vocationId = member->getVocation()->getFromVocation();
        if (vocationId != VOCATION_NONE) {
            vocationIds.insert(vocationId);
        }
    }

    size_t size = vocationIds.size();
    if (size > 1) {
        extraExpRate = static_cast<float>(size * (10 + (size - 1) * 5)) / 100.f;
    } else {
        extraExpRate = 0.20f;
    }
}

bool Party::setSharedExperience(Player* player, bool sharedExpActive)
{
    if (!player || leader != player) {
        return false;
    }

    if (this->sharedExpActive == sharedExpActive) {
        return true;
    }

    this->sharedExpActive = sharedExpActive;

    if (sharedExpActive) {
        this->sharedExpEnabled = canEnableSharedExperience();

        if (this->sharedExpEnabled) {
            leader->sendTextMessage(MESSAGE_INFO_DESCR, "Shared Experience is now active.");
        } else {
            leader->sendTextMessage(MESSAGE_INFO_DESCR, "Shared Experience has been activated, but some members of your party are inactive.");
        }
    } else {
        leader->sendTextMessage(MESSAGE_INFO_DESCR, "Shared Experience has been deactivated.");
    }

    updateAllPartyIcons();
    return true;
}

void Party::shareExperience(uint64_t experience, Creature* source/* = nullptr*/)
{
    uint32_t shareExperience = static_cast<uint64_t>(std::ceil(((static_cast<double>(experience) / (memberList.size() + 1)) + (static_cast<double>(experience) * extraExpRate))));
    for (Player* member : memberList) {
        member->onGainSharedExperience(shareExperience, source);
    }
    leader->onGainSharedExperience(shareExperience, source);
}

bool Party::canUseSharedExperience(const Player* player) const
{
    if (memberList.empty()) {
        return false;
    }

    uint32_t highestLevel = leader->getLevel();
    for (Player* member : memberList) {
        if (member->getLevel() > highestLevel) {
            highestLevel = member->getLevel();
        }
    }

    uint32_t minLevel = static_cast<int32_t>(std::ceil((static_cast<float>(highestLevel) * 2) / 3));
    if (player->getLevel() < minLevel) {
        return false;
    }

    if (!Position::areInRange<30, 30, 1>(leader->getPosition(), player->getPosition())) {
        return false;
    }

    if (!player->hasFlag(PlayerFlag_NotGainInFight)) {
        //check if the player has healed/attacked anything recently
        auto it = ticksMap.find(player->getID());
        if (it == ticksMap.end()) {
            return false;
        }

        uint64_t timeDiff = OTSYS_TIME() - it->second;
        if (timeDiff > static_cast<uint64_t>(g_config.getNumber(ConfigManager::PZ_LOCKED))) {
            return false;
        }
    }
    return true;
}

bool Party::canEnableSharedExperience()
{
    if (!canUseSharedExperience(leader)) {
        return false;
    }

    for (Player* member : memberList) {
        if (!canUseSharedExperience(member)) {
            return false;
        }
    }
    return true;
}

void Party::updatePlayerTicks(Player* player, uint32_t points)
{
    if (points != 0 && !player->hasFlag(PlayerFlag_NotGainInFight)) {
        ticksMap[player->getID()] = OTSYS_TIME();
        updateSharedExperience();
    }
}

void Party::clearPlayerPoints(Player* player)
{
    auto it = ticksMap.find(player->getID());
    if (it != ticksMap.end()) {
        ticksMap.erase(it);
        updateSharedExperience();
    }
}

bool Party::canOpenCorpse(uint32_t ownerId) const
{
    if (Player* player = g_game.getPlayerByID(ownerId)) {
        return leader->getID() == ownerId || player->getParty() == this;
    }
    return false;
}
 

 

Ali em  extraExpRate = 0.20f; , aparenta ser onde deve ser mudado, mas ao longo do codigo tem varias opções suspeitas kkkkk me dar uma luz

@malucooo Brother, obrigado pelas suas contribuições de alto nível

Em 28/08/2016 ás 17:32, jeszao disse:

sabe adicionar os novos itens no store consegui até criar mais não aparece a imagem dos itens queria saber como fazer isso 

i como criar nova aba, la tem a de mount, queria criar uma para (addons, mounts, itens normais, itens vips)

 

Dê uma olhada no Post do nosso amigo @Enzo Caue, ele ensina como colocar fotos no store, duvidas sobre store nós ajudaremos lá no tutorial.

Spoiler

 

 

Link para o post
Compartilhar em outros sites
2 horas atrás, ADM Argel disse:

@malucooo Brother, obrigado pelas suas contribuições de alto nível, o mapa está global? estamos precisando muito do Other World e dos corpses dos new monsters, até tenho os novos só falta corpse.

 

@murilao Irmão seguinte, estou necessitando muito de um auxílio seu, eu quero que no meu servidor os jogadores ao upar de party shared, recebam 2x mais em Exp, sei que isso é nas sources, mas não tenho certeza onde.. acredito que seja aqui em Party.cpp, se sim me diz o que posso mudar.

 

  Mostrar conteúdo oculto

/**
 * The Forgotten Server - a free and open-source MMORPG server emulator
 * Copyright (C) 2016  Mark Samman <[email protected]>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

#include "otpch.h"

#include "party.h"
#include "game.h"
#include "configmanager.h"
#include "events.h"

extern Game g_game;
extern ConfigManager g_config;
extern Events* g_events;

Party::Party(Player* leader)
{
    extraExpRate = 0.20f;

    sharedExpActive = false;
    sharedExpEnabled = false;

    this->leader = leader;
    leader->setParty(this);
}

void Party::disband()
{
    if (!g_events->eventPartyOnDisband(this)) {
        return;
    }

    Player* currentLeader = leader;
    leader = nullptr;

    currentLeader->setParty(nullptr);
    currentLeader->sendClosePrivate(CHANNEL_PARTY);
    g_game.updatePlayerShield(currentLeader);
    g_game.updatePlayerHelpers(*currentLeader);
    currentLeader->sendCreatureSkull(currentLeader);
    currentLeader->sendTextMessage(MESSAGE_INFO_DESCR, "Your party has been disbanded.");

    for (Player* invitee : inviteList) {
        invitee->removePartyInvitation(this);
        currentLeader->sendCreatureShield(invitee);
    }
    inviteList.clear();

    for (Player* member : memberList) {
        member->setParty(nullptr);
        member->sendClosePrivate(CHANNEL_PARTY);
        member->sendTextMessage(MESSAGE_INFO_DESCR, "Your party has been disbanded.");
    }

    for (Player* member : memberList) {
        g_game.updatePlayerShield(member);

        for (Player* otherMember : memberList) {
            otherMember->sendCreatureSkull(member);
        }

        member->sendCreatureSkull(currentLeader);
        currentLeader->sendCreatureSkull(member);
        g_game.updatePlayerHelpers(*member);
    }
    memberList.clear();
    delete this;
}

bool Party::leaveParty(Player* player)
{
    if (!player) {
        return false;
    }

    if (player->getParty() != this && leader != player) {
        return false;
    }

    if (!g_events->eventPartyOnLeave(this, player)) {
        return false;
    }

    bool missingLeader = false;
    if (leader == player) {
        if (!memberList.empty()) {
            if (memberList.size() == 1 && inviteList.empty()) {
                missingLeader = true;
            } else {
                passPartyLeadership(memberList.front());
            }
        } else {
            missingLeader = true;
        }
    }

    //since we already passed the leadership, we remove the player from the list
    auto it = std::find(memberList.begin(), memberList.end(), player);
    if (it != memberList.end()) {
        memberList.erase(it);
    }

    player->setParty(nullptr);
    player->sendClosePrivate(CHANNEL_PARTY);
    g_game.updatePlayerShield(player);
    g_game.updatePlayerHelpers(*player);

    for (Player* member : memberList) {
        member->sendCreatureSkull(player);
        player->sendPlayerPartyIcons(member);
        g_game.updatePlayerHelpers(*member);
    }

    leader->sendCreatureSkull(player);
    player->sendCreatureSkull(player);
    player->sendPlayerPartyIcons(leader);

    player->sendTextMessage(MESSAGE_INFO_DESCR, "You have left the party.");

    updateSharedExperience();
    updateVocationsList();

    clearPlayerPoints(player);

    std::ostringstream ss;
    ss << player->getName() << " has left the party.";
    broadcastPartyMessage(MESSAGE_INFO_DESCR, ss.str());

    if (missingLeader || empty()) {
        disband();
    }

    return true;
}

bool Party::passPartyLeadership(Player* player)
{
    if (!player || leader == player || player->getParty() != this) {
        return false;
    }

    //Remove it before to broadcast the message correctly
    auto it = std::find(memberList.begin(), memberList.end(), player);
    if (it != memberList.end()) {
        memberList.erase(it);
    }

    std::ostringstream ss;
    ss << player->getName() << " is now the leader of the party.";
    broadcastPartyMessage(MESSAGE_INFO_DESCR, ss.str(), true);

    Player* oldLeader = leader;
    leader = player;

    memberList.insert(memberList.begin(), oldLeader);

    updateSharedExperience();

    for (Player* member : memberList) {
        member->sendCreatureShield(oldLeader);
        member->sendCreatureShield(leader);
    }

    for (Player* invitee : inviteList) {
        invitee->sendCreatureShield(oldLeader);
        invitee->sendCreatureShield(leader);
    }

    leader->sendCreatureShield(oldLeader);
    leader->sendCreatureShield(leader);

    player->sendTextMessage(MESSAGE_INFO_DESCR, "You are now the leader of the party.");
    return true;
}

bool Party::joinParty(Player& player)
{
    if (!g_events->eventPartyOnJoin(this, &player)) {
        return false;
    }

    auto it = std::find(inviteList.begin(), inviteList.end(), &player);
    if (it == inviteList.end()) {
        return false;
    }

    inviteList.erase(it);

    std::ostringstream ss;
    ss << player.getName() << " has joined the party.";
    broadcastPartyMessage(MESSAGE_INFO_DESCR, ss.str());

    player.setParty(this);

    g_game.updatePlayerShield(&player);

    for (Player* member : memberList) {
        member->sendCreatureSkull(&player);
        player.sendPlayerPartyIcons(member);
    }

    player.sendCreatureSkull(&player);
    leader->sendCreatureSkull(&player);
    player.sendPlayerPartyIcons(leader);

    memberList.push_back(&player);

    g_game.updatePlayerHelpers(player);

    player.removePartyInvitation(this);
    updateSharedExperience();
    updateVocationsList();

    const std::string& leaderName = leader->getName();
    ss.str(std::string());
    ss << "You have joined " << leaderName << "'" << (leaderName.back() == 's' ? "" : "s") <<
       " party. Open the party channel to communicate with your companions.";
    player.sendTextMessage(MESSAGE_INFO_DESCR, ss.str());
    return true;
}

bool Party::removeInvite(Player& player, bool removeFromPlayer/* = true*/)
{
    auto it = std::find(inviteList.begin(), inviteList.end(), &player);
    if (it == inviteList.end()) {
        return false;
    }

    inviteList.erase(it);

    leader->sendCreatureShield(&player);
    player.sendCreatureShield(leader);

    if (removeFromPlayer) {
        player.removePartyInvitation(this);
    }

    if (empty()) {
        disband();
    } else {
        for (Player* member : memberList) {
            g_game.updatePlayerHelpers(*member);
        }

        g_game.updatePlayerHelpers(*leader);
    }

    return true;
}

void Party::revokeInvitation(Player& player)
{
    std::ostringstream ss;
    ss << leader->getName() << " has revoked " << (leader->getSex() == PLAYERSEX_FEMALE ? "her" : "his") << " invitation.";
    player.sendTextMessage(MESSAGE_INFO_DESCR, ss.str());

    ss.str(std::string());
    ss << "Invitation for " << player.getName() << " has been revoked.";
    leader->sendTextMessage(MESSAGE_INFO_DESCR, ss.str());

    removeInvite(player);
}

bool Party::invitePlayer(Player& player)
{
    if (isPlayerInvited(&player)) {
        return false;
    }

    std::ostringstream ss;
    ss << player.getName() << " has been invited.";

    if (memberList.empty() && inviteList.empty()) {
        ss << " Open the party channel to communicate with your members.";
        g_game.updatePlayerShield(leader);
        leader->sendCreatureSkull(leader);
    }

    leader->sendTextMessage(MESSAGE_INFO_DESCR, ss.str());

    inviteList.push_back(&player);

    for (Player* member : memberList) {
        g_game.updatePlayerHelpers(*member);
    }
    g_game.updatePlayerHelpers(*leader);

    leader->sendCreatureShield(&player);
    player.sendCreatureShield(leader);

    player.addPartyInvitation(this);

    ss.str(std::string());
    ss << leader->getName() << " has invited you to " << (leader->getSex() == PLAYERSEX_FEMALE ? "her" : "his") << " party.";
    player.sendTextMessage(MESSAGE_INFO_DESCR, ss.str());
    return true;
}

bool Party::isPlayerInvited(const Player* player) const
{
    return std::find(inviteList.begin(), inviteList.end(), player) != inviteList.end();
}

void Party::updateAllPartyIcons()
{
    for (Player* member : memberList) {
        for (Player* otherMember : memberList) {
            member->sendCreatureShield(otherMember);
        }

        member->sendCreatureShield(leader);
        leader->sendCreatureShield(member);
    }
    leader->sendCreatureShield(leader);
}

void Party::broadcastPartyMessage(MessageClasses msgClass, const std::string& msg, bool sendToInvitations /*= false*/)
{
    for (Player* member : memberList) {
        member->sendTextMessage(msgClass, msg);
    }

    leader->sendTextMessage(msgClass, msg);

    if (sendToInvitations) {
        for (Player* invitee : inviteList) {
            invitee->sendTextMessage(msgClass, msg);
        }
    }
}

void Party::broadcastPartyLoot(const std::string& loot)
{
    leader->sendTextMessage(MESSAGE_INFO_DESCR, loot);

    for (Player* member : memberList) {
        member->sendTextMessage(MESSAGE_INFO_DESCR, loot);
    }
}

void Party::updateSharedExperience()
{
    if (sharedExpActive) {
        bool result = canEnableSharedExperience();
        if (result != sharedExpEnabled) {
            sharedExpEnabled = result;
            updateAllPartyIcons();
        }
    }
}

void Party::updateVocationsList()
{
    std::set<uint32_t> vocationIds;

    uint32_t vocationId = leader->getVocation()->getFromVocation();
    if (vocationId != VOCATION_NONE) {
        vocationIds.insert(vocationId);
    }

    for (const Player* member : memberList) {
        vocationId = member->getVocation()->getFromVocation();
        if (vocationId != VOCATION_NONE) {
            vocationIds.insert(vocationId);
        }
    }

    size_t size = vocationIds.size();
    if (size > 1) {
        extraExpRate = static_cast<float>(size * (10 + (size - 1) * 5)) / 100.f;
    } else {
        extraExpRate = 0.20f;
    }
}

bool Party::setSharedExperience(Player* player, bool sharedExpActive)
{
    if (!player || leader != player) {
        return false;
    }

    if (this->sharedExpActive == sharedExpActive) {
        return true;
    }

    this->sharedExpActive = sharedExpActive;

    if (sharedExpActive) {
        this->sharedExpEnabled = canEnableSharedExperience();

        if (this->sharedExpEnabled) {
            leader->sendTextMessage(MESSAGE_INFO_DESCR, "Shared Experience is now active.");
        } else {
            leader->sendTextMessage(MESSAGE_INFO_DESCR, "Shared Experience has been activated, but some members of your party are inactive.");
        }
    } else {
        leader->sendTextMessage(MESSAGE_INFO_DESCR, "Shared Experience has been deactivated.");
    }

    updateAllPartyIcons();
    return true;
}

void Party::shareExperience(uint64_t experience, Creature* source/* = nullptr*/)
{
    uint32_t shareExperience = static_cast<uint64_t>(std::ceil(((static_cast<double>(experience) / (memberList.size() + 1)) + (static_cast<double>(experience) * extraExpRate))));
    for (Player* member : memberList) {
        member->onGainSharedExperience(shareExperience, source);
    }
    leader->onGainSharedExperience(shareExperience, source);
}

bool Party::canUseSharedExperience(const Player* player) const
{
    if (memberList.empty()) {
        return false;
    }

    uint32_t highestLevel = leader->getLevel();
    for (Player* member : memberList) {
        if (member->getLevel() > highestLevel) {
            highestLevel = member->getLevel();
        }
    }

    uint32_t minLevel = static_cast<int32_t>(std::ceil((static_cast<float>(highestLevel) * 2) / 3));
    if (player->getLevel() < minLevel) {
        return false;
    }

    if (!Position::areInRange<30, 30, 1>(leader->getPosition(), player->getPosition())) {
        return false;
    }

    if (!player->hasFlag(PlayerFlag_NotGainInFight)) {
        //check if the player has healed/attacked anything recently
        auto it = ticksMap.find(player->getID());
        if (it == ticksMap.end()) {
            return false;
        }

        uint64_t timeDiff = OTSYS_TIME() - it->second;
        if (timeDiff > static_cast<uint64_t>(g_config.getNumber(ConfigManager::PZ_LOCKED))) {
            return false;
        }
    }
    return true;
}

bool Party::canEnableSharedExperience()
{
    if (!canUseSharedExperience(leader)) {
        return false;
    }

    for (Player* member : memberList) {
        if (!canUseSharedExperience(member)) {
            return false;
        }
    }
    return true;
}

void Party::updatePlayerTicks(Player* player, uint32_t points)
{
    if (points != 0 && !player->hasFlag(PlayerFlag_NotGainInFight)) {
        ticksMap[player->getID()] = OTSYS_TIME();
        updateSharedExperience();
    }
}

void Party::clearPlayerPoints(Player* player)
{
    auto it = ticksMap.find(player->getID());
    if (it != ticksMap.end()) {
        ticksMap.erase(it);
        updateSharedExperience();
    }
}

bool Party::canOpenCorpse(uint32_t ownerId) const
{
    if (Player* player = g_game.getPlayerByID(ownerId)) {
        return leader->getID() == ownerId || player->getParty() == this;
    }
    return false;
}
 

 

Ali em  extraExpRate = 0.20f; , aparenta ser onde deve ser mudado, mas ao longo do codigo tem varias opções suspeitas kkkkk me dar uma luz

@malucooo Brother, obrigado pelas suas contribuições de alto nível

 

Dê uma olhada no Post do nosso amigo @Enzo Caue, ele ensina como colocar fotos no store, duvidas sobre store nós ajudaremos lá no tutorial.

  Mostrar conteúdo oculto

 

 

É nessa parte do Extraxprate agora vc tem que colocar lá quanto vc quer nas formula.

                                          King is Back !                                  Está vendo esse coraçãozinho? Dar um Voto Positivo?                                                                                                                                                                                                       clica ali se eu te ajudei muito. Obrigado !

 

[Tutorial] Colocando sua senha no novo XAMPP

[Tutorial] Como compilar tfs 1.2 no Visual Studio 2015

------------------------------------------

  • Contato:

                    Discord: Lirosz#6563

                      Ts3: 104.154.235.159

 

 

Link para o post
Compartilhar em outros sites

Amigos, está dando erro de packet. Mesmo sendo corrigido aquele negócio do autobanish. 
Quando alguém tenta logar diz que é um pacote inválido e dá erro, no 64 bits ele nem abre o executavel.

Link para o post
Compartilhar em outros sites
Amigos, está dando erro de packet. Mesmo sendo corrigido aquele negócio do autobanish. 
Quando alguém tenta logar diz que é um pacote inválido e dá erro, no 64 bits ele nem abre o executavel.


Como assim que não abre executável no 64 bit? Mostra algo erro no log ?

                                          King is Back !                                  Está vendo esse coraçãozinho? Dar um Voto Positivo?                                                                                                                                                                                                       clica ali se eu te ajudei muito. Obrigado !

 

[Tutorial] Colocando sua senha no novo XAMPP

[Tutorial] Como compilar tfs 1.2 no Visual Studio 2015

------------------------------------------

  • Contato:

                    Discord: Lirosz#6563

                      Ts3: 104.154.235.159

 

 

Link para o post
Compartilhar em outros sites
4 minutos atrás, murilao disse:


Como assim que não abre executável no 64 bit? Mostra algo erro no log ?

Ele abre rapidamente e fecha. Sabe?
Já configuramos o site, tudo certinho para que funcione porém não conseguimos executar. Quando alguém tenta logar no servidor também dá erro de packet, sendo que ja ajeitamos essa opção no config.lua. 

 

Link para o post
Compartilhar em outros sites
Ele abre rapidamente e fecha. Sabe?
Já configuramos o site, tudo certinho para que funcione porém não conseguimos executar. Quando alguém tenta logar no servidor também dá erro de packet, sendo que ja ajeitamos essa opção no config.lua. 

 


Tenta tirar print no log e manda aqui.

                                          King is Back !                                  Está vendo esse coraçãozinho? Dar um Voto Positivo?                                                                                                                                                                                                       clica ali se eu te ajudei muito. Obrigado !

 

[Tutorial] Colocando sua senha no novo XAMPP

[Tutorial] Como compilar tfs 1.2 no Visual Studio 2015

------------------------------------------

  • Contato:

                    Discord: Lirosz#6563

                      Ts3: 104.154.235.159

 

 

Link para o post
Compartilhar em outros sites
2 minutos atrás, murilao disse:


Tenta tirar print no log e manda aqui.

 

Não aparece log, mas vou mandar uma print que eu tirei.

Erro.PNG

 

Eu ajeitei na config.lua para tentar fazer a entrada no servidor, porém continua a dar esse erro maroto. Não estamos conseguindo corrigir.

 

Link para o post
Compartilhar em outros sites
 

Não aparece log, mas vou mandar uma print que eu tirei.

Erro.PNG

 

Eu ajeitei na config.lua para tentar fazer a entrada no servidor, porém continua a dar esse erro maroto. Não estamos conseguindo corrigir.

 


O que vc mecheu no config.lua ? Poste aqui seu config em spoiler.

                                          King is Back !                                  Está vendo esse coraçãozinho? Dar um Voto Positivo?                                                                                                                                                                                                       clica ali se eu te ajudei muito. Obrigado !

 

[Tutorial] Colocando sua senha no novo XAMPP

[Tutorial] Como compilar tfs 1.2 no Visual Studio 2015

------------------------------------------

  • Contato:

                    Discord: Lirosz#6563

                      Ts3: 104.154.235.159

 

 

Link para o post
Compartilhar em outros sites
17 minutos atrás, murilao disse:


O que vc mecheu no config.lua ? Poste aqui seu config em spoiler.

 

Não estou conseguindo colocar todo o texto da config.

Segue a mesma: Config.lua

 

No caso mexi na parte: maxPacketsPerSecond = 25

Estava na parte dos 20, estava tentando logar no servidor após deixar até o site online. Configurar a database corretamente, porém está com esse erro. Que aparece na imagem.

O executável também não abre direito mesmo com a dll dá um rápido erro e não abre.

 

O s.o é Windows Server 2012 64 bits.

Link para o post
Compartilhar em outros sites
3 horas atrás, murilao disse:

É nessa parte do Extraxprate agora vc tem que colocar lá quanto vc quer nas formula.

 

Mas tem varias partes que tem exprate tendeu? me dar uma mão kkkk

45 minutos atrás, Gabriel Montes disse:

 

Não estou conseguindo colocar todo o texto da config.

Segue a mesma: Config.lua

 

No caso mexi na parte: maxPacketsPerSecond = 25

Estava na parte dos 20, estava tentando logar no servidor após deixar até o site online. Configurar a database corretamente, porém está com esse erro. Que aparece na imagem.

O executável também não abre direito mesmo com a dll dá um rápido erro e não abre.

 

O s.o é Windows Server 2012 64 bits.

 

Irmão sinto muito mas pelo que foi visto aqui, o servidor só está realmente instável na plataforma windows em windows versão 8.1 ou superior, eu utilizo 10.

No windows Xp, windows server 2013 e windows 7 Ultimate 64 bits nenhum deles consegui rodar, toda vez o executável fechava, pode até ser que um momento rode, mas depois fecha sozinho.

 

O Malucoo postou isso logo no início do post falando indicando Windows 8.1 ou 10 e falou isso tb:

O servidor apresenta mensagem de erro ao tentar abrir, o que eu faço?

 

- Procure no google vc_redistx86 e vc_redistx64, e instale-os...

 

Boa sorte man

Link para o post
Compartilhar em outros sites
58 minutos atrás, Gabriel Montes disse:

 

Não estou conseguindo colocar todo o texto da config.

Segue a mesma: Config.lua

 

No caso mexi na parte: maxPacketsPerSecond = 25

Estava na parte dos 20, estava tentando logar no servidor após deixar até o site online. Configurar a database corretamente, porém está com esse erro. Que aparece na imagem.

O executável também não abre direito mesmo com a dll dá um rápido erro e não abre.

 

O s.o é Windows Server 2012 64 bits.

Como o amigo acima citou esse servidor so vai rodar nesse sistema. Se for vps recomendo usar ubuntu.

                                          King is Back !                                  Está vendo esse coraçãozinho? Dar um Voto Positivo?                                                                                                                                                                                                       clica ali se eu te ajudei muito. Obrigado !

 

[Tutorial] Colocando sua senha no novo XAMPP

[Tutorial] Como compilar tfs 1.2 no Visual Studio 2015

------------------------------------------

  • Contato:

                    Discord: Lirosz#6563

                      Ts3: 104.154.235.159

 

 

Link para o post
Compartilhar em outros sites
3 minutos atrás, murilao disse:

Como o amigo acima citou esse servidor so vai rodar nesse sistema. Se for vps recomendo usar ubuntu.

 

Exatamente, nota 10 Murilao kkkkk s2, sempre ajudando ai a galera

Editado por ADM Argel
tt (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Eu tenho um servidor online em um VPS (Windows server 2012 standard) o servidor fica ligado de boa.

nunca deu um crash, essa distro é 100% estável, tanto em Windows quanto em Llinux.

no Windows caso de algum erro de inicialização do executável, basta instalar o visual studio 2015, que ele vai instalar as Dll's necessárias.

 

Abraço !

 

Editado por igorlabanca (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Erimyth pinned this tópico
  • Erimyth featured this tópico
  • Erimyth unfeatured e unpinned this tópico

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Johncore
      Olá galera, é com muita dedicação que trago para este forum uma exclusividade que só eu tinha.
      Mapa Dragonsouls 11x 99%, tem alguns detalhes de sqm ou borda que você possa precisar fazer,
      Dragonsouls é um servidor ATS Custom, baseado em senhor dos aneis. via muita gente perguntando por esse mapa e eu tinha a muitos anos, resolvi converter.
      mas ele está 99% pronto para uso.
       
      Esse mapa é 100% compativel para rodar na Datapack Otg Server 11,
      Otg Server é um projeto que trabalha com varias datapacks de tibia rl e ATS Custom.
       
      Github:
      https://github.com/otg-br/
       
      Participe do grupo Otg Server:  
      https://chat.whatsapp.com/EWV3dVvS6nt1em7q23FGu7
       
       
      MAPA:
       
      INICIAL ISLAND

       
      CARLIN

       
      CIDADE TIRITH

       
      CIDADE BREE

       
       
       
       
      world.zip
    • Por Johncore
      Olá pessoas, estou disponibilizando aqui mais uma exclusividade que é o Mapa Evolunia, ele é baseado no servidor Evolunia.net
       
      Esse mapa é 100% compativel para rodar na Datapack Otg Server 11x,
      Otg Server é um projeto que trabalha com varias datapacks de tibia rl e ATS Custom.
       
      Participe do grupo Otg Server:  
      https://chat.whatsapp.com/EWV3dVvS6nt1em7q23FGu7
       
      Creditos:
      evolunia
      world.zip
    • Por Johncore
      Otg Server é um projeto fork do The Forgotten Server 1.3, feito por brasileiros que visam sempre por estabilidade, um código mais clean, temos no projeto várias Datapacks como
      Global 11.0, Global 8.6, Global 8.0, RadBR 11.0, Evolutions 11.0, Yurots Classic 11.0, nossa base também é excelente para rodar projetos que são mapa Baiak ou ATS Custom pelo baixissimo uso de cpu e fix do Decay de itens.

      Todos são bem vindos para colaborar com o projeto... que não visa nenhum lucro financeiro, queremos apenas colaborar com a comunidade OTSERV,
      temos ouvido de muitas pessoas que procuram uma base estável, limpa, esse é o nosso objetivo nesse projeto.
       
      Estamos a procura de programadores/dev/webmaster que queiram ajudar / que tenham tempo e serão recompensados por isso.
       
      Nossa Datapack principal Global 11.00 contem as seguintes features:
      CAST SYSTEM ✅
      AUTOLOOT ✅
      WINTER UPDATE 2023 ✅
      SUMMER UPDATE 2023 ✅
      ADDONS 13.22 UPDATE ✅
      MONTARIAS 13.22 UPDATE ✅
      ITEMS 13.22 UPDATE ✅
      DAILY REWARD ✅
      IMBUEMENTS ✅
      PREY ✅
      EXERCISE WEAPONS ✅
      HIRELINGS NPCS ✅
      ANTI ROLLBACK ✅
       
       
      Github Global 11x:  💾
      https://github.com/otg-br/global-11x
      Clients e outras ferramentas:  💾
      https://github.com/otg-br/tools
      Github Otg Gesior:  💾
      https://github.com/otg-br/gesior
      Github Otg Otclientv8:  💾
      https://github.com/otg-br/otclientv8
      Wiki Otg:  💾
      https://github.com/otg-br/global-11x/wiki
       
       
      Creditos:
      TFS Team Erick Nunes Gui Bruxo Worthdavi LuSKT Leo Pereira Luan Luciano Cjaker Comedinhas Nekiro OTG Colaborators
    • Por Dnzk21
      COMO POSSO IMPORTAR UMA CITY EMCIMA DE OUTRA CITY SEM PERDER AS HOUSES
      ALGUEM PODE M,E AJUDAR 
      E A MESMA CITY MJAIS QUANDO IMPORTO PERDE TODAS CASAS QUANDO SALVA E ABRE O SERVIDOR
    • Por Johncore
      Arcadia é uma cidade custom bem bonita que pode ser encontrada no servidor AureraGlobal,
      Por ter esse conteudo aqui em primeira mão, resolvi disponibilizar para a comunidade.
       


       
      Creditos:
      Aurera Team
      Johncorex
      Arcadia-spawn.xml Arcadia-house.xml Arcadia.otbm

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo