Ir para conteúdo

Oneshot

Marquês
  • Total de itens

    1347
  • Registro em

  • Última visita

  • Dias Ganhos

    36

Tudo que Oneshot postou

  1. Falha minha, eu achei que existia um SLOT_SHIELD. Existe apenas para mãos SLOT_LEFT e SLOT_RIGHT. Tente um desses. Abraços.
  2. Isso.
  3. Sources. Item* Player::getWeapon(bool ignoreAmmo) { if(weapon) return weapon; Item* item = NULL; for(int32_t slot = SLOT_RIGHT; slot <= SLOT_LEFT; ++slot) { if(!(item = getEquippedItem((slots_t)slot)) || item->getWeaponType() != WEAPON_DIST) continue; if(!ignoreAmmo && item->getAmmoType() != AMMO_NONE) { Item* ammoItem = getInventoryItem(SLOT_AMMO); if(ammoItem && ammoItem->getAmmoType() == item->getAmmoType()) { if(g_weapons->getWeapon(ammoItem)) { shootRange = item->getShootRange(); return ammoItem; } } } else if(g_weapons->getWeapon(item)) { shootRange = item->getShootRange(); return item; } } return NULL; } Só editar essa linha. Item* ammoItem = getInventoryItem(SLOT_AMMO); Por essa: Item* ammoItem = (getInventoryItem(SLOT_AMMO) || getInventoryItem(SLOT_SHIELD)); Não testado. Abraços.
  4. Legalzinha, mas dá pra fazer tudo isso com um string.gsub, caotic. function removeCharInString(str, pat) pat = table.concat(pat) str = str:gsub("[".. pat .."]", "") return str end Abração.
  5. Legalzinha a tua função, SmiX. Não vejo muita aplicações dela em scripts, mas é bom para aprendizado. Abraços. Obs: Teria como parar de usar a descrição do Mock no seu nick?
  6. Oneshot

    Post Inútil

    Cara, Barzinho do Éks. "Tudo que não é ligado ao Tibia ou ao OTServ pode ser postado aqui. Compre uma cerveja pelo preço de duas e ganhe a segunda de graça!" E depois quer ficar irritadinho porque está sendo zuado? Poste isso na Discussões, Matérias e Entrevistas que você terá um feedback melhor por lá.
  7. Muito simples, existem sistemas de mineração completos já postados no fórum. Abraços.
  8. Oneshot

    Simplificar Função

    Se a sua é funcional, não importa o tamanho. Eu fiz a minha meio gambiarra para só quebrar espaços de strings, ou seja uma string gigante de 30 caracteres sem espaços não quebraria.
  9. Oneshot

    Simplificar Função

    string.skipline = function(s, l) if string.len(s) > l then local x = string.sub(s, 1, l) local y = string.sub(s, (l + 1), string.len(s)) if string.len(y) > l then y = string.skipline(y, l) end s = x .. string.gsub(y, "%s", "\n", 1) end return s end Vê se funciona legal aí. Abraços.
  10. local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH) setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -8100, 0, -8300, 0) function onCastSpell(cid, var) for i = 1, 2 do doCombat(cid, combat, var) end return true end
  11. Oneshot

    Compliação OTClient

    Olá, DoGoZ. As sources do OtClient vem com o parâmetro CMAKE_BUILD_TYPE configurado como Debug por padrão e é por isso que ele fica com um tamanho de cerca de 70MB. Para que seu cliente fique com um tamanho de 10MB, você precisa configurar como Release no CMake. Abraços.
  12. Oneshot

    erro efeitos

    Olá, XTibiano. Utilize com maior frequência a barra de pesquisa do fórum. http://www.xtibia.com/forum/topic/137748-tutorialadicionando-efeitos/ Um grande abraço.
  13. Vou fazer algo sobre as cidades premium assim que eu puder. Abraços.
  14. Olá, XTibiano. Não trabalhamos com conteúdo relacionado a bots, essa área é apenas para pedidos de scripts Lua para Open Tibia. Seu tópico foi fechado.
  15. Mas você está falando o quê para o Account Manager? 'warlord' ou 'a warlord'? Você tem que falar para o account manager, o que estiver no 'name' da vocação.
  16. O account manager só lista vocações onde o id seja igual ao fromvoc. Ou seja se o id da vocação 'warlord' é 13, seu fromvoc também tem que ser 13, e, no arquivo, ele está 9. Abraços.
  17. Este é o problema, não existe uma função nos headers para diferir entre uma cidade premium e uma cidade free. Mas irei desenvolver algo assim que puder sobre isso. Abraços.
  18. Account Manager Adicionando "Escolha de Cidade" Fala, minha galera do Éks. Vocês sabem que é minoria servidores que possuem site, uma vez que quando queremos criar um servidor (mais por lazer), é meio que inviável hostear um site junto. Os account makers, assim como são chamados os sites de servidores, dão ao jogador a opção de escolher a cidade que ele vai morar. Já o Account Manager, aquele sistema interno de administração da conta de um jogador, não possue uma opção de escolha de cidade, o que o deixa muito limitado. Principalmente para servidores derivados, onde é quase que necessário, que o jogador possa escolher sua cidade. Pensando nisso, desenvolvi uma série de modificações que irão adicionar ao seu servidor, a opção de "escolher uma cidade" no sistema do Account Manager. Instalação Você precisa seguir todos os passos abaixo com atenção o bastante para não pular nenhum, senão poderá ocorrer algum erro na compilação. Vale lembrar que não basta modificar os arquivos passados, você precisa re-compilar seu servidor e, após, substituir o executável. Vamos começar. No arquivo config.lua de seu servidor, procure por: newPlayerSpawnPosX = 95 newPlayerSpawnPosY = 117 newPlayerSpawnPosZ = 7 newPlayerTownId = 1 Apague, substituindo pelas linhas abaixo: newPlayerChooseTown = true newPlayerDefaultTownId = 1 A partir daqui, você irá precisar das sources de seu servidor. No arquivo configmanager.h e procure pelas seguintes linhas: SPAWNPOS_X, SPAWNPOS_Y, SPAWNPOS_Z, SPAWNTOWN_ID, Substitua por: DEFAULT_TOWN_ID, Procure por: START_CHOOSEVOC, Logo abaixo adicione: START_CHOOSETOWN, No arquivo configmanager.cpp, procure por: m_confNumber[sPAWNPOS_X] = getGlobalNumber("newPlayerSpawnPosX", 100); m_confNumber[sPAWNPOS_Y] = getGlobalNumber("newPlayerSpawnPosY", 100); m_confNumber[sPAWNPOS_Z] = getGlobalNumber("newPlayerSpawnPosZ", 7); m_confNumber[sPAWNTOWN_ID] = getGlobalNumber("newPlayerTownId", 1); Substitua por: m_confNumber[DEFAULT_TOWN_ID] = getGlobalNumber("newPlayerDefaultTownId", 1); Procure por: m_confBool[sTART_CHOOSEVOC] = getGlobalBool("newPlayerChooseVoc", false); Adicione logo abaixo: m_confBool[sTART_CHOOSETOWN] = getGlobalBool("newPlayerChooseTown", true); No arquivo iologindata.h, procure por: bool createCharacter(uint32_t accountId, std::string characterName, int32_t vocationId, uint16_t sex); Substitua por: bool createCharacter(uint32_t accountId, std::string characterName, int32_t vocationId, uint16_t sex, uint32_t townId); No arquivo iologindata.cpp, procure por: bool IOLoginData::createCharacter(uint32_t accountId, std::string characterName, int32_t vocationId, uint16_t sex) { if(playerExists(characterName)) return false; Vocation* vocation = Vocations::getInstance()->getVocation(vocationId); Vocation* rookVoc = Vocations::getInstance()->getVocation(0); uint16_t healthMax = 150, manaMax = 0, capMax = 400, lookType = 136; if(sex % 2) lookType = 128; uint32_t level = g_config.getNumber(ConfigManager::START_LEVEL), tmpLevel = std::min((uint32_t)7, (level - 1)); uint64_t exp = 0; if(level > 1) exp = Player::getExpForLevel(level); if(tmpLevel > 0) { healthMax += rookVoc->getGain(GAIN_HEALTH) * tmpLevel; manaMax += rookVoc->getGain(GAIN_MANA) * tmpLevel; capMax += rookVoc->getGainCap() * tmpLevel; if(level > 8) { tmpLevel = level - 8; healthMax += vocation->getGain(GAIN_HEALTH) * tmpLevel; manaMax += vocation->getGain(GAIN_MANA) * tmpLevel; capMax += vocation->getGainCap() * tmpLevel; } } Database* db = Database::getInstance(); DBQuery query; query << "INSERT INTO `players` (`id`, `name`, `world_id`, `group_id`, `account_id`, `level`, `vocation`, `health`, `healthmax`, `experience`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons`, `maglevel`, `mana`, `manamax`, `manaspent`, `soul`, `town_id`, `posx`, `posy`, `posz`, `conditions`, `cap`, `sex`, `lastlogin`, `lastip`, `skull`, `skulltime`, `save`, `rank_id`, `guildnick`, `lastlogout`, `blessings`, `online`) VALUES (NULL, " << db->escapeString(characterName) << ", " << g_config.getNumber(ConfigManager::WORLD_ID) << ", 1, " << accountId << ", " << level << ", " << vocationId << ", " << healthMax << ", " << healthMax << ", " << exp << ", 68, 76, 78, 39, " << lookType << ", 0, " << g_config.getNumber(ConfigManager::START_MAGICLEVEL) << ", " << manaMax << ", " << manaMax << ", 0, 100, " << g_config.getNumber(ConfigManager::SPAWNTOWN_ID) << ", " << g_config.getNumber(ConfigManager::SPAWNPOS_X) << ", " << g_config.getNumber(ConfigManager::SPAWNPOS_Y) << ", " << g_config.getNumber(ConfigManager::SPAWNPOS_Z) << ", 0, " << capMax << ", " << sex << ", 0, 0, 0, 0, 1, 0, '', 0, 0, 0)"; return db->query(query.str()); } Substitua por: bool IOLoginData::createCharacter(uint32_t accountId, std::string characterName, int32_t vocationId, uint16_t sex, uint32_t townId) { if(playerExists(characterName)) return false; Vocation* vocation = Vocations::getInstance()->getVocation(vocationId); Vocation* rookVoc = Vocations::getInstance()->getVocation(0); Town* town = Towns::getInstance()->getTown(townId); uint16_t healthMax = 150, manaMax = 0, capMax = 400, lookType = 136; if(sex % 2) lookType = 128; uint32_t level = g_config.getNumber(ConfigManager::START_LEVEL), tmpLevel = std::min((uint32_t)7, (level - 1)); uint64_t exp = 0; if(level > 1) exp = Player::getExpForLevel(level); if(tmpLevel > 0) { healthMax += rookVoc->getGain(GAIN_HEALTH) * tmpLevel; manaMax += rookVoc->getGain(GAIN_MANA) * tmpLevel; capMax += rookVoc->getGainCap() * tmpLevel; if(level > 8) { tmpLevel = level - 8; healthMax += vocation->getGain(GAIN_HEALTH) * tmpLevel; manaMax += vocation->getGain(GAIN_MANA) * tmpLevel; capMax += vocation->getGainCap() * tmpLevel; } } Database* db = Database::getInstance(); DBQuery query; query << "INSERT INTO `players` (`id`, `name`, `world_id`, `group_id`, `account_id`, `level`, `vocation`, `health`, `healthmax`, `experience`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons`, `maglevel`, `mana`, `manamax`, `manaspent`, `soul`, `town_id`, `posx`, `posy`, `posz`, `conditions`, `cap`, `sex`, `lastlogin`, `lastip`, `skull`, `skulltime`, `save`, `rank_id`, `guildnick`, `lastlogout`, `blessings`, `online`) VALUES (NULL, " << db->escapeString(characterName) << ", " << g_config.getNumber(ConfigManager::WORLD_ID) << ", 1, " << accountId << ", " << level << ", " << vocationId << ", " << healthMax << ", " << healthMax << ", " << exp << ", 68, 76, 78, 39, " << lookType << ", 0, " << g_config.getNumber(ConfigManager::START_MAGICLEVEL) << ", " << manaMax << ", " << manaMax << ", 0, 100, " << townId << ", " << town->getPosition().x << ", " << town->getPosition().y << ", " << town->getPosition().z << ", 0, " << capMax << ", " << sex << ", 0, 0, 0, 0, 1, 0, '', 0, 0, 0)"; return db->query(query.str()); } No arquivo player.h, procure por: int32_t managerNumber, managerNumber2; Substitua por: int32_t managerNumber, managerNumber2, managerNumber3; No arquivo player.cpp, procure por: editListId = maxWriteLen = windowTextId = rankId = 0; Adicione logo abaixo: managerNumber3 = g_config.getNumber(ConfigManager::DEFAULT_TOWN_ID); Procure por: case MANAGER_ACCOUNT: Muita atenção neste passo. Você precisará substituir todo o conteúdo do case pelo conteúdo abaixo, ou seja: Substitua isso: case MANAGER_ACCOUNT: { ... } Por isso: ZD3xYbg4[/pastebin] Demonstração Testado em The Forgotten Server 0.4 rev3884. Pode não funcionar em versões anteriores.
  19. Oneshot

    Adeus Éks

    Adeus, caro contemporâneo.
  20. Realmente Modern Warfare você vai achar por esse preço mesmo, principalmente por que é o primeiro de três jogos, ou seja bem old já. Se você usar o Buscapé, dá até para achar umas boas ofertas, o problema é a confiança na loja em questão.
  21. Bom e barato na categoria de FPS são duas palavras opostas.
  22. Certo, depois poste a sua resolução aqui. Abraços.
  23. não vlw, e eu tenho permição de moderar o forum todo, se eu ver uma irregularidade ou poder mover uma duvida sanada, e etc. eu posso e isso é sinal que vocês não estão fazendo os seus devidos trabalhos! Bju gato! permição permição permição permição permição permição permição permição A parte mais engraçada é que como Coordenador de Websites, você devia concentrar a maioria dos seus esforços lá, e não deixar aquela área fraca e praticamente abandonada como está atualmente. Além de analfabeto, belo coordenador, você hein? Não vem se achar o foda em cima dos outros, quando você é um bosta inútil atrás de um nick verde. Mas não vou levar pro lado pessoal não. Estamos no Barzinho para descontrair. "Bjo gato"
  24. Desculpe minha grosseria, mas infelizmente só aí no seu servidor problemático. Testei aqui. Grande abraço.
  25. Caro Piabeta, você que gosta de se meter na moderação dos outros e fechar os tópicos do Barzinho, faça um grande favor e feche o seu próprio tópico. Abraço.
  • Quem Está Navegando   0 membros estão online

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