Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Gostaria de pedir um share exp que todos da party ganhassem 100% da exp do mob e não que dividisse.

Uso TFS 0.3.6 e tenho acesso as sources.
OBS: Não funciona editar pelo config.lua

No final da década de 20, quando Eurico Miranda ainda nem era nascido, fomos proibidos de disputar o Estadual por aceitarmos atletas negros e operários. Depois a desculpa era por não termos estádio. E demos a resposta construindo um.

Na década de 40, quando Eurico era apenas uma criança, o jornalista mulambo Ary Barroso (na época, o principal jornalista esportivo do Rio) já era proibido de entrar em São Januário por só falar mal do Vasco. 

No final desta mesma década, quando São Januário seria reformado com verba pública para receber a Copa do Mundo (nada mais lógico, pois em troca iriamos ceder o nosso estádio), a mídia marrom arrotou sua pseudo-ética pública contra nós. E veio o Maracanã, cuja construção todos já conhecem o resultado, para depois ser dado de bandeja pro urubu e pro clube da série C.

Em 1950, após a perda da Copa pro Uruguai, quando Eurico Miranda continuava sendo apenas uma criança, o jornalista Armando Nogueira AFIRMOU que o Brasil só perdeu a Copa pois tinha muitos atletas do Vasco, e que estes eram os grandes culpados pelo "Maracanazzo". Segundo ele, os jogadores vascaínos não eram brasileiros:

"As equipes entram em campo.. Reconheço, um a um, os jogadores brasileiros: Barbosa; Augusto e Juvenal; Bauer, Danilo e Bigode; Friaça, Zizinho, Ademir, Jair e Chico. Aflora, outra vez em mim, a mágoa clubística. Lanço sobre a equipe um olhar de botafoguense ressentido. Vejo, em campo, apenas quatro autênticos brasileiros: Bauer, do São Paulo, Juvenal, da Portuguesa, Bigode, do Fluminense, e Zizinho, do Flamengo. Os outros sete são vascaínos. Velhos e mortais inimigos da pequena porém brava nação botafoguense… Quer saber de uma coisa? É melhor mesmo que ganhe o Uruguai. Eles são gringos, vão todos embora daqui amanhã. Ninguém vai encarnar em mim. (…)"

O Vasco não criou inimigos através das ações de Eurico Miranda. O Vasco criou inimigos quando afrontou a elite da zona sul e se impôs como clube popular. O ranço contra a instituição de origem lusitana, mas alma brasileira, vem desde 1898.

Saudações Vascaínas !

Link para o post
Compartilhar em outros sites
Em 18/01/2018 em 18:40, grafit disse:

Posta o seu party.cpp aí

Segue abaixo o party.cpp



////////////////////////////////////////////////////////////////////////
// OpenTibia - an opensource roleplaying game
////////////////////////////////////////////////////////////////////////
// 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 3 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, see <http://www.gnu.org/licenses/>.
////////////////////////////////////////////////////////////////////////
#include "otpch.h"
#include "party.h"

#include "player.h"
#include "chat.h"
#include "game.h"
#include "configmanager.h"

extern Game g_game;
extern Chat g_chat;
extern ConfigManager g_config;

Party::Party(Player* _leader)
{
    sharedExpActive = sharedExpEnabled = false;
    if(_leader)
    {
        leader = _leader;
        leader->setParty(this);
        leader->sendPlayerPartyIcons(leader);
    }
}

void Party::disband()
{
    leader->sendClosePrivate(CHANNEL_PARTY);
    leader->setParty(NULL);
    leader->sendTextMessage(MSG_INFO_DESCR, "Your party has been disbanded.");

    leader->sendPlayerPartyIcons(leader);
    for(PlayerVector::iterator it = inviteList.begin(); it != inviteList.end(); ++it)
    {
        (*it)->removePartyInvitation(this);
        (*it)->sendPlayerPartyIcons(leader);
        (*it)->sendPlayerPartyIcons(*it);
        leader->sendPlayerPartyIcons(*it);
    }

    inviteList.clear();
    for(PlayerVector::iterator it = memberList.begin(); it != memberList.end(); ++it)
    {
        (*it)->sendClosePrivate(CHANNEL_PARTY);
        (*it)->setParty(NULL);
        (*it)->sendTextMessage(MSG_INFO_DESCR, "Your party has been disbanded.");

        (*it)->sendPlayerPartyIcons(*it);
        (*it)->sendPlayerPartyIcons(leader);
        leader->sendPlayerPartyIcons(*it);
    }

    memberList.clear();
    leader = NULL;
    delete this;
}

