Reset System

MatheusEnjoy

Criminal Monkey
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 07/08/11Posts: 301

arhPioO.png

Nome: Reset
Versão: 1.0
Código: Dark Skyllen
Forum Origem: OTSerV
Versão: Todos TFS
Descrição:
É adicionada uma nova coluna no seu banco de dados, na tabela player, denominada resets. Nessa tabela irão conter os resets do jogador. No jogo, ao dar look em um jogador, os resets são mostrados.


reset.png

Também, irei disponibilizar novas funções LUA que possibilitarão o uso dos resets por scripts.

Alterando seu banco de dados

Primeiramente, usarei o SQLite para demonstrar como alterar a tabela de players, onde o mesmo código, também pode ser usado no phpMyAdmin para os usuários de MySQL.
Abra seu SQLite e após selecionar seu banco de dados, abra o editor de SQL Query. Para quem não sabe abrir, basta seguir a imagem:

Digite o seguinte código no seu SQL Query editor:

ALTER TABLE players ADD resets INTEGER not null default 0

Execute este código, apertando F9.
Pode ser que ao executar o código, demore um pouco, aguarde.
Alterando as sources
Pra quem tem as sources e deseja alterar, aqui vai o tutorial. Bom, em primeiro lugar, o tutorial foi feito com a versão 0.3.6 do The Forgotten Server, que seu download pode ser encontrado aqui no fórum, junto das sources.

Player.h
Procure (ctrl+f) por:

uint32_t level;

Após o texto encontrado, adicione o seguinte:

uint32_t resets;

Iologindata.cpp
Procure por:

query << "SELECT `id`, `account_id`, `group_id`, `world_id`, `sex`, `vocation`, `experience`, `level`, `maglevel`, ";
query << "`health`, `healthmax`, `blessings`, `mana`, `manamax`, `manaspent`, `soul`, `lookbody`, `lookfeet`, ";
query << "`lookhead`, `looklegs`, `looktype`, `lookaddons`, `posx`, `posy`, `posz`, `cap`, `lastlogin`, ";
query << "`lastlogout`, `lastip`, `conditions`, `skull`, `skulltime`, `guildnick`, `rank_id`, `town_id`, ";
query << "`balance`, `stamina`, `direction`, `loss_experience`, `loss_mana`, `loss_skills`, `loss_containers`, ";
query << "`loss_items`, `marriage`, `promotion`, `description` FROM `players` WHERE `name` ";
query << db->getStringComparison() << db->escapeString(name) << " AND `world_id` = ";
query << g_config.getNumber(ConfigManager::WORLD_ID) << " AND `deleted` = 0 LIMIT 1";

Altere todo este código para:

query << "SELECT `id`, `account_id`, `group_id`, `world_id`, `sex`, `vocation`, `experience`, `level`, `resets`, `maglevel`, ";
query << "`health`, `healthmax`, `blessings`, `mana`, `manamax`, `manaspent`, `soul`, `lookbody`, `lookfeet`, ";
query << "`lookhead`, `looklegs`, `looktype`, `lookaddons`, `posx`, `posy`, `posz`, `cap`, `lastlogin`, ";
query << "`lastlogout`, `lastip`, `conditions`, `skull`, `skulltime`, `guildnick`, `rank_id`, `town_id`, ";
query << "`balance`, `stamina`, `direction`, `loss_experience`, `loss_mana`, `loss_skills`, `loss_containers`, ";
query << "`loss_items`, `marriage`, `promotion`, `description` FROM `players` WHERE `name` ";
query << db->getStringComparison() << db->escapeString(name) << " AND `world_id` = ";
query << g_config.getNumber(ConfigManager::WORLD_ID) << " AND `deleted` = 0 LIMIT 1";

Ainda em iologindata.cpp, procure por:

player->level = std::max((uint32_t)1, (uint32_t)result->getDataInt("level"));

Após o código encontrado, adicione o seguinte código:

player->resets = (uint32_t)result->getDataInt("resets");

Ainda em iologindata.cpp, procure por:

query << "`maglevel` = " << player->magLevel << ", ";

Após o código acima, adicione:

query << "`resets` = " << player->resets << ", ";


Player.cpp

Procure pelo seguinte código:

s << " (Level " << level << ")";

Altere para:

s << " (Level " << level << " [Resets: " << resets << "])";

Adicionando comandos LUA

Vamos adicionar os comandos LUA que poderão trabalhar com nosso sistema de resets:

- getResets(cid)

Vá até player.h e procure por:

void setPromotionLevel(uint32_t pLevel);

Após isso, adicione:

uint32_t getResets() { return resets }

luascript.cpp

Procure por:

