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

zimbituba
em Linguagens de Programação

zimbituba

Crystal Server Founder
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 19/01/08Posts: 704Char no Tibia: Atera Knight

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

If you would like to thank me for my Crystal Server and others, feel free to donate.
Paypal: shynzomapper@hotmail.com

BillyBola

Ex-Imprensa XTibia
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 08/06/08Posts: 676Char no Tibia: Kimera De Pegasus

Caramba nunca tinha visto isso.

 

E bom pra colocar o item numa quest foda ou para vips.

 

Muito bom.

 

Gostei.

tibiaa4e

Ex amante de Tibia
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 18/12/05Posts: 912Gênero: MasculinoChar no Tibia: Kohzete

Legal bom ver codes em c++ aqui

 

Ja que infelizmente a maioria dos scripters eh fechado

 

Eu tava aprendendo c++

+ desisti auauha

 

TO aprendendo java

Aposentado de OTserver e Tibia

Meus melhores tutoriais
Enciclopédia Pasta Data
Tutorial de quest

Nostradamus

Serviços Prestados ao XTibia.com
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 10/06/06Posts: 338Char no Tibia: Setyte Berseker

Que bom que está progredindo Shynzo. Mas, qual a modificação que você fez para atribuit tal código como em partes, seu?

[twitter]ThomazYuji[/twitter]

Gofaia

Make your dreams alive!
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 15/03/08Posts: 295

oO

 

 

Muuito boumm isssooo!! Gostei muito., Vousar auqi

=)

Ps: Hoje é dia de aprender mais como aquele troço funciona...

Se o provavel nao for verdade, o improvavel deve ser.

>>> Aprenda a programar em 10 anos <<<

QUOTE
Leonardo: vc é bonita
Leonardo: sua placa mae deve ser que nem voce

zimbituba

Crystal Server Founder
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 19/01/08Posts: 704Char no Tibia: Atera Knight

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

If you would like to thank me for my Crystal Server and others, feel free to donate.
Paypal: shynzomapper@hotmail.com

Natanael Beckman

Administrador
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 06/08/06Posts: 554Char no Tibia: Balacky

Muito legal e util Shynzo parabéns ;D

znExesyD.png

servercore.png

alissonlinneker

ñ frite bacon sem kmiza xP
avatar
Barão
Barão

INFOS

Grupo: BarãoRegistrado: 15/12/07Posts: 239

Boaaaa Shynzo...

vo coloquei aqui no server...

gostei :idea:



Devo esquecer aqueles que me impuseram obstáculos infundados e agradecer àqueles que me impulsionaram adiante. É hora, mais do que nunca, de valorizar as amizades e os conhecimentos adquiridos aqui. Agradeço a todos que me apoiaram. Vlw xTibia!
Amais!
[Retired]



~~>Meus Trabalhos:

---Sistema De Domínio De Castelos. (Action)
---Sistema De Mineraçao (Action)
---Scroll Que Da X Exp Quando é Usada (Action)
---Portas Não Abrem? Venha Aqui Ver Como Arruma! (Action)
---Crie Suas Quest´s De Uma Maneira Rapida E Facil. (Action)
---The Demon OaK Quest (Action)

---Addon Por Item, Com Todos Os Outfits. (Npc)

---Aprenda a colocar suas quests no Quest Log (Tutorial+scripts _ data/xml/quests.xml)
---Conhecendo Melhor A Pasta Globalevents (Tutorial+scripts)
---Gerencie O Seu Mysql Como Se Fosse Sqlite (Tutorial)
---Multi World Sistem - Como Funciona. (Tutorial)

---Projeto de tradução do TFS 8.31 SQL - Inglês para o Portugês (Server 8.31)

---2 Templantes para Web Site de OT (Websites de OTserv)
---Atualização de sites do Gesior para sistema de mult-world (Websites de OTserv)

---Thyrania editado (Map)
---Yalahar Global Completo (Map)

---Pic Editor para Tibia 8.2+ (Programa)
---Ztracker - Clone mapas 8.4 (Programa)



kwelf

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 30/10/06Posts: 4
return (result * g_config.getNumber(ConfigManager::RATE_EXPERIENCE) );

 

Não encontrei no meu TFS 0.3 :~

zimbituba

Crystal Server Founder
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 19/01/08Posts: 704Char no Tibia: Atera Knight
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

If you would like to thank me for my Crystal Server and others, feel free to donate.
Paypal: shynzomapper@hotmail.com

eletross

Eletross
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 10/01/08Posts: 73Char no Tibia: Eletross

TU EH DOS MEUS!

 

Continue assim!

 

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

 

Abração veio!

IP: warzone.servegame.org

Site para account: http://warzone.servegame.org/

Port: 7171

Versao: 8.50

Dedicado 24/7/365 Rackspace Cloud

OS Ubuntu 9.04, unlimited processing, 2GB RAM

 

Status: ON

zimbituba

Crystal Server Founder
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 19/01/08Posts: 704Char no Tibia: Atera Knight
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

If you would like to thank me for my Crystal Server and others, feel free to donate.
Paypal: shynzomapper@hotmail.com

fallenspiritrpg

www.fallenspirit.com.br
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 15/10/10Posts: 22

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.

banners.png