Ir para conteúdo

[tfs] Setplayerexprate(cid, Rate) [8.2+]


zimbituba

Posts Recomendados

setPlayerExpRate(cid, rate)



 

Olá pessoal esse é meu primeiro tópico como Coloborador XTibia, este código não foi criado por mim, mas eu fiz uma modificação para que ele funcionasse para o TFS, a partir de semana que vem vou trazer codes meus, e modificações em codes feitas por mim, estou trazendo este code por que acho legal =D.

 

Ele tem a função de adicionar um Extra Exp ao player que estiver usando algum item é quase igual ao amuleto da experiencia, mas tem umas melhoriase o item é configurado pelos movements.xml . Então agora vamos ao que interessa.

 

Em player.cpp acima de:

 

idleTime = 0;

 

Adicione o seguinte:

 

expRate = 1;

 

Procure por isto:

 

return (result * g_config.getNumber(ConfigManager::RATE_EXPERIENCE) );

 

 

E substitua por isto aqui:

 

return ((result * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)) * expRate);

 

Ao final de player.cpp adicione isto:

 

void Player::changePlayerExpRate(uint32_t rate)
{
expRate = rate;
}

 

 

Em Player.h acima de:

 

void resetIdleTime() {idleTime = 0;}

 

Adicione isto:

 

uint32_t getExpRate() const {return expRate;}
void changePlayerExpRate(uint32_t rate);

 

Acima disto:

 

int32_t idleTime;

 

Adicione isto:

 

uint32_t expRate;

 

Em creature.cpp procure isto:

 

return attacker->getPlayer() ? ((uint64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_game.getExperienceStage(attacker->getPlayer()->getLevel()))) : ((uint64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE) ));

 

E substitua por isto:

 

return attacker->getPlayer() ? (((uint64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_game.getExperienceStage(attacker->getPlayer()->getLevel()))) * attacker->getPlayer()->getExpRate()) : ((uint64_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE)));

 

Em luascript.cpp acima de:

 

lua_register(m_luaState, "escapeString", LuaScriptInterface::luaEscapeString);

 

E adicione isto:

 

lua_register(m_luaState, "setPlayerExpRate", LuaScriptInterface::luaSetPlayerExpRate);

 

 

E no final de luascript.cpp adicione isto:

 

int32_t LuaScriptInterface::luaSetPlayerExpRate(lua_State* L)
{	
uint32_t rate = popNumber(L);					
uint32_t cid = popNumber(L);				
ScriptEnviroment* env = getScriptEnv();		
Player* player = env->getPlayerByUID(cid);		   

   if(player){	
		player->changePlayerExpRate(rate);
		lua_pushnumber(L, LUA_ERROR);
   }	
   else{	   
	   reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_FOUND));
	   lua_pushnumber(L, LUA_ERROR);
   }	   
return 1;
}

 

Em luascript.h acima de:

 

static int32_t luaEscapeString(lua_State* L);

 

 

Adicione isto:

 

static int32_t luaSetPlayerExpRate(lua_State* L);

 

Como usar?

 

Simples.... só usar o script abaixo =D

 

Vá em data/movements/scripts/ e crie um arquivo com o nome de extraExp.lua e adicione isto dentro:

 

 

function onEquip(cid, item)
	setPlayerExpRate(cid, 4)
end

function onDeEquip(cid, item)
	setPlayerExpRate(cid, 1)
end

 

 

Agora em movements.xml adicione isto:

 

	<movevent event="Equip" itemid="2179" slot="ring" function="onEquipItem" script="extraExp.lua.lua"/>
<movevent event="DeEquip" itemid="2179" slot="ring" function="onDeEquipItem" script="extraExp.lua"/>

 

 

Como funciona?

 

Simpres....se a rate do server for 35 se o player tiver usando o item que da extra exp vai ficar assim 35 * 4 = 140 de exp =D

 

Bom uso..

E até a próxima

Editado por Shynzo
Link para o comentário
Compartilhar em outros sites

Nostradamus

Eu não falei que era meu.... mas fiz modificações simples na parte do lusscript.cpp, eu tinha tentado por o codigo do caramas dava erro ai eu vi que u TFS nesta paste por exemplo:

 

int32_t LuaScriptInterface::luaSetPlayerExpRate(lua_State* L)

 

no original era assim

 

int LuaScriptInterface::luaSetPlayerExpRate(lua_State *L)

 

ai creio que isto e mais umas partes estavam dando erro ao compilar, ai troquei isto e funcionou perfeitamente =D

Simples... porém ultil

 

 

Aos demais obrigado pelos comentários =D

Editado por Shynzo
Link para o comentário
Compartilhar em outros sites

Não encontrei no meu TFS 0.3 :~

 

 

Sabes me dizer qual revisão do TFS v3? por que o code foir modificado para a v0.2, mas se você sourber qual revisão do TFS v0.3 eu posso adaptar aqui para o v0.3 também postar aqui memso no tópico

 

É que as funçoes de declaração são diferentes =D

Editado por Shynzo
Link para o comentário
Compartilhar em outros sites

TU EH DOS MEUS!

 

Continue assim!

 

Posso postar como ajustar /clean do tfs e colocar seus devidos creditos???

 

Abração veio!

kkkkk logo o meu secret :o

kkkkkkkkk

pode sim cara =D

se bem que agora o que eu tenho aki ja ta 9999999x melhor do que aquele :o

até mais +D

Link para o comentário
Compartilhar em outros sites

  • 1 year later...

Olá Xtibianos,

 

Antes de mais nada, os dados do meu server.

VERSÃO: EVOLUTIONS 0.7.8 XML

PROTOCOLO: 7.92

 

 

Há alguns dias precisei inserir a função: Setplayerexprate em minha source. Não encontrei nenhum tutorial que fosse compatível com minha versão. Daí criei o seguinte código:

 

/*
       Modificado em 26/09/2010 por Wesley
       Se o player estiver com o anel com ID 13859
       a sua experiencia é multiplicada por dois
       */
       int32_t multiplica = 1;
       Player* attackPlayer = attacker->getPlayer();

       Item* item = NULL;
       if(attackPlayer->inventory[sLOT_RING]){
               item = attackPlayer->inventory[sLOT_RING];
               int idDoItem = item->getID();
               if(item && item->getSlotPosition() << SLOT_RING && idDoItem == 13859){
                       multiplica = 2;
               }
       }


       /***** FIM *****/

 

 

 

O sistema "funcionou", duplicou a EXP quando usando o item. Porém, em alguns lugares, se usar o ring ele derruba o serv. Exemplo Frost Dragon em sqm de gelo.

Será que alguem teria uma solução para meu problema ?

 

Desde já, grato pelo tempo destinado a leitura deste pedido.

Editado por FallenSpiritRPG
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...