int32_t LuaScriptInterface::luaDoPlayerSetIdleTime(lua_State* L)
{
//doPlayerSetIdleTime(cid, amount)
int64_t amount = popNumber(L);
ScriptEnviroment* env = getEnv();
if(Player* player = env->getPlayerByUID(popNumber(L)))
{
player->setIdleTime(amount);
lua_pushboolean(L, true);
}
else
{
errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
lua_pushboolean(L, false);
}
return 1;
}

Após o código, adicione:

int32_t LuaScriptInterface::luaGetResets(lua_State* L)
{
//getResets(cid)
ScriptEnviroment* env = getEnv();
if(Player* player = env->getPlayerByUID(popNumber(L)))
lua_pushnumber(L, player->getResets());
else
{
errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
lua_pushboolean(L, false);
}
return 1;
}

Ainda em luascript.cpp procure por:

//doPlayerSetIdleTime(cid, amount)
lua_register(m_luaState, "doPlayerSetIdleTime", LuaScriptInterface::luaDoPlayerSetIdleTime);

Após o código, adicione:

//getResets(cid)
lua_register(m_luaState, "getResets", LuaScriptInterface::luaGetResets);

luascript.h

Agora em luascript.h procure por:

static int32_t luaDoPlayerSetIdleTime(lua_State* L);

Após isso, adicione:

static int32_t luaGetResets(lua_State* L);
- setResets(cid, amount)

Vá em luascript.h e procure por:

static int32_t luaGetResets(lua_State* L);

Após isso, adicione:

static int32_t luaSetResets(lua_State* L);

luascript.cpp

Agora vá até luascript.cpp e procure por:

int32_t LuaScriptInterface::luaGetResets(lua_State* L)
{
//getResets(cid)
ScriptEnviroment* env = getEnv();
if(Player* player = env->getPlayerByUID(popNumber(L)))
lua_pushnumber(L, player->getResets());
else
{
errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
lua_pushboolean(L, false);
}
return 1;
}

Após isso, adicione:

int32_t LuaScriptInterface::luaSetResets(lua_State* L)
{
//setResets(cid, amount)
int32_t amount = popNumber(L);
ScriptEnviroment* env = getEnv();
if(Player* player = env->getPlayerByUID(popNumber(L)))
{
player->setResets(amount);
lua_pushboolean(L, true);
}
else
{
errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
lua_pushboolean(L, false);
}
return 1;
}

Ainda em luascript.cpp, procure por:

//getResets(cid)
lua_register(m_luaState, "getResets", LuaScriptInterface::luaGetResets);

Após isso, adicione:

//setResets(cid, amount)
lua_register(m_luaState, "setResets", LuaScriptInterface::luaSetResets);

player.h

Agora vá até player.h e procure por:

uint32_t getResets() { return resets; }

Após isso, adicione:

void setResets(int32_t amount) { resets += amount; if (resets < 0) {resets = 0;} }

Pronto, agora é só usar os comandos no seu script:

getResets(cid) - Retorna o número de resets
setResets(cid, amount) - Aumenta ou diminui os resets conforme a quantidade.

ipCIakq.png

kwutpVE.png

 

Membro desde 12/2012

Coordenador desde 08/2012

Colaborador desde 08/2011

http://www.matheusvieira.info/

gabisaoo

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 27/08/08Posts: 57

Tentei colocar esse sistema no meu tfs 0.4 3884, não pegou, deu buggs na hora de compilar.

Maenilse

q manero em fera
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 21/09/12Posts: 711Char no Tibia: noé

isso pq o code ta feito exclusivo pra 0.3.6 e n pra 0.4

 

btw: otimo sistema, obrigado por compartilhar

Hellz01

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 22/06/13Posts: 2Char no Tibia: Hellz

tenho uma duvida meu servidor e de tibia 7.92 (dragon souls) ja vi um ot da mesma versao com esse sistema so que no meu nao tem o Iologindata.cpp e meu ot e versao xml tem algum sistema de reset que funcione la estou precisando muito rep + pra quem ajuda

bilaux

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 04/12/18Posts: 93

nem esse começo, não acha no tfs 0.4

 

Player.h
Procure (ctrl+f) por:

uint32_t level;

 

Em 26/04/2014 em 07:38, netflat10 disse:

na onde tiver LuaScriptInterface, troque por LuaInterface

 

Yan Liima

Scripter,Programador,WebMaster.
avatar
Diretor
Diretor

INFOS

Grupo: DiretorRegistrado: 12/05/12Posts: 818Gênero: MasculinoChar no Tibia: [ADM] Night
1 hora atrás, bilaux disse:

nem esse começo, não acha no tfs 0.4

 

Player.h
Procure (ctrl+f) por:

uint32_t level;

 

 

Tem sim amigo, tem que ter. Provavelmente essa linha em que você está tentando copiar e colar para procurar está vindo bugado. Tente copiar essa ou tenta escrevendo a mão e procure.

uint32_t level;

Estara em cima de levelPercent;

════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═══╗

ALGUNS DOS MEUS TRABALHOS:

