Antigo 25-06-10, 13:52   #1
Dark Skyllen
 
Moderadores Locais


Registrado em: May 2007
Posts: 677

Valuti: 31.0 [ Doar ]
Valuti no Banco: 1451.8

Outras Informações:


Dark Skyllen está offline
Reset System - 1.0

DSystem - 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.






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:
Código PHP:
ALTER TABLE players ADD resets INTEGER not null default 
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:
Código PHP:
uint32_t level
Após o texto encontrado, adicione o seguinte:
Código PHP:
uint32_t resets
  • Iologindata.cpp
Vá até o arquivo iologindata.cpp e procure por:

Código PHP:
    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:
Código PHP:
    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:
Código PHP:
player->level std::max((uint32_t)1, (uint32_t)result->getDataInt("level")); 
Após o código encontrado, adicione o seguinte código:
Código PHP:
player->resets = (uint32_t)result->getDataInt("resets"); 
Ainda em iologindata.cpp, procure por:
Código PHP:
query << "`maglevel` = " << player->magLevel << ", "
Após o código acima, adicione:
Código PHP:
query << "`resets` = " << player->resets << ", "
  • Player.cpp
Vá até o arquivo player.cpp e procure pelo seguinte código:
Código PHP:
<< " (Level " << level << ")"
Altere para:
Código PHP:
<< " (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:
Código PHP:
void setPromotionLevel(uint32_t pLevel); 
Após isso, adicione:
Código PHP:
uint32_t getResets() { return resets 
Agora vá em luascript.cpp e procure por:
Código PHP:
int32_t LuaScriptInterface::luaDoPlayerSetIdleTime(lua_StateL)
{
    
//doPlayerSetIdleTime(cid, amount)
    
int64_t amount popNumber(L);
    
ScriptEnviromentenv getEnv();
    if(
Playerplayer env->getPlayerByUID(popNumber(L)))
    {
        
player->setIdleTime(amount);
        
lua_pushboolean(Ltrue);
    }
    else
    {
        
errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
        
lua_pushboolean(Lfalse);
    }
    return 
1;

Após o código, adicione:
Código PHP:
int32_t LuaScriptInterface::luaGetResets(lua_StateL)
{
    
//getResets(cid)
    
ScriptEnviromentenv getEnv();
    if(
Playerplayer env->getPlayerByUID(popNumber(L)))
        
lua_pushnumber(Lplayer->getResets());
    else
    {
        
errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
        
lua_pushboolean(Lfalse);
    }
    return 
1;

Ainda em luascript.cpp procure por:
Código PHP:
    //doPlayerSetIdleTime(cid, amount)
    
lua_register(m_luaState"doPlayerSetIdleTime"LuaScriptInterface::luaDoPlayerSetIdleTime); 
Após o código, adicione:
Código PHP:
    //getResets(cid)
    
lua_register(m_luaState"getResets"LuaScriptInterface::luaGetResets); 
Agora em luascript.h procure por:
Código PHP:
static int32_t luaDoPlayerSetIdleTime(lua_StateL); 
Após isso, adicione:
Código PHP:
static int32_t luaGetResets(lua_StateL); 
- setResets(cid, amount)

Vá em luascript.h e procure por:
Código PHP:
static int32_t luaGetResets(lua_StateL); 
Após isso, adicione:
Código PHP:
static int32_t luaSetResets(lua_StateL); 
Agora vá até luascript.cpp e procure por:
Código PHP:
int32_t LuaScriptInterface::luaGetResets(lua_StateL)
{
    
//getResets(cid)
    
ScriptEnviromentenv getEnv();
    if(
Playerplayer env->getPlayerByUID(popNumber(L)))
        
lua_pushnumber(Lplayer->getResets());
    else
    {
        
errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
        
lua_pushboolean(Lfalse);
    }
    return 
1;

Após isso, adicione:
Código PHP:
int32_t LuaScriptInterface::luaSetResets(lua_StateL)
{
    
//setResets(cid, amount)
    
int32_t amount popNumber(L);
    
ScriptEnviromentenv getEnv();
    if(
Playerplayer env->getPlayerByUID(popNumber(L)))
    {
        
player->setResets(amount);
        
lua_pushboolean(Ltrue);
    }
    else
    {
        
errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
        
lua_pushboolean(Lfalse);
    }
    return 
1;

Ainda em luascript.cpp, procure por:
Código PHP:
    //getResets(cid)
    
lua_register(m_luaState"getResets"LuaScriptInterface::luaGetResets); 
Após isso, adicione:
Código PHP:
//setResets(cid, amount)
lua_register(m_luaState"setResets"LuaScriptInterface::luaSetResets); 
Agora vá até player.h e procure por:
Código PHP:
uint32_t getResets() { return resets; } 
Após isso, adicione:
Código PHP:
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.

Para quem quiser, segue em anexo o servidor já compilado, versão 0.3.6 do The Forgotten Server.


Segue em anexo o servidor já compilado:
Arquivos Anexados
Tipo de Arquivo: rar DSystem 1.0.rar (994,6 KB, 39 visitas)

__________________
.
.
.

@Dark Skyllen - Cavaleiro OTBR
#otserv - irc.otserv.com.br

0:43
Responder com Quote
3 usuários agradeceram a Dark Skyllen por este post:
Fantom (28-06-10), Mickfern (26-07-10), Tyladron (26-07-10)
 
<a href="http://www.game-advertising-online.com/" target=_blank>Game Advertising Online</a><br> banner requires iframes
Antigo 25-06-10, 19:56   #2
Tyladron
 
Avatar de Tyladron
 
Cavaleiro OTBR


Registrado em: Mar 2007
Posts: 1.345

Valuti: 5.4 [ Doar ]
Valuti no Banco: 1951.6

Outras Informações:


Tyladron está offline
Wow! Testei aqui não é que deu certo?! :O
Sempre procurei como colocar o sistema de resets e aparecer os resets do player ao dar look, e agora com esse sistema, podemos adicionar também no site, legal!

Parabéns Dark Skyllenght como sempre você e os outros moderadores (só tem mais o Piikachu né ), mas como os contribuintes para seção sempre fazendo um ótimo trabalho aqui!


Responder com Quote
 
Antigo 26-06-10, 11:35   #3
Dark Skyllen
 
Moderadores Locais


Registrado em: May 2007
Posts: 677

Valuti: 31.0 [ Doar ]
Valuti no Banco: 1451.8

Outras Informações:


Dark Skyllen está offline
Sim, da pra adicionar no site e fazer muitos scripts em relação aos resets. Prometo que em alguns dias apresento a versão 2.0, onde os resets modificarão a força dos hits e das magias, ou seja, quanto mais resets, mais forte.

__________________
.
.
.

@Dark Skyllen - Cavaleiro OTBR
#otserv - irc.otserv.com.br
Responder com Quote
 
Antigo 26-06-10, 12:49   #4
Jojow
 
Avatar de Jojow
 
Spriter Aurora


Registrado em: Mar 2010
Posts: 521

Valuti: 3.0 [ Doar ]
Valuti no Banco: 775.0

Outras Informações:


Jojow está offline
num entendu muito disso...mas vi que teve trabalho, tks por traze pra galera Reset System?! MU ?! *-*

__________________



Dúvidas? Me mande PM e tentarei ajudar!
Responder com Quote
 
Antigo 26-06-10, 16:02   #5
Nido.
 
Avatar de Nido.
 
Matador na War


Registrado em: Jul 2009
Posts: 99

Valuti: -30.4 [ Doar ]
Valuti no Banco: 0.2

Outras Informações:


Nido. está offline
Consegui botar aqui , só que nem vou usar... resete?! coisa de MU
Responder com Quote
 
Antigo 26-06-10, 19:44   #6
Dark Skyllen
 
Moderadores Locais


Registrado em: May 2007
Posts: 677

Valuti: 31.0 [ Doar ]
Valuti no Banco: 1451.8

Outras Informações:


Dark Skyllen está offline
Citação:
Postado Originalmente por bielzinhuu11 Ver Mensagens
Consegui botar aqui , só que nem vou usar... resete?! coisa de MU
Sim, é parecido com os resets de mu. É ótimo para servidores high rate, agora, o que irão fazer com os resets, vai depender de cada um.

__________________
.
.
.

@Dark Skyllen - Cavaleiro OTBR
#otserv - irc.otserv.com.br
Responder com Quote
 
Antigo 27-06-10, 0:50   #7
Gabrivil
 
Avatar de Gabrivil
 
Cidadão


Registrado em: May 2010
Posts: 72

Valuti: 2.0 [ Doar ]
Valuti no Banco: 172.7

Outras Informações:


Gabrivil está offline
Muito bom esse sistema!!!

__________________
ᶠᶸᶜᵏᵧₒᵤ ᶠᶸᶜᵏᵧₒᵤ ᶠᶸᶜᵏᵧₒᵤ ᶠᶸᶜᵏᵧₒᵤ ᶠᶸᶜᵏᵧₒᵤ ᶠᶸᶜᵏᵧₒᵤ



Responder com Quote
 
Antigo 27-06-10, 20:12   #8
Pedro
 
Avatar de Pedro
 
diguidim diguidim


Registrado em: Nov 2007
Posts: 1.297

Valuti: 538.1 [ Doar ]
Valuti no Banco: 182.5

Outras Informações:


Pedro está offline
Gostei pacas ein Dark Skyllen, parabéns. Díficil o pessoal postar abertamente esse tipo de conteúdo mais complexo, assim que vai movimentar a seção programação. Acho que com a versão 2.0 então, o sistema vai ficar bem útil em qualquer servidor.
Responder com Quote
 
Antigo 27-06-10, 20:48   #9
Augustocsm
 
Guerreiro


Registrado em: Apr 2008
Posts: 122

Valuti: 0.1 [ Doar ]
Valuti no Banco: 3000.5

Outras Informações:


Augustocsm está offline
Massa mesmo valeu!!!
Responder com Quote
 
Antigo 28-06-10, 9:44   #10
Fantom
 
Avatar de Fantom
 
// ~ Fantom ~ \\


Registrado em: Feb 2009
Posts: 1.656

Valuti: 21.2 [ Doar ]
Valuti no Banco: 198.6

Outras Informações:


Fantom está offline
Manow desde a versão 7.6 eu via os GODs fazendo os resets manualmente quando um player chegava lvl 350, e sempre axei muito legal...
Agora com essa evolução, ficou muito massa.
Eu tinha visto esse sistema parecido no RadBr.
Sempre vi esse sistema sendo muito útil, pois torna o RPG mais agradável (na minha opinião)...
Parabéns pelo script...
Agora se a V2 tiver do jeito que vc falou, quanto mais reset mais forte, eu vou até chorar.
Parabéns man.

Att.

__________________
Atenciosamente,
Fantom




Irc: irc.unirc.org canal: #otserv
Responder com Quote
 
Resposta

Opções do Tópico
Modos de Exibição

Regras para Posts
Você não pode postar novos tópicos.
Você não pode postar respostas.
Você não pode postar anexos.
You may not edit your posts

BB code is Ligado
Smiles: Ligado
[IMG]:Ligado
HTML Desligado
Ir para...



<a href="http://www.game-advertising-online.com/" target=_blank>Game Advertising Online</a><br> banner requires iframes




Horários baseados na GMT -2. Agora são 23:15.



Powered by vBulletin® Version 3.7.1
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd
OTServ Brasil