Ir para conteúdo

Nova Função Lua!


Fusion32

Posts Recomendados

Primeiro gostaria de falar que apesar de o codigo não ser meu e sim do Umby porém eu o aperfeiçoei e qualquer duvida eu poderei responder

 

Creditos:

Umby - 95%

Eu - 5%

 

vamos ao que entereça!

 

em player.cpp abaixo de

 

MessageBufferCount = 0;

 

adicione

 

expRate = 0;

 

então procure por isso

 

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

 

e modifique por

 

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

 

e no final de players.cpp adicione

 

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

 

agora em player.h abaxo de

 

void removeMessageBuffer();

 

adicione

 

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

 

agora depois de

 

int32_t MessageBufferCount;

 

adicione

 

uint32_t expRate;

 

agora em creature.cpp procure na função

 

int32_t Creature::getGainedExperience

 

troque

 

return (int32_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE));

 

por

 

return attacker->getPlayer() ? (int32_t)std::floor(getDamageRatio(attacker) * lostExperience * (g_config.getNumber(ConfigManager::RATE_EXPERIENCE) + attacker->getPlayer()->getExpRate())) : (int32_t)std::floor(getDamageRatio(attacker) * lostExperience * g_config.getNumber(ConfigManager::RATE_EXPERIENCE));

 

agora em luascript.cpp emcima de

 

	//getPlayerFood(cid)
lua_register(m_luaState, "getPlayerFood", LuaScriptInterface::luaGetPlayerFood);

 

adicione

 

//setPlayerExpRate(cid, rate) 
lua_register(m_luaState, "setPlayerExpRate", LuaScriptInterface::luaSetPlayerExpRate);

 

no final do arquivo adicione

 

int 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;
}

 

e em luascript.h

 

antes de

 

static int luaGetPlayerFood(lua_State *L);

 

adicione

 

static int luaSetPlayerExpRate(lua_State* L);

 

agora como ele funciona

 

em "data/movements/scripts" adicione o arquivo booster.lua e ponha o seguinte nele

 

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

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

 

agora em "data/movements" ponha no arquivo movements.xml o seguinte

 

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

 

agora o ID 2179 é o gold ring e quando um player poe ele um rato de 50 de exp(10x) passaria a ser de 55 de exp(11x)

 

agora as diferenças entre a minha versão da função e da do umby

 

a do Umby a funçao era vezes(*) portanto o exemplo seria o seguinte

 

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

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

 

e passaria de 50 de exp(10x) para 200(40x) de exp enquanto o meu ele adiciona como no exemplo ja demonstrado

 

SS:

sem o anel

semanelyf1.jpg

com o anel

comaneljx7.jpg

 

qualquer duvida postem aqui que eu ajudarei o mais rapido possivel e reportem bugs pois posso por acaso ter esquecido de alguma parte do codigo

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

×
×
  • Criar Novo...