Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Reset v1.0

Irei ensiná-los, como adicionar um sistemas de resets no seu servidor. O sistema funciona da seguinte forma: É 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

Na suas sources, vá ao arquivo player.h e procure (ctrl+f) por:

uint32_t level;
 

Após o texto encontrado, adicione o seguinte:

uint32_t resets;
 

Iologindata.cpp

Vá até o arquivo iologindata.cpp e 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

Vá até o arquivo player.cpp e 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 }
 

Agora vá em luascript.cpp e 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);
 

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);
 

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);
 

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.

 

Créditos:

Dark Skyllen - OTSerV

Link para o post
Compartilhar em outros sites
  • 2 years later...

tem como passar pra 0.4 ??? 

Em 21/04/2014 ás 14:25, MatheusEnjoy disse:

Reset v1.0

 

Irei ensiná-los, como adicionar um sistemas de resets no seu servidor. O sistema funciona da seguinte forma: É 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

 

Na suas sources, vá ao arquivo player.h e procure (ctrl+f) por:

 


uint32_t level;

 

Após o texto encontrado, adicione o seguinte:

 


uint32_t resets;

 

Iologindata.cpp

 

Vá até o arquivo iologindata.cpp e 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

 

Vá até o arquivo player.cpp e 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 }

 

Agora vá em luascript.cpp e 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);

 

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);

 

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);

 

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.

 

Créditos:

Dark Skyllen - OTSerV

 

OT PURA DIVERSÃO | IP: otfun.servegame.com | 8.60 | Port: 7171

 

1584817_1.png

Link para o post
Compartilhar em outros sites
  • 2 years later...
  • 10 months later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo