Ir para conteúdo

MatheusEnjoy

Visconde
  • Total de itens

    301
  • Registro em

  • Última visita

  • Dias Ganhos

    3

Tudo que MatheusEnjoy postou

  1. Tem que colocar a arte aqui tbm...
  2. Games MMO
  3. Ótima novas regras.
  4. [Modificações Servidor-Side] Anti-Palavrão E Anti-Spam Limite de Peso ao Enviar Parcels Capacidade de Sobrecargada Player Online Spoof ElfBot Anti-Push (Anti-Crash) Heal com Cores Diferentes Reset System Log do Chat [Modificações Cliente-Side] Andar Com WASD No Teclado [Funções Lua] Clipboardcopy(Text) Dochallengeplayer(Cid, Target) Dosavehouse(Houseid) [Outros]
  5. Por favor movam para códigos prontos, isso não e um tutorial.
  6. Nome: Weight Limit Versão: 1.0 Código: Ninja Forum Origem: OTLand.net Versão: Todos TFS Descrição: O Ninja observou que na maioria dos servidores o mailbox gera um crash no jogo, ao enviar parcels muito pesados o server trava. Para solucionar isso ele criou um sistema que não permite que envie mailbox com mais de 5000oz. Bom vamos ao tutorial: Mailbox.cpp Procure por: bool Mailbox::sendItem(Creature* actor, Item* item) { uint32_t depotId =0; std::string name; if(!getRecipient(item, name, depotId)|| name.empty()||!depotId) return false; return IOLoginData::getInstance()->playerMail(actor, name, depotId, item); }Substitua: if(!getRecipient(item, name, depotId)|| name.empty()||!depotId)Por: (lembrando que nessa linha você pode configurar o limite, o padrão e 5000) if(!getRecipient(item, name, depotId) || name.empty() || !depotId || item->getWeight()>5000)
  7. A ideia não e só o código implementado e sim como se faz isso... Trazendo conteúdo desse nivel pode ajudar membros que estão interessados em aprender C++.
  8. Nome: Heal Changing Colors Versão: 1.0 Código: Evil Hero Forum Origem: OTLand.net Versão: Todos TFS Descrição: Você pode definir a cor que vai sair a cura. Vamos ao código: game.cpp: Procure na função: bool Game::combatChangeHealth Por isso: addAnimatedText(list, targetPos, TEXTCOLOR_GREEN, buffer);Substitua por: addAnimatedText(list, targetPos, g_config.getNumber(ConfigManager::HEALTH_HEALING_COLOR), buffer);Procure na função: bool Game::combatChangeManaPor isso: addAnimatedText(list, targetPos, TEXTCOLOR_DARKPURPLE, buffer);Substitua por: addAnimatedText(list, targetPos, g_config.getNumber(ConfigManager::MANA_HEALING_COLOR), buffer); configmanager.cpp: Procure por: m_confBool[SHOW_HEALING_DAMAGE_MONSTER] = getGlobalBool("showHealingDamageForMonsters", false);Adicione abaixo: m_confNumber[HEALTH_HEALING_COLOR] = getGlobalNumber("healthHealingColor", TEXTCOLOR_GREEN); m_confNumber[MANA_HEALING_COLOR] = getGlobalNumber("manaHealingColor", TEXTCOLOR_DARKPURPLE); configmanager.h: Procure por: NAME_REPORT_TYPE,Adicione abaixo: HEALTH_HEALING_COLOR, MANA_HEALING_COLOR,Salve e Copile. config.lua: Adicione ao config healthHealingColor = TEXTCOLOR_GREEN manaHealingColor = TEXTCOLOR_DARKPURPLE
  9. Nome: Player Online Spoof Versão: 2.0 Suportada: Tfs 0.3 e 0.4 Descrição: Coloque quantos players quiser em seu otserv. Eu estava vendo o utilitário de player spoof e resolvi dar uma extraia no code e fazer com que você adicione quantos quiser em seu servidor. Em configmanager.cpp procure: m_confNumber[MAX_PLAYERS] = getGlobalNumber("maxPlayers", 1000); Abaixo adicione: m_confNumber[SPOOF_PLAYERS] = getGlobalNumber("spoofPlayers", 0); Em configmanager.h procure: MAX_PLAYERS, Abaixo adicione: SPOOF_PLAYERS, Em status.cpp procure: p = xmlNewNode(NULL,(const xmlChar*)"players"); sprintf(buffer, "%d", g_game.getPlayersOnline()); xmlSetProp(p, (const xmlChar*)"online", (const xmlChar*)buffer); sprintf(buffer, "%d", (int32_t)g_config.getNumber(ConfigManager::MAX_PLAYERS)); xmlSetProp(p, (const xmlChar*)"max", (const xmlChar*)buffer); sprintf(buffer, "%d", g_game.getPlayersRecord()); xmlSetProp(p, (const xmlChar*)"peak", (const xmlChar*)buffer); Modifique para: p = xmlNewNode(NULL,(const xmlChar*)"players"); sprintf(buffer, "%d", g_game.getPlayersOnline()+(int32_t)g_config.getNumber(ConfigManager::SPOOF_PLAYERS)); xmlSetProp(p, (const xmlChar*)"online", (const xmlChar*)buffer); sprintf(buffer, "%d", (int32_t)g_config.getNumber(ConfigManager::MAX_PLAYERS)+(int32_t)g_config.getNumber(ConfigManager::SPOOF_PLAYERS)); xmlSetProp(p, (const xmlChar*)"max", (const xmlChar*)buffer); sprintf(buffer, "%d", g_game.getPlayersRecord()+(int32_t)g_config.getNumber(ConfigManager::SPOOF_PLAYERS)); xmlSetProp(p, (const xmlChar*)"peak", (const xmlChar*)buffer); Em config.lua procure: maxPlayers = Abaixo adicione: spoofPlayers = 0 Configurando: No config.lua onde tem spoofPlayers = 0 substitua o valor 0 para o valor de players spoof que você deseja ter. Recomendações: Remova o comando /online de seu servidor ou modifique para somente gm+ pode utiliza-lo. Modifique no site o total de players e adicione +(a quantidade que você colocou). Créditos: Comedinha
  10. Nome: ElfBot Anti-Push Versão: 1.0 Código: Fire Element, Aprimorado: kito2 Forum Origem: TibiaKing Versão: Todos TFS Descrição: infelizmente da para causar lag e até mesmo derrubar um servidor de várias maneiras utilizando o ElfBot (bot maldito) e uma dessas maneiras é usando uma hotkey de Anti-Push (não vou postar a hotkey aqui porque eu não sou mal), vim aqui para postar uma solução para vocês que sofrem com isso. O sistema abaixo é basicamente um delay ao Anti-Push utilizado pelo ElfBot, ou seja, você terá um pequeno dalay (nada que influenciará na jogabilidade) para arrastar certos itens no jogo, ok, chega de conversa... game.cpp: Procure pelo seguinte código: if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } Abaixo desse código você irá adicionar isso: uint16_t items[] = {2148, 2152, 2160, 3976, 2599, 7636, 7635, 7634}; uint16_t n = 0; for (n = 0; n < sizeof(items) / sizeof(uint16_t); n++){ if(item->getID() == items[n] && player->hasCondition(CONDITION_EXHAUST, 1)){ player->sendTextMessage(MSG_STATUS_SMALL, "Please wait a few seconds to move this item."); return false; } } if(Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 500, 0, false, 1)) player->addCondition(condition); Se quiser adicionar novos itens ao delay, basta adicionar nos IDs na linha: uint16_t items[] = {2148, 2152, 2160, 3976, 2599, 7636, 7635, 7634};
  11. 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. 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.
  12. Nome: Capacity Overload Versão: 1.0 Código: sn3ejk Forum Origem: OTLand Versão: Todos TFS Descrição: Sistema tirado dos jogos da Bethesda como Skyrim e Fallout. Essa modificação faz com o que personagem com a tenha capacidade de carregar infinita, mais ao chegar determinado valor o personagem começa andar mais devagar. Vamos ao código: Em config.lua Abaixo de: playerFollowExhaust = 0Adicione: capacityOverload = 0.75Em configmanager.cpp Abaixo de: m_confNumber[FOLLOW_EXHAUST] = getGlobalNumber("playerFollowExhaust", 2000); Adicione: m_confDouble[CAPACITY_OVERLOAD] = getGlobalDouble("capacityOverload", 0.75); Em configmanager.h Abaixo de: FORMULA_MAGIC,Adicione: CAPACITY_OVERLOAD,Em player.cpp Substitua: windowTextId = nextExAction = 0;Por: windowTextId = nextExAction = capacityOverload = 0;Substitua: void Player::updateInventoryWeight()Por: void Player::updateInventoryWeight() { inventoryWeight = 0.00; if(hasFlag(PlayerFlag_HasInfiniteCapacity) || !g_config.getBool(ConfigManager::USE_CAPACITY)) return; for(int32_t i = SLOT_FIRST; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) inventoryWeight += item->getWeight(); } if (inventoryWeight >= capacity && !capacityOverload) { capacityOverload = (int32_t)(getSpeed() * g_config.getDouble(ConfigManager::CAPACITY_OVERLOAD)); g_game.changeSpeed(this, -capacityOverload); } else if (inventoryWeight < capacity && capacityOverload) { g_game.changeSpeed(this, capacityOverload); capacityOverload = 0; } }Substitua: bool Player::hasCapacity(const Item*, uint32_t) constPor: bool Player::hasCapacity(const Item*, uint32_t) const { return true; }Substitua: void Player::onThink(uint32_t interval)Por: void Player::onThink(uint32_t interval) { Creature::onThink(interval); int64_t timeNow = OTSYS_TIME(); if(timeNow - lastPing >= 5000) { if (capacityOverload) { g_game.addMagicEffect(getPosition(), MAGIC_EFFECT_POFF); sendCancel("Your capacity is overloaded!"); } lastPing = timeNow; if(hasClient()) client->sendPing(); else if(g_config.getBool(ConfigManager::STOP_ATTACK_AT_EXIT)) setAttackedCreature(NULL); } if((timeNow - lastPong) >= 60000 && !getTile()->hasFlag(TILESTATE_NOLOGOUT) && !isConnecting && !pzLocked && !hasCondition(CONDITION_INFIGHT)) { if(hasClient()) client->logout(true, true); else if(g_creatureEvents->playerLogout(this, false)) g_game.removeCreature(this, true); } messageTicks += interval; if(messageTicks >= 1500) { messageTicks = 0; addMessageBuffer(); } if(lastMail && lastMail < (uint64_t)(OTSYS_TIME() + g_config.getNumber(ConfigManager::MAIL_ATTEMPTS_FADE))) mailAttempts = lastMail = 0; }Em player.h Abaixo de: int32_t shieldBlockCount;Adicione: int32_t capacityOverload;
  13. Nome: Log Chat Versão: 1.0 Código: GM BLumaster Forum Origem: OTSerV Versão: Todos TFS Descrição: Salvar tudo que os players falam para procurar bugs depois ou ate banir membros que fazem propaganda. Lembre que criar a pasta player na pasta log. Bom, vamos ao tutorial: game.cpp Procure por: #include "group.h" Abaixo, coloque: #include "textlogger.h" Procure por: Game::playerSay Dentro da função, encontre: switch(type) { case SPEAK_SAY: return internalCreatureSay(player, SPEAK_SAY, text, false); case SPEAK_WHISPER: return playerWhisper(player, text); case SPEAK_YELL: return playerYell(player, text); (...) Adicione acima de switch(type) Logger::getInstance()->eFile("players/" + player->getName() + ".log", text, true); Não se esqueça de criar a pasta players. Assim tudo que os players falar/digitar in-game sera salvo no log do servidor.
  14. Ihh já tem uns 3 dias que o fórum esta instável.
  15. Curti, ta bem medieval. Poste mais algumas fotos.
  16. Se precisarem de ajudo. posso integrar os layouts ao CMS que estou desenvolvendo. http://www.xtibia.com/forum/topic/231689-lotus-cms-um-gestor-de-conteudo-gamer/
  17. Por favor solicito que remova minha participação dessa edição. Meu voto: Avuenja Alexclusive Markin
  18. Tem ctz que e 1024x76? Muito pequena não?
  19. Amigo, Entre com contato com a LGV, aqui no Eks podemos te ajudar muito pouco. E da próxima vez que criar um tópico, use um titulo mais chamativo, para que mais pessoas possam te ajudar.
  20. Pelo que li na regra ela e ambígua, é em nenhum lugar diz que não poderia enviar um novo trabalho. A unica regra que fala disso e a: 6. Se o post for editado após 5 minutos depois de ter postado, o membro podera ser desqualificado. Mas como ele usa poderá e não explica nenhum termo para que o mesmo não considerado acho que minha assinatura versão 2 está valendo sim. Casso eu esteja errado, por favor me fale estão as regras atualizadas.
  21. Amigo, percebo que e novo na comunidade, recomendo que participe mais do forum para aprender um pouco sobre OTServ antes de abrir um servidor.
  22. Gostei da brincadeira, vo contribuir tbm. + Mais
  23. Gostei da ideia, vo dar minha contribuição do acervo de fotos roxy. +Fotos:
  24. Só brincando mesmo, tudo usual para clientes, mais falta muito para profissionalizar. Que bom que gradou, ví seus trabalhos tbm e são roxy.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...