Spoiler

WODBOHS[DOWNLOAD]

Newstory dbo+nto+bleach[DOWNLOAD]

 

>> Mais infos <<

- Projetos lançados também feitos por mim {

DBO SKY

POKE SKY

WODBOWARS

Tic-tac-War

Dbo Universe(em desenvolvimento)

}

universe.thumb.png.6840320998d0fc1a4652b3db81a585c0.png

Separador.PNG

Te Ajudei? Rep + e ficamos Quits

imageproxy.png.84dce08dd18d31663a72aa1ce37b858a.png

Precisando de ajuda?

discord.png.1ecd188791d0141f74d99db371a2e0a4.pngDiscord: Yan Liima #3702

Programador Júnior de LUA, PHP e JavaScript

Juntos somos lendas, separados somos Mitos!

╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝

bilaux

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 04/12/18Posts: 93

vou tentar aí, não acho isso 

int32_t LuaScriptInterface::luaGetResets(lua_State* L)

 

3 minutos atrás, Yan Liima disse:

Tem sim amigo, tem que ter. Provavelmente essa linha em que você está tentando copiar e colar para procurar está vindo bugado. Tente copiar essa ou tenta escrevendo a mão e procure.

uint32_t level;

Estara em cima de levelPercent;

 

player.h:351:18: error: ‘uint32_t Player::getResets()’ cannot be overloaded
         uint32_t getResets() { return resets; }
                  ^
player.h:331:12: error: with ‘uint32_t Player::getResets()’
   uint32_t getResets() { return resets }
            ^
player.h: In member function ‘uint32_t Player::getResets()’:
player.h:331:40: error: expected ‘;’ before ‘}’ token
   uint32_t getResets() { return resets }
                                        ^
player.h: In member function ‘void Player::setResets(int32_t)’:
player.h:352:71: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits]
         void setResets(int32_t amount) { resets += amount; if (resets < 0) {resets = 0;} }
                                                                       ^
Makefile:547: recipe for target 'beds.o' failed
make[1]: *** [beds.o] Error 1
make[1]: Leaving directory '********'
Makefile:404: recipe for target 'all' failed
make: *** [all] Error 2

 

Yan Liima

Scripter,Programador,WebMaster.
avatar
Diretor
Diretor

INFOS

Grupo: DiretorRegistrado: 12/05/12Posts: 818Gênero: MasculinoChar no Tibia: [ADM] Night
19 minutos atrás, bilaux disse:

vou tentar aí, não acho isso 

int32_t LuaScriptInterface::luaGetResets(lua_State* L)

 

 

player.h:351:18: error: ‘uint32_t Player::getResets()’ cannot be overloaded
         uint32_t getResets() { return resets; }
                  ^
player.h:331:12: error: with ‘uint32_t Player::getResets()’
   uint32_t getResets() { return resets }
            ^
player.h: In member function ‘uint32_t Player::getResets()’:
player.h:331:40: error: expected ‘;’ before ‘}’ token
   uint32_t getResets() { return resets }
                                        ^
player.h: In member function ‘void Player::setResets(int32_t)’:
player.h:352:71: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits]
         void setResets(int32_t amount) { resets += amount; if (resets < 0) {resets = 0;} }
                                                                       ^
Makefile:547: recipe for target 'beds.o' failed
make[1]: *** [beds.o] Error 1
make[1]: Leaving directory '********'
Makefile:404: recipe for target 'all' failed
make: *** [all] Error 2

 

Na TFS 0.4 se não me engano não tem essa função(luaGetResets). E na TFS 0.4 não utiliza: 

LuaScriptInterface

Na TFS 0.4 é dessa maneira:

LuaInterface

════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═══╗

ALGUNS DOS MEUS TRABALHOS:

Spoiler

WODBOHS[DOWNLOAD]

Newstory dbo+nto+bleach[DOWNLOAD]

 

>> Mais infos <<

- Projetos lançados também feitos por mim {

DBO SKY

POKE SKY

WODBOWARS

Tic-tac-War

Dbo Universe(em desenvolvimento)

}

universe.thumb.png.6840320998d0fc1a4652b3db81a585c0.png

Separador.PNG

Te Ajudei? Rep + e ficamos Quits

imageproxy.png.84dce08dd18d31663a72aa1ce37b858a.png

Precisando de ajuda?

discord.png.1ecd188791d0141f74d99db371a2e0a4.pngDiscord: Yan Liima #3702

Programador Júnior de LUA, PHP e JavaScript

Juntos somos lendas, separados somos Mitos!

╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝

bilaux

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 04/12/18Posts: 93

não funfa..

 

1 hora atrás, Yan Liima disse:

Na TFS 0.4 se não me engano não tem essa função(luaGetResets). E na TFS 0.4 não utiliza: 

LuaScriptInterface

Na TFS 0.4 é dessa maneira:

LuaInterface