bool Party::leave(Player* player)
{
    if(!isPlayerMember(player) && player != leader)
        return false;

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

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

    it = std::find(inviteList.begin(), inviteList.end(), player);
    if(it != inviteList.end())
        inviteList.erase(it);

    player->setParty(NULL);
    player->sendClosePrivate(CHANNEL_PARTY);

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

    updateSharedExperience();
    updateIcons(player);
    clearPlayerPoints(player);

    char buffer[105];
    sprintf(buffer, "%s has left the party.", player->getName().c_str());

    broadcastMessage(MSG_INFO_DESCR, buffer);
    if(missingLeader || canDisband())
        disband();

    return true;
}

bool Party::passLeadership(Player* player)
{
    if(!isPlayerMember(player) || player == leader)
        return false;

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

    Player* oldLeader = leader;
    leader = player;
    memberList.insert(memberList.begin(), oldLeader);

    char buffer[125];
    sprintf(buffer, "%s is now the leader of the party.", player->getName().c_str());
    broadcastMessage(MSG_INFO_DESCR, buffer, true);

    player->sendTextMessage(MSG_INFO_DESCR, "You are now the leader of the party.");
    updateSharedExperience();

    updateIcons(oldLeader);
    updateIcons(player);
    return true;
}

bool Party::join(Player* player)
{
    if(isPlayerMember(player) || !isPlayerInvited(player))
        return false;

    memberList.push_back(player);
    player->setParty(this);

    player->removePartyInvitation(this);
    PlayerVector::iterator it = std::find(inviteList.begin(), inviteList.end(), player);
    if(it != inviteList.end())
        inviteList.erase(it);

    char buffer[200];
    sprintf(buffer, "%s has joined the party.", player->getName().c_str());
    broadcastMessage(MSG_INFO_DESCR, buffer);

    sprintf(buffer, "You have joined %s'%s party. Open the party channel to communicate with your companions.", leader->getName().c_str(), (leader->getName()[leader->getName().length() - 1] == 's' ? "" : "s"));
    player->sendTextMessage(MSG_INFO_DESCR, buffer);

    updateSharedExperience();
    updateIcons(player);
    return true;
}

bool Party::removeInvite(Player* player)
{
    if(!isPlayerInvited(player))
        return false;

    PlayerVector::iterator it = std::find(inviteList.begin(), inviteList.end(), player);
    if(it != inviteList.end())
        inviteList.erase(it);

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

    player->removePartyInvitation(this);
    if(canDisband())
        disband();

    return true;
}

void Party::revokeInvitation(Player* player)
{
    if(!player || player->isRemoved())
        return;

    char buffer[150];
    sprintf(buffer, "%s has revoked %s invitation.", leader->getName().c_str(), (leader->getSex(false) ? "his" : "her"));
    player->sendTextMessage(MSG_INFO_DESCR, buffer);

    sprintf(buffer, "Invitation for %s has been revoked.", player->getName().c_str());
    leader->sendTextMessage(MSG_INFO_DESCR, buffer);
    removeInvite(player);
}

bool Party::invitePlayer(Player* player)
{
    if(isPlayerInvited(player, true))
        return false;

    inviteList.push_back(player);
    player->addPartyInvitation(this);

    char buffer[150];
    sprintf(buffer, "%s has been invited.%s", player->getName().c_str(), (!memberList.size() ? " Open the party channel to communicate with your members." : ""));
    leader->sendTextMessage(MSG_INFO_DESCR, buffer);

    sprintf(buffer, "%s has invited you to %s party.", leader->getName().c_str(), (leader->getSex(false) ? "his" : "her"));
    player->sendTextMessage(MSG_INFO_DESCR, buffer);

    leader->sendPlayerPartyIcons(player);
    player->sendPlayerPartyIcons(leader);
    return true;
}

