• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua BUG SHARED EXP TFS 1.0

kaiquefb

New Member
Joined
Feb 18, 2010
Messages
62
Reaction score
0
Hello,

I have a bug, I think everyone TFS 1.0 has this error.
Works as follows. I have 3 or more character invito all in party with SHARED EXP. and I follow each other, put 2 character just giving healing spells, (exura or exura ico). and only 1 char I kill monsters. 2 character who are not attacking will gain FULL XP, and will not spend stamina. (Always estaram with full stamina) Would any solution for this because I'm trying to solve a while and I can not.

Please if anyone has any solution help me, share with everyone :)

Thank you.
 
@Edit

Friend, I worked gave a series of errors, I believe my source are different.

My source
Code:
void Player::gainExperience(uint64_t gainExp)
{
    if (!hasFlag(PlayerFlag_NotGainExperience) && gainExp > 0) {
        if (staminaMinutes == 0) {
            return;
        }

        uint64_t oldExperience = experience;

        addExperience(gainExp * g_game.getExperienceStage(level), true, true);

        //soul regeneration
        int64_t gainedExperience = experience - oldExperience;
        if (gainedExperience >= level) {
            Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SOUL, 4 * 60 * 1000, 0);
            condition->setParam(CONDITION_PARAM_SOULGAIN, 1);
            condition->setParam(CONDITION_PARAM_SOULTICKS, vocation->getSoulGainTicks() * 1000);
            addCondition(condition);
        }
    }
}

void Player::onGainExperience(uint64_t gainExp, Creature* target)
{
    if (hasFlag(PlayerFlag_NotGainExperience)) {
        return;
    }

    if (target) {
        if (gainExp > 0 && target->getMonster()) {
            useStamina();
        }

        if (!target->getPlayer() && party && party->isSharedExperienceActive() && party->isSharedExperienceEnabled()) {
            party->shareExperience(gainExp);
            //We will get a share of the experience through the sharing mechanism
            return;
        }
    }

    Creature::onGainExperience(gainExp, target);
    gainExperience(gainExp);
}

void Player::onGainSharedExperience(uint64_t gainExp)
{
    gainExperience(gainExp);
}

Source Link
Code:
void Player::gainExperience(uint64_t gainExp, Creature* source)
{
    if (hasFlag(PlayerFlag_NotGainExperience) || gainExp == 0 || staminaMinutes == 0) {
        return;
    }

    if (source && !source->getPlayer()) {
        useStamina();
    }

    uint64_t oldExperience = experience;
    addExperience(source, gainExp, true, true, true);

    //soul regeneration
    // TODO: move to Lua script (onGainExperience event)
    int64_t gainedExperience = experience - oldExperience;
    if (gainedExperience >= level) {
        Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_SOUL, 4 * 60 * 1000, 0);
        condition->setParam(CONDITION_PARAM_SOULGAIN, 1);
        condition->setParam(CONDITION_PARAM_SOULTICKS, vocation->getSoulGainTicks() * 1000);
        addCondition(condition);
    }
}

void Player::onGainExperience(uint64_t gainExp, Creature* target)
{
    if (hasFlag(PlayerFlag_NotGainExperience)) {
        return;
    }

    if (target && !target->getPlayer() && party && party->isSharedExperienceActive() && party->isSharedExperienceEnabled()) {
        party->shareExperience(gainExp, target);
        //We will get a share of the experience through the sharing mechanism
        return;
    }

    Creature::onGainExperience(gainExp, target);
    gainExperience(gainExp, target);
}

void Player::onGainSharedExperience(uint64_t gainExp, Creature* source)
{
    gainExperience(gainExp, source);
}

I tried to replace the various methods did not work, below the bugs I found in every attempt to compile.
1 attempt
Code:
[ 60%] Building CXX object CMakeFiles/tfs.dir/src/otserv.cpp.o
[ 62%] Building CXX object CMakeFiles/tfs.dir/src/outfit.cpp.o
[ 63%] Building CXX object CMakeFiles/tfs.dir/src/outputmessage.cpp.o
[ 64%] Building CXX object CMakeFiles/tfs.dir/src/party.cpp.o
[ 66%] Building CXX object CMakeFiles/tfs.dir/src/player.cpp.o
/globalfjc/source/src/player.cpp: In member function âvoid Player::gainExperience(uint64_t)â:
/globalfjc/source/src/player.cpp:3955:6: error: âsourceâ was not declared in this scope
/globalfjc/source/src/player.cpp: In member function âvirtual void Player::onGainExperience(uint64_t, Creature*)â:
/globalfjc/source/src/player.cpp:3981:41: error: no matching function for call to âParty::shareExperience(uint64_t&, Creature*&)â
/globalfjc/source/src/player.cpp:3981:41: note: candidate is:
In file included from /globalfjc/source/src/player.h:31:0,
                 from /globalfjc/source/src/game.h:31,
                 from /globalfjc/source/src/player.cpp:27:
