Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''c++''.



Mais opções de pesquisa

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Recursos
    • Suporte
    • Pedidos
    • Downloads
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Categorias

Não há resultados


Encontrar resultados em...

Encontrar resultados que contenham...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Sou

Encontrado 32 registros

  1. underewarr

    Sistema Mundos

    Em ioaccountsql.cpp nós mudamos. Procure por . Account IOAccountSQL::loadAccount(uint32_t accno) E Substitua toda a função por essa (OBS LEMBRE-SE DE CONFIGURAR OS MUNDOS.). Account IOAccountSQL::loadAccount(uint32_t accno) { Account acc; Database* mysql = Database::instance(); DBQuery query; DBResult result; query << "SELECT id,password FROM accounts WHERE id=" << accno; if(mysql->connect() && mysql->storeQuery(query, result)){ acc.accnumber = result.getDataInt("id"); acc.password = result.getDataString("password"); #ifndef __ROGIER_MULTIWORLD__ query << "SELECT name FROM players WHERE account_id=" << accno; #else //__ROGIER_MULTIWORLD__ query << "SELECT name,worldid FROM players WHERE account_id=" << accno; #endif //__ROGIER_MULTIWORLD__ if(mysql->storeQuery(query, result)){ for(uint32_t i = 0; i < result.getNumRows(); ++i){ std::string ss = result.getDataString("name", i); #ifndef __ROGIER_MULTIWORLD__ acc.charList.push_back(ss.c_str()); #else //__ROGIER_MULTIWORLD__ int worldid = result.getDataInt("worldid", i); query.reset(); result.clear(); query << "SELECT * FROM worlds WHERE worldid=" << worldid; mysql->storeQuery(query, result); struct CharInfo info; info.worldName = result.getDataString("worldname", i); info.worldIp = result.getDataString("worldip", i); info.worldPort = result.getDataInt("worldport", i); acc.charList[ss] = info; #endif //__ROGIER_MULTIWORLD__ } #ifndef __ROGIER_MULTIWORLD__ acc.charList.sort(); #endif //__ROGIER_MULTIWORLD__ } } return acc; } Agora no protocollogin.cpp na função parsefirstpacket nós mudamos. Procure por. std::list<std::string>::iterator it; for(it = account.charList.begin(); it != account.charList.end(); it++){ output->AddString((*it)); output->AddString(g_config.getString(ConfigManager::WORLD _NAME)); output->AddU32(serverip); output->AddU16(g_config.getNumber(ConfigManager::PORT)) ; } Substitua por. #ifndef __ROGIER_MULTIWORLD__ std::list<std::string>::iterator it; for(it = account.charList.begin(); it != account.charList.end(); it++){ output->AddString((*it)); output->AddString(g_config.getString(ConfigManager::WORLD _NAME)); output->AddU32(serverip); output->AddU16(g_config.getNumber(ConfigManager::PORT)) ; } #else //__ROGIER_MULTIWORLD__ std::map<std::string, CharInfo>::iterator it; for(it = account.charList.begin(); it != account.charList.end(); it++){ output->AddString(it->first); output->AddString(it->second.worldName); output->AddU32(inet_addr(it->second.worldIp.c_str())); output->AddU16(it->second.worldPort); } #endif //__ROGIER_MULTIWORLD__ Agora Em account.h. procure. class Account adicione logo a baixo. #ifdef __ROGIER_MULTIWORLD__ #include <map> struct CharInfo { std::string worldIp; std::string worldName; short worldPort; }; #endif //__ROGIER_MULTIWORLD__ Novamente em account.h nós mudamos: Procure std::list<std::string> charList; Substitua #ifdef __ROGIER_MULTIWORLD__ std::list<std::string> charList; #else //__ROGIER_MULTIWORLD__ std::map<std::string, CharInfo> charList; #endif //__ROGIER_MULTIWORLD__ Adicione como parametro o seguinte seguimento para que a compilação encontre todas as alterações a cima -D__ROGIER_MULTIWORLD_ (Igual o mysql/sqlite,console,gui é adicionado) E AGORA OQUE EU FAÇO?
  2. underewarr

    Global save + Restarter

    Um código simples para fazer o global server save, e logo após reiniciar o servidor. Windows Adicione no Config.Lua Esta feito agora basta compilar um programa chamado autorun.exe com o código a baixo. Após a compilação coloque o exe na pasta do servidor e inicie. Linux: Creditos: Underewar
  3. #Introdução Bom hoje estarei trazendo aqui o sistema de Ping feito pelo Mock, com uma pequena adaptação feita por mim para funcionar em TFS 0.4(talvez podendo funcionar em outras) Pois o que ele disponibilizou foi apenas para TFS 0.3.6 e nem foi muito utilizado pela comunidade. Muitos servidores daqui para download tem script no talk mas a lib está totalmente errada e não tem o code nas sources. Esse sistema tem varias utilizades, podendo usar o comando !ping para verificar seu ms ou até mesmo você por para kikar jogadores com ms muito alto... Se você não sabe o cliente já tem um sistema de ping, e getOtsystime é como os.time () + os.clock (), você tem ano, mês, dia, hora, minutos, segundos, milisegundos... Enfim chega de enrolação e vamos lá! Code para TFS 0.4 e OTX: Code para TFS 0.3.6 LIB: Prontinho, agora seu servidor está pronto para utilizar as funções de Ping. Seja criativo! Ahh você é daqueles que quer tudo na mão né? Aqui vai um talkactions para ver o ping. Em talkactions/scripts crie um arquivo chamado playerping.lua, cole isto dentro: -- Script by Yan Liima(Night for xtibia.com) function onSay(cid, words, param, channel) local ms = ping.CheckPing(cid) doPlayerSendTextMessage(cid,22,"Ping aproximado --> ["..ms.."].") return true end Em talkactions.xml <talkaction words="!ping" event="script" value="playerping.lua"/>
  4. DarkWore

    [C++] Attack Speed

    Hoje venho trazer um conteúdo ao xt gostaria de lembrar que esse código não é autoral meu então vamos la. Em alguns servidores derivados o Skill Fist Fighting influencia no Attack Speed do Player, Então .... Vá no arquivo player.cpp procure por: uint32_t PlayergetAttackSpeed() const Altere por: uint32_t PlayergetAttackSpeed() const{ int32_t SpeedAttack; SpeedAttack = vocation->getAttackSpeed() - (getSkill(SKILL_FIST, SKILL_LEVEL) * 10); if (SpeedAttack < 500) { return 500; } else { return (uint32_t) SpeedAttack; }} Explicação sobre oque á formula faz: Ele irá verifica o Attack Speed padrão no Vocations.xml e irá verifica o Skill Fist do Player e retornará a velocidade, caso a velocidade retorne menor que 500 ele sempre limitará a 500ms para que não haja erros. Créditos Emerson Henrique (100% Por Desenvolver) DarkWore (Por trazer ao Xtibia)
  5. Estamos contratando freelancer para adicionar na source a função doSetMonsterGym e fazer o sistema de gym funcionar. Interessados mandar PM.
  6. O Pessoal esta trabalhando com o DxP utilizando o velho dev-cpp, então resolvi postar o codeblocks pronto com todas as libs. Porque utilizar o codeblocks? 1- Ele compila em uma velocidade superior. 2- Ele tem suporte a 32-64 bits. 3- O ctrl+f é mais eficiente. 4- Não vou listar tudo cabe a você conferir. Download Caso utilizar o compilador no dxp precisa fazer a seguinte alteração: Algum voluntario a fazer o scan? favorzin
  7. Olá Membros do Xtibia tudo na paz? Creio que sim hoje eu venho postar á função OnWalk eu procurei bastante por ela na época em que eu usava á versão 0.3.6/0.4 e nunca consegui encontrar na época ela era necessária para o TV System do PDA Funcionar e quando eu adaptava uma source sempre faltava á função, bom os problemas acabaram a partir de hoje, la vai á função ae logo abaixo. Vá no arquivo creatureevent.cpp e procure por: else if(tmpStr == "spawn") m_type = CREATURE_EVENT_SPAWN; Logo abaixo coloque: else if(tmpStr == "walk") m_type = CREATURE_EVENT_WALK; Depois procure por: case CREATURE_EVENT_SPAWN: return "onSpawn"; Logo abaixo coloque: case CREATURE_EVENT_WALK: return "onWalk"; Depois procure por: case CREATURE_EVENT_SPAWN: return "cid"; Logo abaixo coloque: case CREATURE_EVENT_WALK: return "cid, fromPosition, toPosition"; Depois procure por: uint32_t CreatureEvent::executeOnSpawn(Creature* creature) { //onSpawn(cid) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ std::stringstream desc; desc << creature->getName(); env->setEvent(desc.str()); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); bool result = m_interface->callFunction(1); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeCast] Call stack overflow." << std::endl; return 0; } } Dê uma quebra de linha e logo abaixo coloque: uint32_t CreatureEvent::executeWalk(Creature* creature, const Position& fromPosition, const Position& toPosition) { //onWalk(cid, old, current) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; env->streamPosition(scriptstream, "fromPosition", fromPosition, 0); env->streamPosition(scriptstream, "toPosition", toPosition, 0); scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[30]; sprintf(desc, "%s", creature->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); bool result = m_interface->callFunction(3); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeMove] Call stack overflow." << std::endl; return 0; } } Agora vá no arquivo creatureevent.h procure por: CREATURE_EVENT_SPAWN, Logo abaixo coloque: CREATURE_EVENT_WALK, Depois procure por: uint32_t executeOnSpawn(Creature* creature); Logo abaixo coloque: uint32_t executeWalk(Creature* creature, const Position& fromPosition, const Position& toPosition); Pronto Agora basta compilar e Pronto. Espero ter Ajudado qualquer dúvida estarei respondendo, Abraço. Créditos: Darkhaos (De outro fórum)
  8. tcbrj

    PROCURO PRAGRAMADOR

    Saudações. Estou aqui a procura de programadores que entendam a linguagem c++ para fazer uma parceria comigo na qual certamente colherá frutos ao longo prazo. De preferência alguém que tenha tempo disponível para levar a sério o projeto. Caso tenha interesse, entre em contato pelo e-mail logo abaixo. Contato: [email protected]
  9. Bom, vou ser o mais direto possível: Estou tentando adicionar um novo slot no servidor, de versão 8.54 e TFS 0.4, mudei nas sources e já as compilei com sucesso, segue abaixo no spoiler as alterações feitas na mesma: items.h #define ITEMS 13000 #define SLOTP_WHEREEVER 0xFFFFFFFF #define SLOTP_HEAD 1 << 0 #define SLOTP_NECKLACE 1 << 1 #define SLOTP_BACKPACK 1 << 2 #define SLOTP_ARMOR 1 << 3 #define SLOTP_RIGHT 1 << 4 #define SLOTP_LEFT 1 << 5 #define SLOTP_LEGS 1 << 6 #define SLOTP_FEET 1 << 7 #define SLOTP_RING 1 << 8 #define SLOTP_AMMO 1 << 9 #define SLOTP_DEPOT 1 << 10 #define SLOTP_TWO_HAND 1 << 11 #define SLOTP_EYE 1 << 15 #define SLOTP_HAND SLOTP_LEFT | SLOTP_RIGHT items.cpp else if(tmpStrValue == "eye") { it.slotPosition |= SLOTP_EYE; it.wieldPosition = SLOT_EYE; } movement.cpp else if(tmpStrValue == "eye") slot = SLOTP_EYE; case SLOT_EYE: slotp = SLOTP_EYE; break; player.cpp if((item->getSlotPosition() & SLOTP_HEAD) || (item->getSlotPosition() & SLOTP_NECKLACE) || (item->getSlotPosition() & SLOTP_BACKPACK) || (item->getSlotPosition() & SLOTP_ARMOR) || (item->getSlotPosition() & SLOTP_LEGS) || (item->getSlotPosition() & SLOTP_FEET) || (item->getSlotPosition() & SLOTP_RING) || (item->getSlotPosition() & SLOTP_EYE)) ret = RET_CANNOTBEDRESSED; case SLOT_EYE: if(item->getSlotPosition() & SLOTP_EYE) ret = RET_NOERROR; break; creature.h enum slots_t { SLOT_PRE_FIRST = 0, SLOT_WHEREEVER = SLOT_PRE_FIRST, SLOT_FIRST = 1, SLOT_HEAD = SLOT_FIRST, SLOT_NECKLACE = 2, SLOT_BACKPACK = 3, SLOT_ARMOR = 4, SLOT_RIGHT = 5, SLOT_LEFT = 6, SLOT_LEGS = 7, SLOT_FEET = 8, SLOT_RING = 9, SLOT_AMMO = 10, SLOT_DEPOT = 11, SLOT_LAST = SLOT_DEPOT, SLOT_HAND = 12, SLOT_EYE = 15, SLOT_TWO_HAND = SLOT_HAND }; enums.h enum ConditionId_t { CONDITIONID_DEFAULT = -1, CONDITIONID_COMBAT = 0, CONDITIONID_HEAD, CONDITIONID_NECKLACE, CONDITIONID_BACKPACK, CONDITIONID_ARMOR, CONDITIONID_RIGHT, CONDITIONID_LEFT, CONDITIONID_LEGS, CONDITIONID_FEET, CONDITIONID_RING, CONDITIONID_EYE, CONDITIONID_AMMO, CONDITIONID_OUTFIT }; Após as sources, o único local em que encontrei nos scripts em lua, foi no 'data/lib/000-constant.lua' e deixei assim: CONST_SLOT_FIRST = 1 CONST_SLOT_HEAD = CONST_SLOT_FIRST CONST_SLOT_NECKLACE = 2 CONST_SLOT_BACKPACK = 3 CONST_SLOT_ARMOR = 4 CONST_SLOT_RIGHT = 5 CONST_SLOT_LEFT = 6 CONST_SLOT_LEGS = 7 CONST_SLOT_FEET = 8 CONST_SLOT_RING = 9 CONST_SLOT_AMMO = 10 CONST_SLOT_EYE = 15 CONST_SLOT_LAST = CONST_SLOT_AMMO Deixei um item no 'data/items/items.xml' com o slotType="eye" que foi criado, e fiz as seguintes alterações no OTClient: modules/game_inventory/inventory.lua InventorySlotStyles = { [InventorySlotHead] = "HeadSlot", [InventorySlotNeck] = "NeckSlot", [InventorySlotBack] = "BackSlot", [InventorySlotBody] = "BodySlot", [InventorySlotRight] = "RightSlot", [InventorySlotLeft] = "LeftSlot", [InventorySlotLeg] = "LegSlot", [InventorySlotFeet] = "FeetSlot", [InventorySlotFinger] = "FingerSlot", [InventorySlotAmmo] = "AmmoSlot", [InventorySlotEye] = "EyeSlot" } modules/game_inventory/inventory.otui EyeSlot < InventoryItem id: slot15 image-source: /images/game/slots/eye &position: {x=65535, y=14, z=0} e MiniWindow id: inventoryWindow !text: tr('Inventory') icon: /images/topbuttons/inventory height: 175 @onClose: modules.game_inventory.onMiniWindowClose() &save: true MiniWindowContents HeadSlot anchors.top: parent.top anchors.horizontalCenter: parent.horizontalCenter margin-top: 3 BodySlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 LegSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 FeetSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 NeckSlot anchors.top: slot1.top anchors.right: slot1.left margin-top: 10 margin-right: 5 LeftSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 FingerSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 BackSlot anchors.top: slot1.top anchors.left: slot1.right margin-top: 10 margin-left: 5 RightSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 AmmoSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 EyeSlot anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter margin-top: 3 PurseButton margin-top: 3 anchors.top: prev.bottom anchors.horizontalCenter: prev.horizontalCenter modules/gamelib/player.lua InventorySlotOther = 0 InventorySlotHead = 1 InventorySlotNeck = 2 InventorySlotBack = 3 InventorySlotBody = 4 InventorySlotRight = 5 InventorySlotLeft = 6 InventorySlotLeg = 7 InventorySlotFeet = 8 InventorySlotFinger = 9 InventorySlotAmmo = 10 InventorySlotPurse = 11 InventorySlotEye = 15 InventorySlotFirst = 1 InventorySlotLast = 10 Com todas estas alterações, o que foi feito: O slot foi adicionado com sucesso no OTClient, aparecendo sem erros, com imagem e posicionado; O console não encontrou erro ao debugar o items.xml (testei um tipo aleatório, e dá erro o erro padrão das sources, então o tipo "eye" está correto nas sources); Dei /i em um item do tipo "eye" pra ver se o mesmo iria para o slot, mesmo caso não existisse graficamente, ele deveria ficar salvo nos dados do personagem no banco de dados, e isto não ocorreu, logo o problema está entre as sources e o client; Enfim, nas sources o tipo "eye" foi criado, mas ainda não é reconhecido verdadeiramente, espero que alguém possa me ajudar, segue em anexo as sources e todos os arquivos que citei ter editado: help.rar
  10. Fala galera tudo bem? Minha dúvida é o seguinte estou querendo fazer um projeto porem tenho uma dúvida como essas listas www.otlist.net conseguem puxar os dados dos servidor OT, tipo exemplo tenho um OT e cadastro la na lista ai aparece players online essas coisas na lista alguém sabe que arquivo eles leem? Alguém me da uma luz valeu desde já
  11. • Olá venho por meio deste tópico procurar pessoas para me ajudar na formação de um Servidor de Dbz Low Rate, Mapa não muito grande no inicio, com intuito de não só ser Level-Up ou PkTeam, e sim RPG também sempre fui fã de jogos RPG e o que sempre me chamou atenção no Tibia é a sua capacidade de entreter. Quero pessoas que saibam trabalhar em equipe e tenha uma fácil convivência, tenha a noção ao ingressar que isso é uma responsabilidade a partir do momento que você decide entrar, espero que entenda que ideias novas são bem vindas e todo trabalho já é um passo a diante. Vou deixar como base, um "aperitivo" de como funcionaria o Servidor, mais detalhado que o Texto e sem blablabla. Exp rate: 30x (Inicial) Skill Rate: Low! Discutível para a equipe. ML Rate: Low! Discutível para a equipe. Loot Rate: Low! Discutível para a equipe. Versão: 8.60 (Incluindo o que há novo, e criando cada vez mais algo novo.) Dedicado 24/7 Online (Servidor no Brasil ou Fora, será decido entre a Equipe.) Mapa Atualizado Sempre (E acada update com mais novidades e RPG.) • Novamente, isso sera apenas um aperitivo para vocês, resumindo tudo, o servidor sera Low rate, nada de item VIP, isso é um saco, nada de itens no shop apenas o basico, tenho algumas coisas em mente para ser diferente de todos os outros Servidores, e dar algo ao Publico exclusivo e único. Há, tudo saira do meu bolso, não precisa pensar "ele vai pedir dinheiro pra equipe" Preciso de pessoas com tempo livre, boa vontade e criatividade! Quero fazer um servidor que possa entreter e prender os jogadores de TODOS OS GOSTOS, Os que gostam do bom e velho RPG, com quests contendo histórias, e fazendo sentido! Sem esquecer do bom e velho PVP! Atualizações constantes mesmo depois de pronto, mas como não adianta só projetar e projetar, também procuro pessoas com qualificações especificas que tenham a condição de me ajudar, no caso Mappers , Sprites , Designer de Marketing, também Programadores. Caso Você queira se juntar a uma boa equipe e ainda estiver interessado em colaborar para a criação de um servidor Comprometido ao entretenimento de todos, preencha o formulário abaixo; Nome: Idade: Cidade/Estado: As suas melhores Funções: O faz você de diferente do outro que ira se candidatar? Skype: (Caso tenha) Envie por Mensagem Privada. Obrigado!
  12. Para dar uma força na sessão de programação vo lotar de código isso aqui, bom la vamos nós hoje é um fly system para tfs 1.2, sem gambiarras. Vá no arquivo creaturevent.cpp procure por: } else if (tmpStr == "extendedopcode") { type = CREATURE_EVENT_EXTENDED_OPCODE; Coloque isso abaixo: } else if (tmpStr == "move") { type = CREATURE_EVENT_MOVE; Depois procure por: case CREATURE_EVENT_EXTENDED_OPCODE: return "onExtendedOpcode"; Coloque isso abaixo: case CREATURE_EVENT_MOVE: return "onMove"; Depois procure por: void CreatureEvent::executeExtendedOpcode(Player* player, uint8_t opcode, const std::string& buffer) No Final dessa função coloque isso abaixo: bool CreatureEvent::executeOnMove(Player* player, const Position& fromPosition, const Position& toPosition) { //onMove(player, frompos, topos) if (!scriptInterface->reserveScriptEnv()) { std::cout << "[Error - CreatureEvent::executeOnMove] Call stack overflow" << std::endl; return false; } ScriptEnvironment* env = scriptInterface->getScriptEnv(); env->setScriptId(scriptId, scriptInterface); lua_State* L = scriptInterface->getLuaState(); scriptInterface->pushFunction(scriptId); LuaScriptInterface::pushUserdata(L, player); LuaScriptInterface::setMetatable(L, -1, "Player"); LuaScriptInterface::pushPosition(L, fromPosition); LuaScriptInterface::pushPosition(L, toPosition); return scriptInterface->callFunction(3); } Vá no arquivo creatureevent.h procure por: CREATURE_EVENT_EXTENDED_OPCODE, // otclient additional network opcodes Coloque isso abaixo: CREATURE_EVENT_MOVE, Ainda no arquivo creatureevent.h procure por: void executeExtendedOpcode(Player* player, uint8_t opcode, const std::string& buffer); Coloque isso abaixo: bool executeOnMove(Player* player, const Position& fromPosition, const Position& toPosition); Vá no arquivo events.cpp procure por: playerOnGainSkillTries = -1; Coloque isso abaixo: playerOnToggleMount = -1; Ainda no arquivo events.cpp procure por: } else if (methodName == "onGainSkillTries") { playerOnGainSkillTries = event; Coloque isso abaixo: } else if (methodName == "onToggleMount") { playerOnToggleMount = event; Ainda no arquivo events.cpp procure por: void Events::eventPlayerOnGainSkillTries(Player* player, skills_t skill, uint64_t& tries) No Final dessa função coloque isso abaixo: bool Events::eventPlayerOnToggleMount(Player* player, uint8_t mountid, bool mounting) { // Player:onToggleMount(mountid, mounting) if (playerOnToggleMount == -1) { return true; } if (!scriptInterface.reserveScriptEnv()) { std::cout << "[Error - Events::eventPlayerOnToggleMount] Call stack overflow" << std::endl; return false; } ScriptEnvironment* env = scriptInterface.getScriptEnv(); env->setScriptId(playerOnToggleMount, &scriptInterface); lua_State* L = scriptInterface.getLuaState(); scriptInterface.pushFunction(playerOnToggleMount); LuaScriptInterface::pushUserdata<Player>(L, player); LuaScriptInterface::setMetatable(L, -1, "Player"); lua_pushnumber(L, mountid); LuaScriptInterface::pushBoolean(L, mounting); return scriptInterface.callFunction(3); } Vá no arquivo events.h procure por: void eventPlayerOnGainSkillTries(Player* player, skills_t skill, uint64_t& tries); Coloque isso abaixo: bool eventPlayerOnToggleMount(Player* player, uint8_t mountid, bool mounting); Ainda no arquivo events.h procure por: int32_t playerOnGainSkillTries; Coloque isso abaixo: int32_t playerOnToggleMount; Vá no arquivo game.cpp procure por: player->resetIdleTime(); Embaixo de uma quebra de linha e coloque isso abaixo: const Position& currentPos = player->getPosition(); Position destPos = getNextPosition(direction, currentPos); const CreatureEventList& moveEvents = player->getCreatureEvents(CREATURE_EVENT_MOVE); for (CreatureEvent* moveEvent : moveEvents) { if (!moveEvent->executeOnMove(player, currentPos, destPos)) { player->sendCancelWalk(); return; } } Vá no arquivo player.cpp procure por: bool Player::toggleMount(bool mount) return false; } Coloque isso abaixo: if (!g_events->eventPlayerOnToggleMount(this, currentMountId, mount)) { return false; } Ainda no arquivo player.cpp procure por: bool Player::toggleMount(bool mount) return false; } Coloque isso abaixo: uint8_t currentMountId = getCurrentMount(); if (!g_events->eventPlayerOnToggleMount(this, currentMountId, mount)) { return false; } Bom aqui acabamos o sistema na source vamos para á parte de programação lua no datapack. Instale essa Lib no seu servidor: FlyingMounts = {65} -- Mounts in this table are going to force fly when mounting/dismounting. PvpRestrictions = "high" -- You can set 3 different types of pvp restrictions -- None: ---- Nothing will be done, the players can attack each other anytime while flying. -- Medium: -- The players can attack each other while flying, but they cant start flying if they already have pz and they will have a huge interval (configurable) to go up and down. The interval is only applied to the people with PZ locked. -- High: ---- Players can't attack each other while flying at all and they cant start flying as in medium. This could be abused to escape from pks as you can't be attacked by them while flying. ChangeFloorInterval = 2 -- seconds ChangeFloorIntervalPZ = 10 -- seconds, only in medium restriction. function Position:createFlyFloor() local toTile = Tile(self) if not toTile or not toTile:getItems() or not toTile:getGround() then doAreaCombatHealth(0, 0, self, 0, 0, 0, CONST_ME_NONE) Game.createItem(460, 1, self) end end function Tile:hasValidGround() local ground = self:getGround() local nilitem = self:getItemById(460) if ground and not nilitem then return true end return false end function Player:activateFly() self:setStorageValue(16400, 1) self:registerEvent("FlyEvent") return true end function Player:deactivateFly() local can, floor = self:canDeactivateFly() local pos = self:getPosition() if can then local curtile = Tile(pos) local itemfloor = curtile:getItemById(460) if itemfloor then itemfloor:remove() end self:setStorageValue(16400, -1) self:unregisterEvent("FlyEvent") if pos.z ~= floor then pos.z = floor self:teleportTo(pos) pos:sendMagicEffect(CONST_ME_TELEPORT) end end return can end function Player:isFlying() return self:getStorageValue(16400) == 1 end function Player:canDeactivateFly() local pos = self:getPosition() for z = pos.z, 15 do local tmp = Tile(pos.x, pos.y, z) if tmp and tmp:hasValidGround() then if self:canFlyDown(z) then return true, z else return false end end end return false end function Player:canFlyUp() local pos = self:getPosition() local tmp = Tile(pos.x, pos.y, pos.z-1) if tmp and tmp:hasValidGround() then return false end return true end function Player:canFlyDown(floor) local pos = self:getPosition() local tmp = Tile(pos) if floor and floor == pos.z then return true end if tmp:hasValidGround() then return false end tmp = Tile(pos.x, pos.y, floor or pos.z+1) if tmp and (tmp:getHouse() or tmp:hasFlag(TILESTATE_PROTECTIONZONE) or tmp:hasFlag(TILESTATE_FLOORCHANGE) or tmp:hasFlag(TILESTATE_BLOCKSOLID)) then return false end return true end function Player:flyUp() if self:isFlying() then if self:canFlyUp() then local pos = self:getPosition() local tile = Tile(pos) local itemfloor = tile:getItemById(460) if itemfloor then itemfloor:remove() end pos.z = pos.z-1 pos:createFlyFloor() self:teleportTo(pos) pos:sendMagicEffect(CONST_ME_TELEPORT) return true end return false else self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You are not flying.") end end function Player:flyDown() if self:isFlying() then if self:canFlyDown() then local pos = self:getPosition() local tile = Tile(pos) local itemfloor = tile:getItemById(460) if itemfloor then itemfloor:remove() end pos.z = pos.z+1 pos:createFlyFloor() self:teleportTo(pos) pos:sendMagicEffect(CONST_ME_TELEPORT) return true end return false else self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You are not flying.") end end Agora em creaturescripts instale: -- <event type="move" name="FlyEvent" script="flyevent.lua" /> function onMove(player, fromPosition, toPosition) if PvpRestrictions:lower() == "high" and player:isPzLocked() then return true end if player:isFlying() then local fromTile = Tile(fromPosition) local fromItem = fromTile:getItemById(460) if fromItem then fromItem:remove() end toPosition:createFlyFloor() end return true end Agora em talkactions instale: -- <talkaction words="!down" script="fly.lua" /> -- <talkaction words="!up" script="fly.lua" /> local exhauststorage = 16500 function onSay(player, words) if not player:isFlying() then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You are not flying.") return false end if player:isPzLocked() and PvpRestrictions:lower() == "high" then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You cannot use this command in fight.") return false end local last = player:getStorageValue(exhauststorage) local interval = ChangeFloorInterval if PvpRestrictions:lower() == "medium" and player:isPzLocked() then interval = ChangeFloorIntervalPZ end if last+interval > os.time() then player:sendCancelMessage(RETURNVALUE_YOUAREEXHAUSTED) return false end if words == "!up" then local ret = player:flyUp() if ret == false then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You cannot fly up.") else player:setStorageValue(exhauststorage, os.time()) end elseif words == "!down" then local ret = player:flyDown() if ret == false then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You cannot fly down.") else player:setStorageValue(exhauststorage, os.time()) end end return false end Agora em data/events/events.xml troque: <event class="Creature" method="onTargetCombat" enabled="0" /> Por: <event class="Player" method="onToggleMount" enabled="1" /> Agora em events/scripts/creature.lua troque á função onTargetCombat por: function Creature:onTargetCombat(target) if self and target then if PvpRestrictions:lower() == "high" then if self:isPlayer() and self:isFlying() then local pos = self:getPosition() local tile = Tile(pos) if tile:getItemById(460) then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end if target:isPlayer() and target:isFlying() then local pos = target:getPosition() local tile = Tile(pos) if tile:getItemById(460) then return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER end end end end return true end Agora em events/scripts/player.lua adicione á função: function Player:onToggleMount(mountid, mount) if mount then if isInArray(FlyingMounts, mountid) then if isInArray({"high", "medium"}, PvpRestrictions:lower()) and self:isPzLocked() then self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You cannot start flying now.") return false end self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You are now flying.") self:activateFly() end elseif self:isFlying() then local ret = self:deactivateFly() if ret then self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You are no longer flying.") else self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You can't deactivate fly now.") end return ret end return true end Agora coloque em logout.lua encima da função onLogout(player) : if player:isFlying() then player:sendCancelMessage("You cannot logout while flying.") return false end Pronto só Compilar á source e utilizar o sistema. Créditos DarkWore (5% Por trazer ao Xtibia) Mkalo (95% Por Desenvolver)
  13. DarkWore

    1# Programando - IDE'S

    Bom Dia, Boa Tarde e Boa Noite, Dependendo do Horário que estão vendo esse tópico, hoje eu venho trazer conteúdo para o fórum é algo que poderá ajudar á muitos que está começando no ramo de ots e querem se especializar em uma área mais á fundo e ampliar seus horizontes, bom vamos la estarei deixando umas ferramentas que podem ser útil para vocês. IDE/Compiladores: Dev-C++ (Distribuições para Windows e Linux) Falcon C++ (Distribuições para Windows e Linux) Visual Studio (2017) (Distribuições apenas para Windows) CodeBlocks (Distribuições para Windows e Linux) Eclipse CDT (Distribuições para Windows e Linux) Borland C++ (Distribuições para Windows e Linux) NetBeans (Distribuições para Windows e Linux) ReSharper C++ (Distribuições para Windows e Linux) CLion (Distribuições para Windows e Linux) SciTE (Distribuições para Windows e Linux) PS: Existem Milhares, essas são as que já passei durante o período em que Codo e Programo em C/C++. Como Escolher á Melhor IDE para Utilizar? Sem Dúvidas essa é uma Escolha Difícil pois no início tudo é difícil eu recomendo se você quer uma IDE que seja leve, Use o Falcon C++ mais se você quer uma IDE que seja boa e um pouco mais pesada utilize o VS 2017 porém todas as IDE's citadas aqui são boas e não são pesadas á um nível que seu computador consuma mais de 80% da RAM, rs. Bom é isso esse foi meu primeiro tutorial, espero que tenham gostado, se quiser mais conteúdo do tipo deixe seu Gostei (Famoso REP+) e seu Feedback é de muita importância para mim. Abraço do Padrinho.
  14. Hoje venho trazer um conteúdo ao xt gostaria de lembrar que esse código não é autoral meu então vamos la. Vá no arquivo spawn.cpp procure por: if(findPlayer(sb.pos)) { sb.lastSpawn = OTSYS_TIME(); continue; } Deixe Comentado assim: /*if(findPlayer(sb.pos)) { sb.lastSpawn = OTSYS_TIME(); continue; }*/ Explicação sobre oque faz: Ele possibilita que o player fique no respawn do monstro. Agora salva, e recompila sua source. Créditos DarkWore (5% Por trazer ao Xtibia) Leko/Alexy Brocanello (95% Por Desenvolver)
  15. Desculpa se é área errada Olá pessoal, estou procurando por alguém que saiba fazer sistemas relativamente simples, alguns parecidos com servers de Pokémon e saiba fazer mods para o OTC. Os serviços terão remuneração, então me mande PM com a média que você costuma cobrar por sistema/complexidade. Quando feito o sistema, ele tem que ser explicado como funciona e quais os parâmetros que poderei modificar. TFS 0.4 8.6x Grato!
  16. Boa tarde!! Alguém poderia me salvar? Eu não entendo muito dessas versões mais novas de OTServ, e hoje em dia as versões mais novas e as "melhores" nunca vem compiladas. Estou acostumado a baixar e executar! Tentei seguir alguns passa-a-passo aqui no fórum mesmo e até mesmo em outros, mais não obtive sucesso! Acredito que varie muito dependendo do servidor que deseja compilar! Alguém poderia compilar o servidor abaixo, ou me ensinar? Agradecido!!
  17. DarkWore

    [TFS 1.2] Race System

    Hoje venho postar o Race System para TFS 1.2 que desenvolvi um tempo atrás para um amigo e hoje venho postar ele aqui talvez possa ajudar os que estão começando. Vá no arquivo const.h procure por: enum TextColor_t : uint8_t { Logo abaixo procure por: TEXTCOLOR_FAIRY = 190, Coloque isso abaixo: TEXTCOLOR_WATER = 11, TEXTCOLOR_NORMAL = 128, TEXTCOLOR_FIRE2 = 180, TEXTCOLOR_FIGHTING = 114, TEXTCOLOR_FLYING = 131, TEXTCOLOR_GRASS = 66, TEXTCOLOR_POISON = 147, TEXTCOLOR_ELECTRIC = 210, TEXTCOLOR_GROUND = 126, TEXTCOLOR_PSYCHIC = 149, TEXTCOLOR_ROCK = 120, TEXTCOLOR_STEEL = 120, TEXTCOLOR_ICE = 35, TEXTCOLOR_BUG = 18, TEXTCOLOR_DRAGON = 220, TEXTCOLOR_GHOST = 219, TEXTCOLOR_DARK = 219, Agora vá no arquivo enums.h procure por: enum RaceType_t : uint8_t { Logo abaixo procure por: RACE_ENERGY, Coloque isso abaixo: RACE_WATER = 6, RACE_NORMAL = 7, RACE_FIRE2 = 8, RACE_FIGHTING = 9, RACE_FLYING = 10, RACE_GRASS = 11, RACE_POISON = 12, RACE_ELECTRIC = 13, RACE_GROUND = 14, RACE_PSYCHIC = 15, RACE_ROCK = 16, RACE_ICE = 17, RACE_BUG = 18, RACE_DRAGON = 19, RACE_GHOST = 20, RACE_STEEL = 21, RACE_FAIRY = 22, RACE_DARK = 23, Agora em monsters.cpp procure por: if ((attr = monsterNode.attribute("race"))) { stdstring tmpStrValue = asLowerCaseString(attr.as_string()); uint16_t tmpInt = pugicast<uint16_t>(attr.value()); Logo abaixo procure por: } else if (tmpStrValue == "energy" || tmpInt == 5) { mType->info.race = RACE_ENERGY; Coloque isso abaixo: } else if (tmpStrValue == "water" || tmpInt == 6) { mType->info.race = RACE_WATER; } else if (tmpStrValue == "normal" || tmpInt == 7) { mType->info.race = RACE_NORMAL; } else if (tmpStrValue == "fire2" || tmpInt == 8) { mType->info.race = RACE_FIRE2; } else if (tmpStrValue == "fighting" || tmpInt == 9) { mType->info.race = RACE_FIGHTING; } else if (tmpStrValue == "flying" || tmpInt == 10) { mType->info.race = RACE_FLYING; } else if (tmpStrValue == "grass" || tmpInt == 11) { mType->info.race = RACE_GRASS; } else if (tmpStrValue == "poison" || tmpInt == 12) { mType->info.race = RACE_POISON; } else if (tmpStrValue == "electric" || tmpInt == 13) { mType->info.race = RACE_ELECTRIC; } else if (tmpStrValue == "ground" || tmpInt == 14) { mType->info.race = RACE_GROUND; } else if (tmpStrValue == "psychic" || tmpInt == 15) { mType->info.race = RACE_PSYCHIC; } else if (tmpStrValue == "rock" || tmpInt == 16) { mType->info.race = RACE_ROCK; } else if (tmpStrValue == "ice" || tmpInt == 17) { mType->info.race = RACE_ICE; } else if (tmpStrValue == "bug" || tmpInt == 18) { mType->info.race = RACE_BUG; } else if (tmpStrValue == "dragon" || tmpInt == 19) { mType->info.race = RACE_DRAGON; } else if (tmpStrValue == "ghost" || tmpInt == 20) { mType->info.race = RACE_GHOST; } else if (tmpStrValue == "fairy" || tmpInt == 21) { mType->info.race = RACE_FAIRY; } else if (tmpStrValue == "steel" || tmpInt == 22) { mType->info.race = RACE_STEEL; } else if (tmpStrValue == "dark" || tmpInt == 23) { mType->info.race = RACE_DARK; Por Fim vá em game.cpp procure por: void GamecombatGetTypeInfo(CombatType_t combatType, Creature* target, TextColor_t& color, uint8_t& effect){ switch (combatType) { case COMBAT_PHYSICALDAMAGE: { Item* splash = nullptr; switch (target->getRace()) { Logo abaixo procure por: case RACE_ENERGY: color = TEXTCOLOR_PURPLE; effect = CONST_ME_ENERGYHIT; break; Coloque isso abaixo: case RACE_WATER: color = TEXTCOLOR_WATER; effect = CONST_ME_DRAWBLOOD; break; case RACE_NORMAL: color = TEXTCOLOR_NORMAL; effect = CONST_ME_DRAWBLOOD; break; case RACE_FIRE2: color = TEXTCOLOR_FIRE2; effect = CONST_ME_DRAWBLOOD; break; case RACE_FIGHTING: color = TEXTCOLOR_FIGHTING; effect = CONST_ME_DRAWBLOOD; break; case RACE_FLYING: color = TEXTCOLOR_FLYING; effect = CONST_ME_DRAWBLOOD; break; case RACE_GRASS: color = TEXTCOLOR_GRASS; effect = CONST_ME_DRAWBLOOD; break; case RACE_POISON: color = TEXTCOLOR_POISON; effect = CONST_ME_DRAWBLOOD; break; case RACE_ELECTRIC: color = TEXTCOLOR_ELECTRIC; effect = CONST_ME_DRAWBLOOD; break; case RACE_GROUND: color = TEXTCOLOR_GROUND; effect = CONST_ME_DRAWBLOOD; break; case RACE_PSYCHIC: color = TEXTCOLOR_PSYCHIC; effect = CONST_ME_DRAWBLOOD; break; case RACE_ROCK: color = TEXTCOLOR_ROCK; effect = CONST_ME_DRAWBLOOD; break; case RACE_ICE: color = TEXTCOLOR_ICE; effect = CONST_ME_DRAWBLOOD; break; case RACE_BUG: color = TEXTCOLOR_BUG; effect = CONST_ME_DRAWBLOOD; break; case RACE_DRAGON: color = TEXTCOLOR_DRAGON; effect = CONST_ME_DRAWBLOOD; break; case RACE_GHOST: color = TEXTCOLOR_GHOST; effect = CONST_ME_DRAWBLOOD; break; case RACE_DARK: color = TEXTCOLOR_DARK; effect = CONST_ME_DRAWBLOOD; break; case RACE_FAIRY: color = TEXTCOLOR_FAIRY; effect = CONST_ME_DRAWBLOOD; break; case RACE_STEEL: color = TEXTCOLOR_STEEL; effect = CONST_ME_DRAWBLOOD; break; Pronto agora só compilar com Visual Studio e Pronto. PS: Não Autorizo postar em outro fórum, conteúdo exclusivo do xtibia se postar pedirei para o Administrador do fórum remover.
  18. Kevick

    [C++] TV SYSTEM

    TV System é um sistema que possibilita players assistirem outros jogadores pela tv em seu servidor, bom eu só irei deixar á parte dos códigos aqui vocês terão que desenvolver os scripts em lua para funcionar porém os códigos estão prontos e funcionais. em luascript.cpp adicione: ainda em luascript.cpp: agora em luascript.h adicione: agora vai em chat.cpp e adicione: depois vá em chat.h e adicione: agora em game.cpp adicione: Créditos Eu (Por postar aqui no EKZ) Lordbaxx Smix
  19. Olá xTibianos, venho hoje contribuir com meu primeiro script em C++. Sou novo na linguagem, e acredito que poderia ter ficador menor e/ou melhor. Tenho pedido bastante ajuda de alguns colegas que entendem do assunto, a quem quiser dar dicas, serão muito bem vindo, estou com os zuvido abertos. O sistema é simples, serve para que o player não perca um slot específico, ou seja, se o player morrer sem aol, por exemplo, ele pode peder todos os itens, de todos os slots, exceto o item que estiver no slot utilizado na função. Exemplo: doCreatureSetDropLoot(cid, true, CONST_SLOT_BACKPACK) O que estiver no slot da backpack não será dropado. Observe que utilizei true, ao invés de false, isso pq o player ainda vai perder as outras coisas. Vamos lá... Em luascript.cpp procure a função: int32_t LuaScriptInterfaceluaDoCreatureSetDropLoot(lua_State* L) E substitua toda a função por isso: Agora em player.cpp procure isso: void PlayerdropLoot(Container* corpse) Substitua tudo por isso: Prontinho. Agora em data/creaturescripts/scripts/login.lua, antes do ultimo return true adicione: setPlayerStorageValue(cid, 19239, 0) Exemplo de uso: Quando eu estiver mais aprimorado, disponibilizo melhores conteúdo, flw ;p
  20. Quer mais informações do projeto, curta a pagina : https://www.facebook.com/LegendBladeOnline/ Quer mais informações do projeto, curta a pagina : https://www.facebook.com/LegendBladeOnline/
  21. E aí glr, beleza? Eu tô com um projeto de poketibia aqui e tô dissecando o TFS 0.4. Já alterei mais da metade das classes ligadas à jogabilidade do servidor, e eu percebi uma coisa: o meu hábito de não mudar o nome dos atributos e métodos já existentes das classes (questões de conflito, tipo o método ser sobrescrito em algum lugar, ou ser chamado em outra classe) tá atrapalhando e me deixando perdido (ex.: eu retirei todo esquema de vocação via XML, ent nao queria mais chamar de vocação, tirei o aumento de mana ao upar, porque eu refiz a mana para funcionar como o contador do limite de Pokémons, mana tá só no nome msm, e esse é o problema), e não, não vou encher de comentários o projeto :s Por causa disso, eu queria saber: tem alguma documentação do TFS auxiliando pra saber quais métodos são chamados onde? Ou qual classe agrega a outra? Se não, tem alguma IDE que me auxilie nisso? O netbeans não tá ajudando
  22. Opa pessoal, Eu tenho uma página chamada ScriptingArt, eu vim mostrar para vocês meu sistema de profissão que eu fiz Ta aí para quem quiser ver. Possivelmente irei postar mais vídeos depos!
  23. Alguém me da uma luz? estou com o seguinte erro na minha distro.. As variáveis que possui no login.lua são: local config = { loginMessage = getConfigValue('loginMessage'), useFragHandler = getBooleanFromString(getConfigValue('useFragHandler'))} tentei: local config = { loginMessage = "teste", useFragHandler = true} Alguem me da uma luz?
  24. Não consigo compilar a source CryingDamson v8.2 - 8.60, o dev c++ carrega um pouco, mas quando chega em certo ponto do seguinte erro: (e não aparece o executavel compilado) Ja usei stians repack, e da o mesmo erro... REP+ pra quem ajudar a resolver !!
  25. Hei pessoal, tranquilo? Pois então, me chamo Brendon, alguns de vocês podem me conhecer como Nogard. Sou artista gráfico, no momento sprites são meio maior lucro. Já faço sprites há algum tempo, 5, 6 anos. Em 2012 comecei a prestar serviços para alguns servidores e nunca mais parei. Já faz um tempo que planejo, e agora é hora, haha. Possuo um projeto em desenvolvimento, com o tema Dragon Ball Z. O caso é que, preciso de um programador para trabalhar em conjunto, assim poderei ter um foco maior e naturalmente uma agilidade considerável ao finalizar pendências. É isso, se você é programador e se interessa no tema, bora desenvolver! É necessário apenas que tenha experiência de no mínimo 3 anos em C++/Lua e uma habilidade considerável em lidar com OTClient. Enviar/receber informações entre client e servidor será essencial. É isso, aguardo respostas. See ya. [
×
×
  • Criar Novo...