• 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!

C++ [0.4] doAbsorbCombatPercentage and getCombatPercentageAbsorbed

elnelson

Lunaria World Dev
Joined
Jun 20, 2009
Messages
580
Solutions
2
Reaction score
58
Location
México
Hello, otlanders. i found a code patch for tfs 0.4 but when i try to compile it i got this error lines:
Lua:
  In member function 'virtual void LuaInterface::registerFunctions()':
1709 D:\OTS\trunk.3777.r12\sources\luascript.cpp 'luaDoAbsorbCombatPercentage' is not a member of 'LuaInterface'
1709 D:\OTS\trunk.3777.r12\sources\luascript.cpp At global scope:
4943 D:\OTS\trunk.3777.r12\sources\luascript.cpp expected initializer before 'int32_t'
4943 D:\OTS\trunk.3777.r12\sources\luascript.cpp *** [obj//luascript.o] Error 1

these are the instructions:
player.cpp, after :
Lua:
 editListId = maxWriteLen = windowTextId = rankId = 0;
paste this
Lua:
firePercent = energyPercent = earthPercent = icePercent = holyPercent = eathPercent = physicalPercent = lifeDrainPercent = manaDrainPercent = drownPercent = 0;
At the bottom of player.cpp paste:
Lua:
void Player::setAbsorbedPercent(const CombatType_t combatType, int32_t percent)
{
if(percent < 0)
   percent = 0;

if(percent > 100)
   percent = 100;

switch((CombatType_t)combatType)
{
   case COMBAT_FIREDAMAGE:
       firePercent = percent;
       break;
   case COMBAT_ENERGYDAMAGE:
       energyPercent = percent;
       break;
   case COMBAT_EARTHDAMAGE:
       earthPercent = percent;
       break;
   case COMBAT_ICEDAMAGE:
       icePercent = percent;
       break;
   case COMBAT_HOLYDAMAGE:
       holyPercent = percent;
       break;
   case COMBAT_DEATHDAMAGE:
       deathPercent = percent;
       break;
   case COMBAT_PHYSICALDAMAGE:
       physicalPercent = percent;
       break;
   case COMBAT_LIFEDRAIN:
       lifeDrainPercent = percent;
       break;
   case COMBAT_MANADRAIN:
       manaDrainPercent = percent;
       break;
   case COMBAT_DROWNDAMAGE:
       drownPercent = percent;
       break;
   default:
       break;
      }
}
at player.h after
Lua:
void setSex(uint16_t);
paste
Lua:
int32_t getAbsorbedPercent(CombatType_t combatType) const
   {
               switch(combatType)
               {
                  case COMBAT_FIREDAMAGE:
           return firePercent;

                  case COMBAT_ENERGYDAMAGE:
           return energyPercent;

                  case COMBAT_EARTHDAMAGE:
           return earthPercent;

                  case COMBAT_ICEDAMAGE:
           return icePercent;

                  case COMBAT_HOLYDAMAGE:
           return holyPercent;

                  case COMBAT_DEATHDAMAGE:
           return deathPercent;

       case COMBAT_PHYSICALDAMAGE:
           return physicalPercent;

       case COMBAT_LIFEDRAIN:
           return lifeDrainPercent;

       case COMBAT_MANADRAIN:
           return manaDrainPercent;

       case COMBAT_DROWNDAMAGE:
           return drownPercent;

       default:
           break;
              }
              return 0;
   }
   void setAbsorbedPercent(const CombatType_t combatType, int32_t percent);
After:
Lua:
 int32_t shootRange;
paste
Lua:
int32_t firePercent;
   int32_t energyPercent;
   int32_t earthPercent;
   int32_t icePercent;
   int32_t holyPercent;
   int32_t deathPercent;
   int32_t physicalPercent;
   int32_t lifeDrainPercent;
   int32_t manaDrainPercent;
   int32_t drownPercent;

in game.cpp, after:
Lua:
damage = std::min(target->getHealth(), damage);
paste:
Lua:
Player* player = target->getPlayer();
       int32_t percent, total;
       if(player)
       {
           percent = player->getAbsorbedPercent(combatType);
           total = damage * percent / (int32_t)100;
       }

       if(total > 0)
           damage -= total;
THIS IS WHERE MY DOUBT START: I HAVE LUAINTERFACE on my srcs INSTEAD OF LUASCRIPTINFERFACE,
btw, tried to modify to fit like others but i failed too...
in luascript.cpp after:
Lua:
 lua_register(m_luaState, "doPlayerRemoveMoney", LuaScriptInterface::luaDoPlayerRemoveMoney);
paste:
Lua:
//doAbsorbCombatPercentage(cid, combat, percent)
lua_register(m_luaState, "doAbsorbCombatPercentage", LuaScriptInterface::luaDoAbsorbCombatPercentage);

//getCombatPercentageAbsorbed(cid, combat)
lua_register(m_luaState, "getCombatPercentageAbsorbed", LuaScriptInterface::luaGetCombatPercentageAbsorbed);
after
Lua:
 int32_t LuaScriptInterface::luaDoPlayerRemoveMoney(lua_State* L)
paste
Lua:
int32_t LuaScriptInterface::luaDoAbsorbCombatPercentage(lua_State *L)
{               
   ScriptEnviroment* env = getEnv();
   int32_t percent = popNumber(L);
   CombatType_t combat = (CombatType_t)popNumber(L);
     if(!combat)
     {
       errorEx(getError(LUA_ERROR_COMBAT_NOT_FOUND));
       lua_pushboolean(L, false);
       return 1;
     }

     Player* player = env->getPlayerByUID(popNumber(L));
     if(player)
     {   
       player->setAbsorbedPercent(combat, percent);
          lua_pushnumber(L, true);
     }
     else
     {       
         errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
         lua_pushnumber(L, false);
     }       
   return 1;
}

int32_t LuaScriptInterface::luaGetCombatPercentageAbsorbed(lua_State *L)
{                 
   ScriptEnviroment* env = getEnv();
   CombatType_t combat = (CombatType_t)popNumber(L);
     if(!combat)
     {
       errorEx(getError(LUA_ERROR_COMBAT_NOT_FOUND));
       lua_pushboolean(L, false);
       return 1;
     }
     if(Player* player = env->getPlayerByUID(popNumber(L)))
     {   
          lua_pushnumber(L, player->getAbsorbedPercent(combat));
     }   
     else
     {       
         errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
         lua_pushnumber(L, false);
     }       
   return 1;
}
in luascript.h, after
Lua:
static int32_t luaDoPlayerRemoveMoney(lua_State* L);
paste
Lua:
static int32_t luaDoCombatAbsorbPercentage(lua_State* L);
   static int32_t luaGetCombatPercentageAbsorbed(lua_State* L);

im using TFS 0.4 r12 trunk 3777, hope somene could help me to use these functions i really need them.
 
If you have LUAINTERFACE instead of LUASCRIPTINFERFACE then make the code you put in your sources reflect what you have.
So this
Code:
LuaScriptInterface
become this
Code:
LuaInterface
 
If you have LUAINTERFACE instead of LUASCRIPTINFERFACE then make the code you put in your sources reflect what you have.
So this
Code:
LuaScriptInterface
become this
Code:
LuaInterface
Yeah i have done that, i changed as you said and i got that error i posted.
 
Back
Top