Dark Skyllen 7 #1 Postado 25 Junho, 2010 (editado) 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: 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. 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: Editado 2 Julho, 2010 por Dark Skyllen 1 boxxer321 reagiu a isto Compartilhar este post Link para o post
Tyladron 1 #2 Postado 25 Junho, 2010 Wow! Testei aqui não é que deu certo?! 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é :fist:), mas como os contribuintes para seção sempre fazendo um ótimo trabalho aqui! Compartilhar este post Link para o post
Dark Skyllen 7 #3 Postado 26 Junho, 2010 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. Compartilhar este post Link para o post
Jojow 0 #4 Postado 26 Junho, 2010 num entendu muito disso...mas vi que teve trabalho, tks por traze pra galera Reset System?! MU ?! *-* Compartilhar este post Link para o post
Nido. 0 #5 Postado 26 Junho, 2010 Consegui botar aqui , só que nem vou usar... resete?! coisa de MU Compartilhar este post Link para o post
Dark Skyllen 7 #6 Postado 26 Junho, 2010 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. Compartilhar este post Link para o post
Gabrivil 0 #7 Postado 27 Junho, 2010 Muito bom esse sistema!!! Compartilhar este post Link para o post
Pedro 1 #8 Postado 27 Junho, 2010 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. Compartilhar este post Link para o post
Fantom 1 #10 Postado 28 Junho, 2010 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. Compartilhar este post Link para o post
Tyladron 1 #11 Postado 28 Junho, 2010 Humm...como Pedro e Fantom disse, apenas servidores que tenham um equipe eficiente consegue fazer sistemas desse tipo entre outros... Agora, fica mais aberto para praticamente qualquer um fazer um sistema avançado desse e ser feliz Então faz com que os servidores avançados de hoje em dia vão evoluindo e tentando colocar um diferencial em seu servidor a cada dia para não ficar comum. Compartilhar este post Link para o post
D u k e e H 0 #12 Postado 18 Julho, 2010 2.0 por favoor. é tenso ficar com players 'imortais' :/ Compartilhar este post Link para o post
Dark Skyllen 7 #13 Postado 22 Julho, 2010 2.0 por favoor.é tenso ficar com players 'imortais' :/ A versão 2.0 sairá em breve. Quando ao fato dos players imortais, criei a função LUA exatamente para que possam ajustar as coisas de acordo com as necessidades. Compartilhar este post Link para o post
Raphael Carnaúba 1 #14 Postado 26 Julho, 2010 Eaí Dark, tudo beleza? Cara, eu lí seu codigo, porque voce não usa luaSQL pra puxar as informações de reset, ao invés de modificar as sources? é apenas uma sugestão. Fora isso, parabéns Compartilhar este post Link para o post
nogareD 0 #15 Postado 26 Julho, 2010 Eaí Dark, tudo beleza?Cara, eu lí seu codigo, porque voce não usa luaSQL pra puxar as informações de reset, ao invés de modificar as sources? é apenas uma sugestão. Fora isso, parabéns db.executeQuery(query) mas já foi feito pelo mock Compartilhar este post Link para o post
Chê. 1 #16 Postado 27 Julho, 2010 Independente do code, só o fato de postar algo mais complexo aqui na otnet já merece meus parabéns (: Compartilhar este post Link para o post
Dark Skyllen 7 #17 Postado 27 Julho, 2010 Eaí Dark, tudo beleza?Cara, eu lí seu codigo, porque voce não usa luaSQL pra puxar as informações de reset, ao invés de modificar as sources? é apenas uma sugestão. Fora isso, parabéns Pois com a implementação no code, não é necessário usar query toda hora pra verificar o número de resets OiaeuMae Compartilhar este post Link para o post
Master Viciado 3 #18 Postado 28 Julho, 2010 @Sobre sua resposta no boletim: Na verdade o RadBR teve a idéia de usar o sistema de resets que é baseado no jogo MU (pirata) primeiro e também foi o servidor que deu certo quanto a usar esse sistema de resetar etc até hoje... O sistema que você criou, é sim bastante parecido com o atual do RadBR que alias conseguimos fazer um sistema parecido com o seu a mais de 4 meses atrás, que foi aparecer look no reset dentre outros. Se tiver duvidando basta olhar em nosso site a notícia do mês de abril. Então, não vejo motivos para você dizer que o sistema não tem nada haver com o RadBR. Mesmo assim, parabéns pela iniciativa. Você consegue fazer com que apareça o reset junto com o chat que nem o level? Ex: 16:50 Player (33) [22]: E ae galera Compartilhar este post Link para o post
Dark Skyllen 7 #19 Postado 28 Julho, 2010 @Sobre sua resposta no boletim: Na verdade o RadBR teve a idéia de usar o sistema de resets que é baseado no jogo MU (pirata) primeiro e também foi o servidor que deu certo quanto a usar esse sistema de resetar etc até hoje... O sistema que você criou, é sim bastante parecido com o atual do RadBR que alias conseguimos fazer um sistema parecido com o seu a mais de 4 meses atrás, que foi aparecer look no reset dentre outros. Se tiver duvidando basta olhar em nosso site a notícia do mês de abril. Então, não vejo motivos para você dizer que o sistema não tem nada haver com o RadBR. Mesmo assim, parabéns pela iniciativa. Você consegue fazer com que apareça o reset junto com o chat que nem o level? Ex: 16:50 Player (33) [22]: E ae galera Sim, eu não disse que meu sistema veio primeiro que os seus ou algo ao contrário. Só tenho a admirar o sistema de vocês, é um ótimo sistema. O meu trabalho é disponibilizar conteúdos e cuidar da seção de programação, foi o que fiz. Fiz um sistema que pode ser usado para muitos. Quanto aos resets nas falas, posso fazer sim. Compartilhar este post Link para o post
lucasde12 0 #20 Postado 8 Agosto, 2010 Script de um membro do forum rival,ele merece os creditor não adianta só mudar a foto e falar que o script é seu Compartilhar este post Link para o post