void Party::updateIcons(Player* player)
{
    if(!player || player->isRemoved())
        return;

    PlayerVector::iterator it;
    for(it = memberList.begin(); it != memberList.end(); ++it)
    {
        (*it)->sendPlayerPartyIcons(player);
        player->sendPlayerPartyIcons((*it));
    }

    for(it = inviteList.begin(); it != inviteList.end(); ++it)
    {
        (*it)->sendPlayerPartyIcons(player);
        player->sendPlayerPartyIcons((*it));
    }

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

void Party::updateAllIcons()
{
    PlayerVector::iterator it;
    for(it = memberList.begin(); it != memberList.end(); ++it)
    {
        for(PlayerVector::iterator iit = memberList.begin(); iit != memberList.end(); ++iit)
            (*it)->sendPlayerPartyIcons((*iit));

        (*it)->sendPlayerPartyIcons(leader);
        leader->sendPlayerPartyIcons((*it));
    }

    leader->sendPlayerPartyIcons(leader);
    for(it = inviteList.begin(); it != inviteList.end(); ++it)
        (*it)->sendPlayerPartyIcons(leader);
}

void Party::broadcastMessage(MessageClasses messageClass, const std::string& text, bool sendToInvitations/* = false*/)
{
    PlayerVector::iterator it;
    if(!memberList.empty())
    {
        for(it = memberList.begin(); it != memberList.end(); ++it)
            (*it)->sendTextMessage(messageClass, text);
    }

    leader->sendTextMessage(messageClass, text);
    if(!sendToInvitations || inviteList.empty())
        return;

    for(it = inviteList.begin(); it != inviteList.end(); ++it)
        (*it)->sendTextMessage(messageClass, text);
}

void Party::updateSharedExperience()
{
    if(!sharedExpActive)
        return;

    bool result = canEnableSharedExperience();
    if(result == sharedExpEnabled)
        return;

    sharedExpEnabled = result;
    updateAllIcons();
}

bool Party::setSharedExperience(Player* player, bool _sharedExpActive)
{
    if(!player || player->isRemoved() || player != leader)
        return false;

    if(sharedExpActive == _sharedExpActive)
        return true;

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

    updateAllIcons();
    return true;
}

void Party::shareExperience(double experience, bool fromMonster, bool multiplied)
{
    double shareExperience = (experience / (double)(memberList.size() + 1));
    if(experience > (double)g_config.getNumber(ConfigManager::EXTRA_PARTY_LIMIT))
        shareExperience += (experience * (double)(g_config.getNumber(ConfigManager::EXTRA_PARTY_PERCENT) / 100));

    double tmpExperience = shareExperience;
    leader->onGainSharedExperience(tmpExperience, fromMonster, multiplied);
    for(PlayerVector::iterator it = memberList.begin(); it != memberList.end(); ++it)
    {
        tmpExperience = shareExperience;
        (*it)->onGainSharedExperience(tmpExperience, fromMonster, multiplied);
    }
}

bool Party::canUseSharedExperience(const Player* player, uint32_t highestLevel/* = 0*/) const
{
    if(!player || player->isRemoved())
        return false;

    if(!highestLevel)
    {
        highestLevel = leader->getLevel();
        for(PlayerVector::const_iterator it = memberList.begin(); it != memberList.end(); ++it)
        {
            if((*it)->getLevel() > highestLevel)
                highestLevel = (*it)->getLevel();
        }
    }

    if(player->getLevel() < (uint32_t)std::ceil((double)highestLevel * g_config.getDouble(
        ConfigManager::PARTY_DIFFERENCE)) || !Position::areInRange(Position(
        g_config.getNumber(ConfigManager::PARTY_RADIUS_X), g_config.getNumber(
        ConfigManager::PARTY_RADIUS_Y), g_config.getNumber(ConfigManager::PARTY_RADIUS_Z)),
        leader->getPosition(), player->getPosition()))
        return false;

    CountMap::const_iterator it = pointMap.find(player->getID());
    return it != pointMap.end() && (OTSYS_TIME() - it->second.ticks) <= g_config.getNumber(
        ConfigManager::EXPERIENCE_SHARE_ACTIVITY);
}

bool Party::canEnableSharedExperience()
{
    if(!memberList.size())
        return false;

    uint32_t highestLevel = leader->getLevel();
    for(PlayerVector::iterator it = memberList.begin(); it != memberList.end(); ++it)
    {
        if((*it)->getLevel() > highestLevel)
            highestLevel = (*it)->getLevel();
    }

    for(PlayerVector::iterator it = memberList.begin(); it != memberList.end(); ++it)
    {
        if(!canUseSharedExperience((*it), highestLevel))
            return false;
    }

    return canUseSharedExperience(leader, highestLevel);
}

void Party::addPlayerHealedMember(Player* player, uint32_t points)
{
    if(points <= 0)
        return;

    CountMap::iterator it = pointMap.find(player->getID());
    if(it != pointMap.end())
    {
        it->second.totalHeal += points;
        it->second.ticks = OTSYS_TIME();
    }
    else
        pointMap[player->getID()] = CountBlock_t(points, 0);

    updateSharedExperience();
}

void Party::addPlayerDamageMonster(Player* player, uint32_t points)
{
    if(points <= 0)
        return;

    CountMap::iterator it = pointMap.find(player->getID());
    if(it != pointMap.end())
    {
        it->second.totalDamage += points;
        it->second.ticks = OTSYS_TIME();
    }
    else
        pointMap[player->getID()] = CountBlock_t(0, points);

    updateSharedExperience();
}

void Party::clearPlayerPoints(Player* player)
{
    CountMap::iterator it = pointMap.find(player->getID());
    if(it == pointMap.end())
        return;

    pointMap.erase(it);
    updateSharedExperience();
}

bool Party::isPlayerMember(const Player* player, bool result/* = false*/) const
{
    if(!player || player->isRemoved())
        return result;

    return std::find(memberList.begin(), memberList.end(), player) != memberList.end();
}

bool Party::isPlayerInvited(const Player* player, bool result/* = false*/) const
{
    if(!player || player->isRemoved())
        return result;

    return std::find(inviteList.begin(), inviteList.end(), player) != inviteList.end();
}

bool Party::canOpenCorpse(uint32_t ownerId)
{
    return leader->getID() == ownerId || isPlayerMember(g_game.getPlayerByID(ownerId));
}
 

No final da década de 20, quando Eurico Miranda ainda nem era nascido, fomos proibidos de disputar o Estadual por aceitarmos atletas negros e operários. Depois a desculpa era por não termos estádio. E demos a resposta construindo um.

Na década de 40, quando Eurico era apenas uma criança, o jornalista mulambo Ary Barroso (na época, o principal jornalista esportivo do Rio) já era proibido de entrar em São Januário por só falar mal do Vasco. 

No final desta mesma década, quando São Januário seria reformado com verba pública para receber a Copa do Mundo (nada mais lógico, pois em troca iriamos ceder o nosso estádio), a mídia marrom arrotou sua pseudo-ética pública contra nós. E veio o Maracanã, cuja construção todos já conhecem o resultado, para depois ser dado de bandeja pro urubu e pro clube da série C.

Em 1950, após a perda da Copa pro Uruguai, quando Eurico Miranda continuava sendo apenas uma criança, o jornalista Armando Nogueira AFIRMOU que o Brasil só perdeu a Copa pois tinha muitos atletas do Vasco, e que estes eram os grandes culpados pelo "Maracanazzo". Segundo ele, os jogadores vascaínos não eram brasileiros:

"As equipes entram em campo.. Reconheço, um a um, os jogadores brasileiros: Barbosa; Augusto e Juvenal; Bauer, Danilo e Bigode; Friaça, Zizinho, Ademir, Jair e Chico. Aflora, outra vez em mim, a mágoa clubística. Lanço sobre a equipe um olhar de botafoguense ressentido. Vejo, em campo, apenas quatro autênticos brasileiros: Bauer, do São Paulo, Juvenal, da Portuguesa, Bigode, do Fluminense, e Zizinho, do Flamengo. Os outros sete são vascaínos. Velhos e mortais inimigos da pequena porém brava nação botafoguense… Quer saber de uma coisa? É melhor mesmo que ganhe o Uruguai. Eles são gringos, vão todos embora daqui amanhã. Ninguém vai encarnar em mim. (…)"

O Vasco não criou inimigos através das ações de Eurico Miranda. O Vasco criou inimigos quando afrontou a elite da zona sul e se impôs como clube popular. O ranço contra a instituição de origem lusitana, mas alma brasileira, vem desde 1898.

Saudações Vascaínas !

Link para o post
Compartilhar em outros sites
6 horas atrás, rizen disse:

Segue abaixo o party.cpp

 

  Mostrar conteúdo oculto

 

 


////////////////////////////////////////////////////////////////////////
// OpenTibia - an opensource roleplaying game
////////////////////////////////////////////////////////////////////////
// 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 3 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, see <http://www.gnu.org/licenses/>.
////////////////////////////////////////////////////////////////////////
#include "otpch.h"
#include "party.h"

#include "player.h"
#include "chat.h"
#include "game.h"
#include "configmanager.h"

extern Game g_game;
extern Chat g_chat;
extern ConfigManager g_config;

Party::Party(Player* _leader)
{
    sharedExpActive = sharedExpEnabled = false;
    if(_leader)
    {
        leader = _leader;
        leader->setParty(this);
        leader->sendPlayerPartyIcons(leader);
    }
}

void Party::disband()
{
    leader->sendClosePrivate(CHANNEL_PARTY);
    leader->setParty(NULL);
    leader->sendTextMessage(MSG_INFO_DESCR, "Your party has been disbanded.");

    leader->sendPlayerPartyIcons(leader);
    for(PlayerVector::iterator it = inviteList.begin(); it != inviteList.end(); ++it)
    {
        (*it)->removePartyInvitation(this);
        (*it)->sendPlayerPartyIcons(leader);
        (*it)->sendPlayerPartyIcons(*it);
        leader->sendPlayerPartyIcons(*it);
    }

    inviteList.clear();
    for(PlayerVector::iterator it = memberList.begin(); it != memberList.end(); ++it)
    {
        (*it)->sendClosePrivate(CHANNEL_PARTY);
        (*it)->setParty(NULL);
        (*it)->sendTextMessage(MSG_INFO_DESCR, "Your party has been disbanded.");

        (*it)->sendPlayerPartyIcons(*it);
        (*it)->sendPlayerPartyIcons(leader);
        leader->sendPlayerPartyIcons(*it);
    }

    memberList.clear();
    leader = NULL;
    delete this;
}

bool Party::leave(Player* player)
{
    if(!isPlayerMember(player) && player != leader)
        return false;

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

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

    it = std::find(inviteList.begin(), inviteList.end(), player);
    if(it != inviteList.end())
        inviteList.erase(it);

    player->setParty(NULL);
    player->sendClosePrivate(CHANNEL_PARTY);

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

    updateSharedExperience();
    updateIcons(player);
    clearPlayerPoints(player);

    char buffer[105];
    sprintf(buffer, "%s has left the party.", player->getName().c_str());

    broadcastMessage(MSG_INFO_DESCR, buffer);
    if(missingLeader || canDisband())
        disband();

    return true;
}

bool Party::passLeadership(Player* player)
{
    if(!isPlayerMember(player) || player == leader)
        return false;

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

    Player* oldLeader = leader;
    leader = player;
    memberList.insert(memberList.begin(), oldLeader);

    char buffer[125];
    sprintf(buffer, "%s is now the leader of the party.", player->getName().c_str());
    broadcastMessage(MSG_INFO_DESCR, buffer, true);

    player->sendTextMessage(MSG_INFO_DESCR, "You are now the leader of the party.");
    updateSharedExperience();

    updateIcons(oldLeader);
    updateIcons(player);
    return true;
}

bool Party::join(Player* player)
{
    if(isPlayerMember(player) || !isPlayerInvited(player))
        return false;

    memberList.push_back(player);
    player->setParty(this);

    player->removePartyInvitation(this);
    PlayerVector::iterator it = std::find(inviteList.begin(), inviteList.end(), player);
    if(it != inviteList.end())
        inviteList.erase(it);

    char buffer[200];
    sprintf(buffer, "%s has joined the party.", player->getName().c_str());
    broadcastMessage(MSG_INFO_DESCR, buffer);

    sprintf(buffer, "You have joined %s'%s party. Open the party channel to communicate with your companions.", leader->getName().c_str(), (leader->getName()[leader->getName().length() - 1] == 's' ? "" : "s"));
    player->sendTextMessage(MSG_INFO_DESCR, buffer);

    updateSharedExperience();
    updateIcons(player);
    return true;
}

bool Party::removeInvite(Player* player)
{
    if(!isPlayerInvited(player))
        return false;

    PlayerVector::iterator it = std::find(inviteList.begin(), inviteList.end(), player);
    if(it != inviteList.end())
        inviteList.erase(it);

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

    player->removePartyInvitation(this);
    if(canDisband())
        disband();

    return true;
}

void Party::revokeInvitation(Player* player)
{
    if(!player || player->isRemoved())
        return;

    char buffer[150];
    sprintf(buffer, "%s has revoked %s invitation.", leader->getName().c_str(), (leader->getSex(false) ? "his" : "her"));
    player->sendTextMessage(MSG_INFO_DESCR, buffer);

    sprintf(buffer, "Invitation for %s has been revoked.", player->getName().c_str());
    leader->sendTextMessage(MSG_INFO_DESCR, buffer);
    removeInvite(player);
}

bool Party::invitePlayer(Player* player)
{
    if(isPlayerInvited(player, true))
        return false;

    inviteList.push_back(player);
    player->addPartyInvitation(this);

    char buffer[150];
    sprintf(buffer, "%s has been invited.%s", player->getName().c_str(), (!memberList.size() ? " Open the party channel to communicate with your members." : ""));
    leader->sendTextMessage(MSG_INFO_DESCR, buffer);

    sprintf(buffer, "%s has invited you to %s party.", leader->getName().c_str(), (leader->getSex(false) ? "his" : "her"));
    player->sendTextMessage(MSG_INFO_DESCR, buffer);

    leader->sendPlayerPartyIcons(player);
    player->sendPlayerPartyIcons(leader);
    return true;
}

void Party::updateIcons(Player* player)
{
    if(!player || player->isRemoved())
        return;

    PlayerVector::iterator it;
    for(it = memberList.begin(); it != memberList.end(); ++it)
    {
        (*it)->sendPlayerPartyIcons(player);
        player->sendPlayerPartyIcons((*it));
    }

    for(it = inviteList.begin(); it != inviteList.end(); ++it)
    {
        (*it)->sendPlayerPartyIcons(player);
        player->sendPlayerPartyIcons((*it));
    }

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

void Party::updateAllIcons()
{
    PlayerVector::iterator it;
    for(it = memberList.begin(); it != memberList.end(); ++it)
    {
        for(PlayerVector::iterator iit = memberList.begin(); iit != memberList.end(); ++iit)
            (*it)->sendPlayerPartyIcons((*iit));

        (*it)->sendPlayerPartyIcons(leader);
        leader->sendPlayerPartyIcons((*it));
    }

    leader->sendPlayerPartyIcons(leader);
    for(it = inviteList.begin(); it != inviteList.end(); ++it)
        (*it)->sendPlayerPartyIcons(leader);
}

void Party::broadcastMessage(MessageClasses messageClass, const std::string& text, bool sendToInvitations/* = false*/)
{
    PlayerVector::iterator it;
    if(!memberList.empty())
    {
        for(it = memberList.begin(); it != memberList.end(); ++it)
            (*it)->sendTextMessage(messageClass, text);
    }

    leader->sendTextMessage(messageClass, text);
    if(!sendToInvitations || inviteList.empty())
        return;

    for(it = inviteList.begin(); it != inviteList.end(); ++it)
        (*it)->sendTextMessage(messageClass, text);
}

void Party::updateSharedExperience()
{
    if(!sharedExpActive)
        return;

    bool result = canEnableSharedExperience();
    if(result == sharedExpEnabled)
        return;

    sharedExpEnabled = result;
    updateAllIcons();
}

bool Party::setSharedExperience(Player* player, bool _sharedExpActive)
{
    if(!player || player->isRemoved() || player != leader)
        return false;

    if(sharedExpActive == _sharedExpActive)
        return true;

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

    updateAllIcons();
    return true;
}

void Party::shareExperience(double experience, bool fromMonster, bool multiplied)
{
    double shareExperience = (experience / (double)(memberList.size() + 1));
    if(experience > (double)g_config.getNumber(ConfigManager::EXTRA_PARTY_LIMIT))
        shareExperience += (experience * (double)(g_config.getNumber(ConfigManager::EXTRA_PARTY_PERCENT) / 100));

    double tmpExperience = shareExperience;
    leader->onGainSharedExperience(tmpExperience, fromMonster, multiplied);
    for(PlayerVector::iterator it = memberList.begin(); it != memberList.end(); ++it)
    {
        tmpExperience = shareExperience;
        (*it)->onGainSharedExperience(tmpExperience, fromMonster, multiplied);
    }
}

bool Party::canUseSharedExperience(const Player* player, uint32_t highestLevel/* = 0*/) const
{
    if(!player || player->isRemoved())
        return false;

    if(!highestLevel)
    {
        highestLevel = leader->getLevel();
        for(PlayerVector::const_iterator it = memberList.begin(); it != memberList.end(); ++it)
        {
            if((*it)->getLevel() > highestLevel)
                highestLevel = (*it)->getLevel();
        }
    }

    if(player->getLevel() < (uint32_t)std::ceil((double)highestLevel * g_config.getDouble(
        ConfigManager::PARTY_DIFFERENCE)) || !Position::areInRange(Position(
        g_config.getNumber(ConfigManager::PARTY_RADIUS_X), g_config.getNumber(
        ConfigManager::PARTY_RADIUS_Y), g_config.getNumber(ConfigManager::PARTY_RADIUS_Z)),
        leader->getPosition(), player->getPosition()))
        return false;

    CountMap::const_iterator it = pointMap.find(player->getID());
    return it != pointMap.end() && (OTSYS_TIME() - it->second.ticks) <= g_config.getNumber(
        ConfigManager::EXPERIENCE_SHARE_ACTIVITY);
}

bool Party::canEnableSharedExperience()
{
    if(!memberList.size())
        return false;

    uint32_t highestLevel = leader->getLevel();
    for(PlayerVector::iterator it = memberList.begin(); it != memberList.end(); ++it)
    {
        if((*it)->getLevel() > highestLevel)
            highestLevel = (*it)->getLevel();
    }

    for(PlayerVector::iterator it = memberList.begin(); it != memberList.end(); ++it)
    {
        if(!canUseSharedExperience((*it), highestLevel))
            return false;
    }

    return canUseSharedExperience(leader, highestLevel);
}

void Party::addPlayerHealedMember(Player* player, uint32_t points)
{
    if(points <= 0)
        return;

    CountMap::iterator it = pointMap.find(player->getID());
    if(it != pointMap.end())
    {
        it->second.totalHeal += points;
        it->second.ticks = OTSYS_TIME();
    }
    else
        pointMap[player->getID()] = CountBlock_t(points, 0);

    updateSharedExperience();
}

void Party::addPlayerDamageMonster(Player* player, uint32_t points)
{
    if(points <= 0)
        return;

    CountMap::iterator it = pointMap.find(player->getID());
    if(it != pointMap.end())
    {
        it->second.totalDamage += points;
        it->second.ticks = OTSYS_TIME();
    }
    else
        pointMap[player->getID()] = CountBlock_t(0, points);

    updateSharedExperience();
}

void Party::clearPlayerPoints(Player* player)
{
    CountMap::iterator it = pointMap.find(player->getID());
    if(it == pointMap.end())
        return;

    pointMap.erase(it);
    updateSharedExperience();
}

bool Party::isPlayerMember(const Player* player, bool result/* = false*/) const
{
    if(!player || player->isRemoved())
        return result;

    return std::find(memberList.begin(), memberList.end(), player) != memberList.end();
}

bool Party::isPlayerInvited(const Player* player, bool result/* = false*/) const
{
    if(!player || player->isRemoved())
        return result;

    return std::find(inviteList.begin(), inviteList.end(), player) != inviteList.end();
}

bool Party::canOpenCorpse(uint32_t ownerId)
{
    return leader->getID() == ownerId || isPlayerMember(g_game.getPlayerByID(ownerId));
}
 
 

 

 


Troca essa linha:
 

double shareExperience = (experience / (double)(memberList.size() + 1));

 

por

 

double shareExperience = experience;

 

E apaga essas duas linhas que estão abaixo:

 

    if(experience > (double)g_config.getNumber(ConfigManager::EXTRA_PARTY_LIMIT))
        shareExperience += (experience * (double)(g_config.getNumber(ConfigManager::EXTRA_PARTY_PERCENT) / 100)); 


Compila de novo e vê se dá certo

 

Att,
Grafit.

Link para o post
Compartilhar em outros sites

Vou testar e ja falo.

4 horas atrás, grafit disse:


Troca essa linha:
 


double shareExperience = (experience / (double)(memberList.size() + 1));

 

por

 


double shareExperience = experience;

 

E apaga essas duas linhas que estão abaixo:

 


    if(experience > (double)g_config.getNumber(ConfigManager::EXTRA_PARTY_LIMIT))
        shareExperience += (experience * (double)(g_config.getNumber(ConfigManager::EXTRA_PARTY_PERCENT) / 100)); 


Compila de novo e vê se dá certo

 

 

EDIT: Funcionou perfeitamente, REP+

Editado por rizen (veja o histórico de edições)

No final da década de 20, quando Eurico Miranda ainda nem era nascido, fomos proibidos de disputar o Estadual por aceitarmos atletas negros e operários. Depois a desculpa era por não termos estádio. E demos a resposta construindo um.

Na década de 40, quando Eurico era apenas uma criança, o jornalista mulambo Ary Barroso (na época, o principal jornalista esportivo do Rio) já era proibido de entrar em São Januário por só falar mal do Vasco. 

No final desta mesma década, quando São Januário seria reformado com verba pública para receber a Copa do Mundo (nada mais lógico, pois em troca iriamos ceder o nosso estádio), a mídia marrom arrotou sua pseudo-ética pública contra nós. E veio o Maracanã, cuja construção todos já conhecem o resultado, para depois ser dado de bandeja pro urubu e pro clube da série C.

Em 1950, após a perda da Copa pro Uruguai, quando Eurico Miranda continuava sendo apenas uma criança, o jornalista Armando Nogueira AFIRMOU que o Brasil só perdeu a Copa pois tinha muitos atletas do Vasco, e que estes eram os grandes culpados pelo "Maracanazzo". Segundo ele, os jogadores vascaínos não eram brasileiros:

"As equipes entram em campo.. Reconheço, um a um, os jogadores brasileiros: Barbosa; Augusto e Juvenal; Bauer, Danilo e Bigode; Friaça, Zizinho, Ademir, Jair e Chico. Aflora, outra vez em mim, a mágoa clubística. Lanço sobre a equipe um olhar de botafoguense ressentido. Vejo, em campo, apenas quatro autênticos brasileiros: Bauer, do São Paulo, Juvenal, da Portuguesa, Bigode, do Fluminense, e Zizinho, do Flamengo. Os outros sete são vascaínos. Velhos e mortais inimigos da pequena porém brava nação botafoguense… Quer saber de uma coisa? É melhor mesmo que ganhe o Uruguai. Eles são gringos, vão todos embora daqui amanhã. Ninguém vai encarnar em mim. (…)"

O Vasco não criou inimigos através das ações de Eurico Miranda. O Vasco criou inimigos quando afrontou a elite da zona sul e se impôs como clube popular. O ranço contra a instituição de origem lusitana, mas alma brasileira, vem desde 1898.

Saudações Vascaínas !

Link para o post
Compartilhar em outros sites

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 LeoTK
      Salve galera neste tópico irei postar algumas prints do mapa do servidor para quem queira acompanhar e quem sabe até utilizar de inspiração para mapear o seu NTO.
       
      #Att 11/08/2022

       
       
       
       
      Konoha (Em Desenvolvimento)
       
       
       
       
    • Por DiigooMix
      Como o título já diz, será que alguém possui sprite do hitto e se possível as transformações dele?
    • Por OmegaZero
      Olá gostaria que alguém me ajudasse com uma "scripting" não sei se é pela mesma, seria o seguinte uma determinada arma teria a chance de dar double hit e não sei oque fazer alguem poderia ajudar?

      OBS:não sei se é o local correto se não for mova, desculpe
    • Por Madarasenju
      Olá galera do Tibia King, queria por uns npc's no meu server que não tem função de trade nem nada do tipo, queria que eles só andassem como enfeite, Rep+ Pra quem me ajudar... grato desde já.
    • Por SilenceRoot
      A magia é assim o você usa a a magia e ela ficará ativado por 10 segundos, até que o inimigo lance a primeira magia ou todos de uma vez, quando ele lançar a primeira magia, ele não lhe acertará ou seja esquivando dela, e logo em seguida será teletransportado aleatoriamente ao redor do inimigo que usou.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo