Pesquisar na Comunidade
Mostrando resultados para as tags ''c++''.
Encontrado 46 registros
-
Quando eu tento compilar o fts aparece essse erro In constructor 'ODBCResult::ODBCResult(void*)': 351 databaseodbc.cpp 'res' was not declared in this scope 351 databaseodbc.cpp *** [Obj/databaseodbc.o] Error 1 se alguem puder me ajudar, agradeceria muito
-
Bom galera, eu to com esse erro ai... vou seguindo os parços e coloco cd c git clone https://github.com/microsoft/vcpkg.git cd vcpkg Porem quando uso esse ".\bootstrap-vcpkg.bat" da esse erro ai... Desculpas se coloquei na area errada, alguém poderia me ajudar? ? Grato pela atenção ❤️
-
tfs 0.3.6 [error] libxml/xmlmemory.h: no such file or directory
uma questão postou SnoopDoggy Programação
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 !!- 3 respostas
-
- compilar
- programação
-
(e 2 mais)
Tags:
-
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
-
c++ Limite máximo de players em guild (in-game)
um tópico no fórum postou Yan Liima Linguagens de Programação
Limite máximo de players em guild in-game ? Bom galera estou postando esse conteúdo como complemento do limite em WEBSITE Ao utilizar !joinguild esse code verifica se a guilda já atingiu o limite máximo de membros(configurado) Eu estarei disponibilizando de duas maneiras: 1º Será um valor configurado no proprio config.lua, onde determinará o limite máximo de todas as guild.(já incluido na 0.4 rev3996) 2º A verificação será feita por DB, onde terá um valor padrão para cada guilda criada, podendo ser alterado o valor de membros maximo. Ou seja, a guilda número UM pode ter máximo de 50 players, e a guilda número DOIS pode ter o máximo de 100. Vocês pode ser criativos e vender items que aumenta o limite ou fazer eventos/sorteios para aumentar... Enfim, vamos lá... Primeira maneira: Segunda maneira: Prontinho galera, espero que ajude algumas pessoas xD -
Olá pessoal! Esse é um tutorial bem simples para o player(master) não poder atacar seus summons e o summon do player(master) não atacar outros players. Esse tutorial é muito útil principalmente para quem está desenvolvendo derivados. *OBS: Esse tutorial só funciona para TFS 1.X (1.0+) Vamos ao tutorial!!! Siga os passos à seguir: 1- Abra sua source e procure o arquivo combat.cpp 2- Procure pela função: ReturnValue Combat::canTargetCreature(Player* attacker, Creature* target) 3- Insira o código à seguir dentro da função encontrada no passo anterior: // BLOCO QUE O PLAYER (MASTER) NÃO PODE ATACAR O SUMMON // if (target->isSummon()) { return RETURNVALUE_YOUMAYNOTATTACKTHISCREATURE; } // BLOCO QUE O SUMMON DO PLAYER (MASTER) NÃO PODE ATACAR OUTRO JOGADOR // if (attacker->isSummon() && target->getPlayer()) { return RETURNVALUE_YOUMAYNOTATTACKTHISPLAYER; } 4- Compile a source Pronto! Agora está terminado e você pode jogar! Um recurso simples, mas bem útil.
-
- 9 respostas
-
oiee tou com esses pobleminhas ao compila uns codigo ,alguém consegue me ajuda ou solucionar rsrsrs dou REP+++++++++ up
-
como aumentar o doSendAnimatedText de 9 letras para 12 é possível se sim, como?
-
[Lua & C++] getOtsysTime() + getPlayerPing(cid) + doPlayerSendPing(cid)
um tópico no fórum postou Yan Liima Linguagens de Programação
#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"/> -
Boa noite. Estou com um problema de loop na minha lista e realmente não sei qual erro estou cometendo. Faço o loop na lista se não tiver esse player na área ele exclui porem quanto tenho 2 player na área um deles sai dessa área o sistema entra em loop nesse trecho do código. bool achou = false; for (Creature* creature : this->blockRespawList) { SpectatorHashSet listAux; g_game.map.getSpectators(listAux, this->position, false, true); for (Creature* creatureAux : listAux) { if (creatureAux == creature) { achou = true; } } if (!achou) { this->removeBlockRespawList(creature); this->setBlockRespaw(RESPAWN_NONE); } } removeBlockRespawList auto it = std::find(blockRespawList.begin(), blockRespawList.end(), creature); if (it != blockRespawList.end()) { creature->decrementReferenceCounter(); blockRespawList.erase(it); } Resolvido pode fechar. bool achou = false; auto it = blockRespawList.begin(), end = blockRespawList.end(); while (it != end) { Creature* creature = *it; SpectatorHashSet listAux; g_game.map.getSpectators(listAux, this->position, false, true); for (Creature* creatureAux : listAux) { if (creatureAux == creature) { achou = true; } } if (!achou) { this->removeBlockRespawList(creature); this->setBlockRespaw(RESPAWN_NONE); } ++it; }
-
eae galera se alguém puder ajudar com esse erro? iodata link :https://www.sendspace.com/file/x11oayluafunctions link :https://www.sendspace.com/file/bbqxxw
-
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)
-
Estamos contratando freelancer para adicionar na source a função doSetMonsterGym e fazer o sistema de gym funcionar. Interessados mandar PM.
- 3 respostas
-
- c++
- programador
-
(e 3 mais)
Tags:
-
[TFS 0.3.6] [CreatureEvent] Função onWalk(cid, fromPosition, toPosition)
um tópico no fórum postou DarkWore Linguagens de Programação
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) -
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: tcbrj@hotmail.com
- 1 resposta
-
- programador
- c++
-
(e 2 mais)
Tags:
-
[Encerrado] Problema ao adicionar novo slot no servidor
um tópico no fórum postou IvanAppel Tópicos Sem Resposta
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 -
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á
-
[Encerrado]Projeto DBZ World [ Formação de Equipe ]
um tópico no fórum postou frankmizere007 Formação de Equipes
• 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!- 3 respostas
-
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)
-
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.
-
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)
-
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!
-
[Encerrado] [Encerrado] Como Compilar um OTServ?
um tópico no fórum postou Jumper Sky Tópicos Sem Resposta
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!!