/globalfjc/source/src/party.h:74:8: note: void Party::shareExperience(uint64_t)
/globalfjc/source/src/party.h:74:8: note:   candidate expects 1 argument, 2 provided
make[2]: *** [CMakeFiles/tfs.dir/src/player.cpp.o] Error 1
make[1]: *** [CMakeFiles/tfs.dir/all] Error 2
make: *** [all] Error 2

2 attempt
Code:
[ 60%] Building CXX object CMakeFiles/tfs.dir/src/otserv.cpp.o
[ 62%] Building CXX object CMakeFiles/tfs.dir/src/outfit.cpp.o
[ 63%] Building CXX object CMakeFiles/tfs.dir/src/outputmessage.cpp.o
[ 64%] Building CXX object CMakeFiles/tfs.dir/src/party.cpp.o
[ 66%] Building CXX object CMakeFiles/tfs.dir/src/player.cpp.o
/globalfjc/source/src/player.cpp:3948:6: error: prototype for âvoid Player::gainExperience(uint64_t, Creature*)â does not match any in class âPlayerâ
In file included from /globalfjc/source/src/game.h:31:0,
                 from /globalfjc/source/src/player.cpp:27:
/globalfjc/source/src/player.h:1437:7: error: candidate is: void Player::gainExperience(uint64_t)
/globalfjc/source/src/player.cpp: In member function âvirtual void Player::onGainExperience(uint64_t, Creature*)â:
/globalfjc/source/src/player.cpp:3979:41: error: no matching function for call to âParty::shareExperience(uint64_t&, Creature*&)â
/globalfjc/source/src/player.cpp:3979:41: note: candidate is:
In file included from /globalfjc/source/src/player.h:31:0,
                 from /globalfjc/source/src/game.h:31,
                 from /globalfjc/source/src/player.cpp:27:
/globalfjc/source/src/party.h:74:8: note: void Party::shareExperience(uint64_t)
/globalfjc/source/src/party.h:74:8: note:   candidate expects 1 argument, 2 provided
/globalfjc/source/src/player.cpp:3985:32: error: no matching function for call to âPlayer::gainExperience(uint64_t&, Creature*&)â
/globalfjc/source/src/player.cpp:3985:32: note: candidate is:
In file included from /globalfjc/source/src/game.h:31:0,
                 from /globalfjc/source/src/player.cpp:27:
/globalfjc/source/src/player.h:1437:7: note: void Player::gainExperience(uint64_t)
/globalfjc/source/src/player.h:1437:7: note:   candidate expects 1 argument, 2 provided
/globalfjc/source/src/player.cpp: At global scope:
/globalfjc/source/src/player.cpp:3988:6: error: prototype for âvoid Player::onGainSharedExperience(uint64_t, Creature*)â does not match any in class âPlayerâ
In file included from /globalfjc/source/src/game.h:31:0,
                 from /globalfjc/source/src/player.cpp:27:
/globalfjc/source/src/player.h:790:7: error: candidate is: void Player::onGainSharedExperience(uint64_t)
make[2]: *** [CMakeFiles/tfs.dir/src/player.cpp.o] Error 1
make[1]: *** [CMakeFiles/tfs.dir/all] Error 2
make: *** [all] Error 2

3 attempt
Code:
[ 60%] Building CXX object CMakeFiles/tfs.dir/src/otserv.cpp.o
[ 62%] Building CXX object CMakeFiles/tfs.dir/src/outfit.cpp.o
[ 63%] Building CXX object CMakeFiles/tfs.dir/src/outputmessage.cpp.o
[ 64%] Building CXX object CMakeFiles/tfs.dir/src/party.cpp.o
[ 66%] Building CXX object CMakeFiles/tfs.dir/src/player.cpp.o
/globalfjc/source/src/player.cpp:22:17: fatal error: bed.h: No such file or directory
compilation terminated.
make[2]: *** [CMakeFiles/tfs.dir/src/player.cpp.o] Error 1
make[1]: *** [CMakeFiles/tfs.dir/all] Error 2
make: *** [all] Error 2

In the latest attempt, replace the entire player.cpp file.
 
Last edited:
Back
Top