Jump to content

Olá Tibiano! Notamos que você está com um adblocker ligado... 

Nós promovemos servidores dentro da comunidade, para que eles tenham visibilidade.

Por favor, nos ajude a continuar promovendo esses servidores. Adicione nosso domínio na whitelist de seu adblocker, ok? :)

Search the Community

Showing results for tags 'tfs 1.2'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Projetos Patrocinados
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Recursos
    • Suporte
    • Pedidos
    • Downloads
  • OFF-Topic

Categories

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Sou

Found 107 results

  1. The Forgotten Server 1.2 - Suporte para protocolo 8.60 Sources: https://github.com/ninjalulz/forgottenserver/archive/8.6.zip Repositório: https://github.com/ninjalulz/forgottenserver/tree/8.6
  2. Vamos la começando com o projeto é o seguinte no momento estrou trabalhando muitos aspectos do servidor vou deixar destacados aqui os que já estão disponível, porem precisam ser implementado em todo o servidor, o servidor sera baseado em XP 1 com o balanceamento e criação de novos monstros e conceitos para a jogabilidades de tais. Exemplo Look Essa parte do jogo seria a rookguard que vai até o level 100 onde você tera acesso a novas promotions e missoes etc... System Spell Agora os item recebem skill, e não existe "Classe" as Vocações do jogador são suas "patentes dentro do servidor de acordo com o rpg, cada npc ou quest influencia ou adverte esse sistema. Cada skill pode ser adquirida dropando uma GEM SKILL que muda e tem atributos novas de acordo com a sua raridade 1, 2, 3, normal, raro,super-raro(Com os updates ja sabem.) Alguns item ja vem com skills como item obtidos em quests e drop de monstros, item craftados podem conter 1 ou até 3 espaços para spells. Ability Short Slash Abilisty Defensive Estou Mudando algumas coisas na ui do servidor até o dia 17 o servidor estará disponível só para min a partir do dia 17, o server passa a ficar online. quem pode-a entrar no servidor? Aqueles que entrarem para Equipe do servidor(Conhecimento LUA), aqueles que querem jogar o teste server. O conhecimento em lua deve ser baseado nos sistemas do tfs 1.0+. A partir disso vamos trabalhar em sistemas para uma UI NOVA para o otclient em lua. Aqueles que ja tiverem ideias ou sistemas para discutir e debater sobre RPG e tenha conhecimento para botar em ação me adicione. no discord. para conversarmos. Updates Mensais todo primeiro dia do més. menos no natal claro. Feliz natal. Estou a procura de sprite maker. Estou a procura de designer(PS) novatos são bem vindos, o primeiro passo sera criar novos Character Newtypes com Addons,Mounts. IMAGENS ( MAPA EM DESENVOLVIMENTO) # 1 Atualização Map 0.0.2 Discord do Projeto adicionado ao tópico interessado entrar em contato. PARA SABER MAIS SOBRE O PROJETO ACESSE O DISCORD NO CHAT GERAL ENTRE EM NOSSO WEBSITE https://discord.gg/dJFzDJN Obrigado. espero o feed back, caso não queiram acompanhar pelo nosso site digo a vocês que sigam este tópico obrigado. 
  3. Bem bem bem bem.. venho trazer aqui um sistema/script seja la como quiser chamar que me chamou bema a tenção por ser bem interessante.. Feito pelo Karain (qual pedi autorização para repostar).. inicialmente havia sido feito para 0.4, inspirado num mini game para mc mas com a tendência de mudança e pedidos da comunidade o mesmo foi atualizado.. Não me peçam 0.4 pois ele não disponibilizou.. e bem.. atualizem-se né... eu não suporto 0.4 (para quem não entende, não suporto de não apóio) .~> Sobre o sistema - Como funciona <~. Primeiramente, se o jogador decidir se juntar a lista de espera do evento ele irá utilizar o comando !join hunger games e pronto.. estará na lista de espera. Depois de um tempo e quantidade de players para o evento (ambos configuráveis), assim que o evento começar eles serão teleportados para um local; terão todos seus items removidos de forma segura para um depot (configurável) Em cada mapa haverá chests que tem uma chance (random) de conter alguns items, o player precisa encontrar e coletar com intenção de sobreviver e ser o último player vivo. Premio configurável .~> Mapa<~. o mapa não foi feito pelo Karain, caso você seja dono do mapa e tenha como provar, por favor informe para que seu nome seja colocado nos créditos Download Do Mapa Aqui P.s.: não sei colocar scan nem como faz, se for preciso scan alguém faz por favor que eu edito o post Bug conhecido (mas acho que para server que não fique reiniciando isso não venha a ser um problema..) não testei essa parte para ver o que realmente ocorre.. // [edit]Código para correção do bug (não oficial) após o hunger.lua do global events[/edit] - alguns items podem não retornar ao player após o evento, mesmo que tenha sido carregado no mapa e nos scripts, no entanto, irá funcionar se o player tiver visitado o depot ao menos uma vez, em que o server ficou online Changelog 1.0.0 23 de julho 2015 : Liberado 1.0.1 29 de julho 2015 : Arrumado a atualziaçãod e items no chest após um player o abrir. 1.0.2 30 de julho 2015 : -Corrigido um erro fatal que acontecia quando um player morria ou dava logout enquanto no evento. -Adicionado o comando !ragequit que faz o jogador se matar enquanto no evento. 1.0.3 8 de agosto 2015: Corrigido bug que fazia o evento death ser executado em qualquer situação pvp, arquivos alterados: - creaturescripts/scripts/hunger.lua 1.0.4 9 de agosto 2015: Corrigido um debug no client por conta de broadcasts, obrigado ao silveralol, arquivos alterados: -globalevents/scripts/hunger.lua -creaturescripts/scripts/hunger.lua -creaturescripts/scripts/eventlogout.lua 1.0.5 30 de agosto 2015 (não oficial): Adicionado uma alteração para o problema de recuperação de items -globalevents/scripts/hunger.lua .~> Códigos <~. Em globalevents/globalevents.xml <globalevent type="startup" name="hunger" script="hunger.lua"/> Crie um arquivo chamado hunger.lua em globalevents/scripts e cole isso Em 30/08 o usuário Mokerhamer apareceu com uma solução para o problema que fazia com que alguns players não conseguissem recuperar os items após o evento, adicionando uma função clone, então funciona abrindo ou não o dp antes do evento.. estou sem pc novamente então não pude testar e o Karain até o momento não se pronunciou, de qualquer maneira parece promissor então vou colocar aparte. alterem por conta e risco. Altere a função player:getbackitems do código acima por este Em creaturescripts/creaturescripts.xml <event type="logout" name="eventlogout" script="eventlogout.lua"/> <event type="death" name="hunger" script="hunger.lua"/> Em creaturescripts/scripts/login.lua antes do return true player:registerEvent("hunger") Em creaturescripts/scripts/eventlogout.lua Em creaturescripts/scripts/hunger.lua Em talkactions/talkactions.xml <talkaction words="!join" separator=" " script="join.lua"/> <talkaction words="!ragequit" separator=" " script="leave.lua"/> Em talkactions/scripts/join.lua Em talkactions/scripts/leave.lua Em actions/actions.xml <!-- Hunger Games Chests --> <action fromaid="60101" toaid="60499" script="games/hunger.lua"/> <action fromaid="61101" toaid="61499" script="games/hunger.lua"/> <action fromaid="62101" toaid="62499" script="games/hunger.lua"/> Em actions/scripts/hunger.lua Curtiu da um rep ae né.. não arranca pedaço da mão e incentiva a trazer mais.. se você for sovina e n gostar de dar rep, ao menos um obrigado ja ta bom.. pelo menos mostra que esta valendo a pena ficar procurando sistemas maneiros para trazer, pedir autorização e traduzir as informações... [edit] para evitar problemas façam testes antes, fui informado por pm que as vezes mesmo indo ao dp antes alguns items ainda não retornam.. eu fiz um teste básico no sistema e não tive esse problema.. mas é melhor prevenir, por isso antes de colocar o sistema on no seu server façam stress test .Certamente o Karain esta tentando resolver mas mesmo assim eu fiz um post no seu tópico perguntando sobre informações mais detalhadas sobre e se esta sendo feito algo [edit 08/08] Alteração no script - vide Changelog [edit 09/08] Alteração no script - vide Changelog [edit 30/08] Alteração para o script - vide Changelog
  4. Bem procurei aqui na comunidade um VIP System mais informativo e nada, além de ter tido problema com os que estão aqui e acabei achando em outro lugar um que funcionou perfeitamente para mim. Usando tfs 1.2 disponibilizado por Bruno Minervino Só estou trazendo o conteúdo e por não conhecer bem não posso dar suporte mas do jeito que está é só 'instalar' e vai funcionar. Creditos.: Summ por fazer e a mim por uma ou duas alterações que estavam fazendo as portas funcionarem de forma estranha.. Sistema Vip Talkaction !checkvip para todos os players Talkaction /vip para membros da staff - /vip adddays, NomedoPlayer, 5 --> Adiciona 5 dias vip para o Player. - /vip removedays, NomedoPlayer, 5 --> Remove 5 dias vip do Player. - /vip remove, PlayerName --> Remove todos os dias vip do Player. - /vip check, NomedoPlayer --> Checa quantos dias vip o Player tem. - /vip addinfinite, NomedoPlayer --> Adiciona tempo vip infinito para o Player. Tiles VIP Portas VIP / Actions Items que adicionam dias VIP ItemId 10135 adiciona 10 dias vip. ItemId 10134 adiciona 30 dias vip. ItemId 10133 adiciona 90 dias vip. Imagens Comando !checkvip mas sem ter vip Comando /vip adddays, dracoknight, 5 Comando !checkvip após adicionar 5 dias Comando /vip addinfinite, dracoknight Comando !checkvip após usar infinite Comando /vip remove, dracoknight
  5. Boa noite pessoal, tudo bem? Introdução Venho até vocês hoje postar um sistema que desenvolvi para customização de ataques básicos. Basicamente ele permite que você defina as características visuais do ataque básico de um player qualquer: efeito, tipo de dano e range. As modificações de itens ainda se sobrepõe ao mesmo, seguindo as regras: 1. A range do item só sobrepõe a range base do jogador se, e somente SE, esta for última for menor do que a primeira. 2. O efeito e o tipo de dano do item se sobrepõem ao base sempre que estes existirem. Códigos: 1. Definição da função lua responsável por chamar a alteração O primeiro passo é definir a função lua que será responsável pela alteração do ataque basico: player:setFistConditions(range, combatType, distanceEffect) Abra o arquivo luascript.h e cole isso dentro dos métodos protegidos de LuaScriptInterface: static int luaPlayerSetFistConditions(lua_State* L); Em seguida, abra luascript.cpp para configurarmos a implementação do método. Junto aos demais registros do tipo player cole este: registerMethod("Player", "setFistConditions", LuaScriptInterface::luaPlayerSetFistConditions); Junto às demais funções do metadata "Player" coloque: int LuaScriptInterface::luaPlayerSetFistConditions(lua_State* L) { // player:setFistConditions(range, combatType, distanceEffect) Player* player = getUserdata<Player>(L, 1); if (player) { player->setFistConditions(getNumber<uint8_t>(L, 2), getNumber<CombatType_t>(L, 3), getNumber<ShootType_t>(L, 4)); } else { lua_pushnil(L); } return 1; } Pronto, a sua função lua está configurada. 2. Configurar os atributos que definem o novo ataque base do player Nessa etapa vamos alterar a classe "Player" para receber os atributos referentes ao range, tipo de combate e efefeito do ataque base, bem como funções para definí-los e recebê-los (getters and setters). Em player.h, dentro de variáveis protegidas (protected:), cole: ShootType_t fistDistanceEffect; uint8_t fistRange; CombatType_t fistCombatType; Na parte publica (public:) defina os getters and setters: void setFistConditions(uint8_t range, CombatType_t combatType, ShootType_t distanceEffect) { fistRange = range; fistCombatType = combatType; fistDistanceEffect = distanceEffect; } uint8_t getFistRange() { return fistRange; } CombatType_t getFistCombatType() { return fistCombatType; } ShootType_t getFistDistanceEffect() { return fistDistanceEffect; } Agora, em player.cpp, dentro do construtor (Player::Player(ProtocolGame_ptr p) : Creature(), inventory(), client(p), varSkills(), varStats(), inventoryAbilities()) coloque: fistDistanceEffect = ShootType_t::CONST_ANI_NONE; fistRange = 1; fistCombatType = CombatType_t::COMBAT_PHYSICALDAMAGE; Pronto, mais uma etapa concluída. A sua classe player está pronta para receber as variáveis referentes à customização do ataque básico. 3. Configuração da Classe Weapon e suas subClasses Chegou a hora de configurar a classe Weapon e suas subClasses, responsáveis pela execução do dano base. Primeiramente, abra o arquivo Weapons.h e, dentro do public da classe Weapons coloque: virtual void Weapon::setFistDistanceParams(Player* player, CombatParams& params) const Em Weapons.cpp, vá até o método Weapons::useFist(Player* player, Creature* target) e substitua: if (!Position::areInRange<1, 1>(player->getPosition(), target->getPosition())) { return false; } Por: Position playerPos = player->getPosition(); Position targetPos = target->getPosition(); if (playerPos.z != targetPos.z) { return false; } if (std::max<uint32_t>(Position::getDistanceX(playerPos, targetPos), Position::getDistanceY(playerPos, targetPos)) > player->getFistRange()) { return false; } Após params.blockedByShield = true; cole: params.distanceEffect = player->getFistDistanceEffect(); params.combatType = player->getFistCombatType(); Pronto o script já é funcional. Isto é, seu ataque base tem efeito, dano e range customizáveis. Porém, qualquer item que for equipado irá sobrepor seu ataque base. Se você quer assim, pare por aqui. Caso você queira que a sobreposição do item sobre a sua customização tenha regras faça o próximo passo. 4. Criando regras Bom, já estamos quase concluindo o tutorial. Agora vamos definir as regras de sobreposição dos itens sobre o ataque base. Volte a Weapons.cpp e defina o método que dita as regras de efeito e tipo do ataque: void Weapon::setFistDistanceParams(Player* player, CombatParams& params) const { params.distanceEffect = params.distanceEffect != ShootType_t::CONST_ANI_NONE ? params.distanceEffect : player->getFistDistanceEffect(); params.combatType = params.combatType != CombatType_t::COMBAT_NONE ? params.combatType : player->getFistCombatType(); } Explicando: Aqui você determina quando o parâmetro final de dano vai ter as caracteríticas da sua arma e quando vai ter de ataque básico. No nosso caso, vai sobrescrever sempre que a arma tiver um efeito e um tipo de dano próprio, isto é, for diferente de CONST_ANI_NONE e COMBAT_NONE. Fique a vontade para modificar este método ao seu gosto. Exemplo: sobrescrever o tipo de dano somente se ele for do tipo físico; sobrescrever o efeito somente se ele ainda não existe; etc, use a criatividade. Bom, para essas configurações de regras valerem, temos agora que substituir o método Weapon::internalUseWeapon por: void Weapon::internalUseWeapon(Player* player, Item* item, Creature* target, int32_t damageModifier) const { if (scripted) { LuaVariant var; var.type = VARIANT_NUMBER; var.number = target->getID(); executeUseWeapon(player, var); } else { CombatDamage damage; WeaponType_t weaponType = item->getWeaponType(); if (weaponType == WEAPON_AMMO || weaponType == WEAPON_DISTANCE) { damage.origin = ORIGIN_RANGED; } else { damage.origin = ORIGIN_MELEE; } CombatParams paramsCheck = params.copyParams(); setFistDistanceParams(player, paramsCheck); damage.primary.type = paramsCheck.combatType; damage.primary.value = (getWeaponDamage(player, target, item) * damageModifier) / 100; damage.secondary.type = getElementType(); damage.secondary.value = getElementDamage(player, target, item); Combat::doCombatHealth(player, target, damage, paramsCheck); } onUsedWeapon(player, item, target->getTile()); } Além disso, devemos ir em combat.h e, dentro da struct CombatParams, criar o seguinte 'método': CombatParams CombatParams::copyParams() const { CombatParams newParams; newParams.dispelType = dispelType; newParams.combatType = combatType; newParams.blockedByArmor = blockedByArmor; newParams.blockedByShield = blockedByShield; newParams.targetCasterOrTopMost = targetCasterOrTopMost; newParams.aggressive = aggressive; newParams.itemId = itemId; newParams.impactEffect = impactEffect; newParams.distanceEffect = distanceEffect; newParams.useCharges = useCharges; newParams.origin = origin; return newParams; } A última modificação é a definição da regra de range. De volta ao Weapons.cpp e no método Weapon::playerWeaponCheck logo após: if (playerPos.z != targetPos.z) { return 0; } Cole: shootRange = player->getFistRange() <= shootRange ? shootRange : player->getFistRange(); No caso, a regra é para substituir a range base pela range do item SE esta for menor que a primeira. Outro exemplo seria só substituir a range base pela do item SE a range base for maior que 1 (para que knights não possam usar ranged itens, por exemplo). Enfim pessoal, isso é tudo. Espero que gostem. Abraços e boa noite. Editado: Criado um tópico em scripting ilustrando a utilização do sistema: Exemplificando Customização de Ataque
  6. Descrição: Loja de servidor Tibia / personalizada. Ele permite o jogador comprar itens com pontos de prémios / tokens. <------------------------> Como usar: 1. Arraste e solte o conteúdo do arquivo zip baixado no final do tópico para a pasta modules do OTC. 2. Vá para a store_module e abra o arquivo configs.lua 3. Altere COMMAND_BUYITEM para comandar a compra do item. 4. Altere comando COMMAND_TRANSFER para comandar a transferência de pontos. 5. Altere WEBSITE_GETCOINS a página onde você pode comprar pontos. 6. Altere COINS_OPCODE mudança,opcode para qualquer número que você vai usar. 7. Salve,e pronto. Como adicionar novos items: storeIndex = { [1] = { id = '1', name = 'Premium Time', description = 'Buy low-priced Premium Time to add it to your own account.', image = "/images/shop/premium_time", imageList = '/images/shop/premium_time_small' }, } ID - ID do categoria(usado para comando). nome - Nome da categoria. Descrição - descrição da categoria. - Imagem da categoria na Descrição Painel (tamanho 64x64px). imageList - Imagem da categoria no Painel List (tamanho 32x32px). Como adicionar produtos à categoria: storeProducts = { { name = "30 days", id = '1', category_id = "1", description = 'Do you really want to buy "30 days" of premium time?\n\nNote: Once you have purchased Premium Time, your account\ninstantly receives premium status - no relog necessary!', tooltip = "", price = 250, image = "/images/shop/offer/30days" }, } Nome - Nome do jogador artigo será capaz de comprar. ID - Id do item (usado para comando). category_id - Id da categoria na qual o item será exibido. Descrição - Descrição do jogador artigo quer comprar, exibido na janela pop-up. dica - Se o nome tiver mais de 12-13 caracteres, digite o nome do produto aqui. Ele será exibido em foco. preço - Preço do item. imagem - ícone do item de jogador quer comprar (tamanho 88x70px). Como enviar Tibia valor Coins para o cliente: Abrir em seus TFS (estou usando o TFS 1.2) dados / scripts de criatura / scripts / extendedopcode.lua adicione: local tibiaCoins = getPlayerStorageValue(player, 999999999) player:sendExtendedOpcode(52, tibiaCoins) Todo o arquivo deve ser semelhante a este: function onExtendedOpcode(player, opcode, buffer) local tibiaCoins = getPlayerStorageValue(player, 999999999) player:sendExtendedOpcode(52, tibiaCoins) return true end Download: MEGA Nota: Comando para a compra de item deve seguir modelo: !storebuy CATEGORYID, ITEMID Comando para a transferência de moeda deve seguir modelo: !transferpoints PLAYERNAME, VALUE Créditos: obs:não testado em tfs abaixo de 1.2.
  7. Utilizado em conjunto com: http://www.xtibia.com/forum/topic/238305-sistema-de-resetes/ COMBAT.CPP procure: int size0 = lua_gettop(L); adicionar abaixo: int mares = g_config.getNumber(ConfigManager::MAGIC_RES_DAM); procure: damage.primary.value = normal_random( LuaScriptInterface::getNumber<int32_t>(L, -2), LuaScriptInterface::getNumber<int32_t>(L, -1) ); lua_pop(L, 2); } substitua: damage.primary.value = normal_random( LuaScriptInterface::getNumber<int32_t>(L, -2) * ((player->getResets() * mares/100) + 1), LuaScriptInterface::getNumber<int32_t>(L, -1) * ((player->getResets() * mares/100) + 1) ); lua_pop(L, 2); } WEAPONS.H procure: static int32_t getMaxMeleeDamage(int32_t attackSkill, int32_t attackValue); adicone abaixo: static int32_t getMaxWeaponDamage(uint32_t level, uint32_t resets, int32_t attackSkill, int32_t attackValue, float attackFactor); WEAPONS.CPP procure: int32_t Weapons::getMaxWeaponDamage(uint32_t level, int32_t attackSkill, int32_t attackValue, float attackFactor) { int meres = g_config.getNumber(ConfigManager::MELEE_RES_DAM); return static_cast<int32_t>(std::ceil((2 * (attackValue * (attackSkill + 5.8) / 25 + (level - 1) / 10.)) / attackFactor)); } substitua: int32_t Weapons::getMaxWeaponDamage(uint32_t level, uint32_t resets, int32_t attackSkill, int32_t attackValue, float attackFactor) { int meres = g_config.getNumber(ConfigManager::MELEE_RES_DAM); return static_cast<int32_t>(std::ceil(((resets * meres/100) + 1) * (2 * (attackValue * (attackSkill + 5.8) / 25 + (level - 1) / 10.)) / attackFactor)); } procure: int32_t maxDamage = Weapons::getMaxWeaponDamage(player->getLevel(), attackSkill, attackValue, attackFactor); substitua: int32_t maxDamage = Weapons::getMaxWeaponDamage(player->getLevel(), player->getResets(), attackSkill, attackValue, attackFactor); procure: int32_t maxValue = Weapons::getMaxWeaponDamage(player->getLevel(), attackSkill, attackValue, attackFactor); substitua: int32_t maxValue = Weapons::getMaxWeaponDamage(player->getLevel(), player->getResets(), attackSkill, attackValue, attackFactor); procure: int32_t maxValue = static_cast<int32_t>(Weapons::getMaxWeaponDamage(player->getLevel(), attackSkill, attackValue, attackFactor) * player->getVocation()->meleeDamageMultiplier); substitua: int32_t maxValue = static_cast<int32_t>(Weapons::getMaxWeaponDamage(player->getLevel(), player->getResets(), attackSkill, attackValue, attackFactor) * player->getVocation()->meleeDamageMultiplier); procure: int32_t maxValue = Weapons::getMaxWeaponDamage(player->getLevel(), attackSkill, attackValue, attackFactor); substitua: int32_t maxValue = Weapons::getMaxWeaponDamage(player->getLevel(), player->getResets(), attackSkill, attackValue, attackFactor); procure: int32_t maxValue = static_cast<int32_t>(Weapons::getMaxWeaponDamage(player->getLevel(), attackSkill, attackValue, attackFactor) * player->getVocation()->distDamageMultiplier); substitua: int32_t maxValue = static_cast<int32_t>(Weapons::getMaxWeaponDamage(player->getLevel(), player->getResets(), attackSkill, attackValue, attackFactor) * player->getVocation()->distDamageMultiplier); COMFIGMANAGER.CPP procure: integer[RATE_SPAWN] = getGlobalNumber(L, "rateSpawn", 1); adicione abaixo: integer[MELEE_RES_DAM] = getGlobalNumber(L, "MeleeDamResMult", 10); integer[MAGIC_RES_DAM] = getGlobalNumber(L, "MagicDamResMult", 10); CONFIGMANAGER.H procure: RATE_SPAWN, adicione baixo: MELEE_RES_DAM, MAGIC_RES_DAM, LUASCRIPT.CPP procure: registerEnumIn("configKeys", ConfigManager::RATE_SPAWN) adicione abaixo: registerEnumIn("configKeys", ConfigManager::MELEE_RES_DAM) registerEnumIn("configKeys", ConfigManager::MAGIC_RES_DAM) Depois adicione no config.lua do seu servidor: -- Reset -- NOTE: % of damage for reset MeleeDamResMult = 100 MagicDamResMult = 100 Dessa forma cada resete o dano do player vai aumentar 100% em hit e 100% em magia.
  8. Npc para o sistema de reset: http://www.xtibia.com/forum/topic/238305-sistema-de-resetes/ data/npc/ reseter.XML : <?xml version="1.0" encoding="UTF-8"?> <npc name="Reseter" script="reseter.lua"> <health now="1000" max="1000"/> <look type="133" head="95" body="86" legs="86" feet="38" addons="3"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|.I've been waiting for you to come.. Say 'reset' or 'quantity'" /> <parameter key="message_farewell" value="Cya folk." /> <parameter key="message_walkaway" value="How Rude!" /> </parameters> </npc> data/npc/scripts reseter.lua : local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if not npcHandler:isFocused(cid) then return false end local player = Player(cid) config = { minlevel = 150, --- Level inical para resetar price = 10000, --- Preço inicial para resetar newlevel = 20, --- Level após reset priceByReset = 0, --- Preço acrescentado por reset percent = 10, ---- Porcentagem da vida/mana que você terá ao resetar (em relação à sua antiga vida total) maxresets = 50, ---- Maximo de resets levelbyreset = 0 --- Quanto de level vai precisar a mais no próximo reset } function addReset(cid) player = Player(cid) resets = player:getResets() hp = player:getMaxHealth() resethp = hp*(config.percent/100) player:setMaxHealth(resethp) mana = player:getMaxMana() resetmana = mana*(config.percent/100) player:setMaxMana(resetmana) playerid = player:getGuid() player:remove() db.query("UPDATE `players` SET `resets`="..resets.. + 1",`experience`= 0 WHERE `players`.`id`= ".. playerid .."") db.query("UPDATE `players` SET `level`="..config.newlevel..",`experience`= 0 WHERE `players`.`id`= ".. playerid .."") return true end local newPrice = config.price + (getResets(cid) * config.priceByReset) local newminlevel = config.minlevel + (getResets(cid) * config.levelbyreset) if msgcontains(msg, 'reset') then if getResets(cid) < config.maxresets then npcHandler:say('You want to reset your character? It will cost '..newPrice..' gp\'s!', cid) npcHandler.topic[cid] = 1 else npcHandler:say('You already reached the maximum reset level!', cid) end elseif msgcontains(msg, 'yes') and npcHandler.topic[cid] == 1 then if player:getLevel() > newminlevel then if player:removeMoney(newPrice) then addEvent(function() if isPlayer(cid) then addReset(cid) end end, 3000) local number = getResets(cid)+1 local msg ="---[Reset: "..number.."]-- You have reseted! You'll be disconnected in 3 seconds." player:popupFYI(msg) npcHandler.topic[cid] = 0 npcHandler:releaseFocus(cid) else npcHandler:say('Its necessary to have at least '..newPrice..' gp\'s for reseting!', cid) npcHandler.topic[cid] = 0 end else npcHandler:say('The minimum level for reseting is '..newminlevel..'!', cid) npcHandler.topic[cid] = 0 end elseif(msgcontains(msg, 'no')) and isInArray({1}, talkState[talkUser]) == TRUE then npcHandler.topic[cid] = 0 npcHandler:releaseFocus(cid) npcHandler:say('Ok.', cid) elseif msgcontains(msg, 'quantity') then npcHandler:say('You have a total of '..getResets(cid)..' reset(s).', cid) npcHandler.topic[cid] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Para configurar mexa nessa parte do npc : config = { minlevel = 150, --- Level inical para resetar price = 10000, --- Preço inicial para resetar newlevel = 20, --- Level após reset priceByReset = 0, --- Preço acrescentado por reset percent = 10, ---- Porcentagem da vida/mana que você terá ao resetar (em relação à sua antiga vida total) maxresets = 50, ---- Maximo de resets levelbyreset = 0 --- Quanto de level vai precisar a mais no próximo reset } Créditos: Flavio S
  9. E aí galera, beleza? Venho trazer esse script aqui que eu encontrei num server que eu baxei (não sei quem é o autor), e achei muito interessante. O que ele faz? Se você for GOD, ele cria um TP com as coordenadas digitadas no param da talkaction na sua frente, desde que a posição na sua frente não seja um player ou um item não~tile. function onSay(player, words, param) if player:getAccountType() < ACCOUNT_TYPE_GOD then return true end local split = param:split(",") if tonumber(split[3]) == nil then player:sendCancelMessage("Insufficient parameters.") return false end local msg = nil for i = 1, #split do split[i] = tonumber(split[i]) end local direction = { [0] = function(ps) ps.y = ps.y - 1 return ps end, [1] = function(ps) ps.x = ps.x + 1 return ps end, [2] = function(ps) ps.y = ps.y + 1 return ps end, [3] = function(ps) ps.x = ps.x - 1 return ps end } local teleporter = direction[player:getDirection()](player:getPosition()) if isCreature(Tile(teleporter):getTopCreature()) then msg = "You cannot create a teleport on top of a player." end if Tile(teleporter):getTopDownItem() then msg = "You cannot create a teleport on top of an item." end if not msg then msg = "Teleport created to cordinates: {X: "..split[1].." Y: "..split[2].." Z: "..split[3].."}." doCreateTeleport(1387, {x = split[1], y = split[2], z = split[3]}, teleporter) end player:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, msg) return falseend Créditos: ???, se alguém souber favor dizer
  10. Tulio271

    AJUDA

    Mudei meu server pata TFS 1.2 versão 10.91 e esse script aqui nao funciona alguem poderia arrumar para min? function onSay(cid, words, param)local config = {pz = false, -- players precisam estar em protection zone para usar? (true or false)battle = true, -- players deve estar sem battle (true or false)custo = false, -- se os teleport irão custa (true or false)need_level = false, -- se os teleport irão precisar de level (true or false)vip = false -- se precisa ser premium account (true or false)}--[[ Config lugares]]--local lugar = {["demolay"] ={ -- pos = {x=1229, y=990, z=7},level = 1,price = 0},["fidelitas"] ={ --pos = {x=1023, y=1026, z=7},level = 1,price = 0},["shopping"] ={ -- pos = {x=1044, y=1052, z=7},level = 1,price = 0},["tpfree"] = { --pos = {x=1108, y=998, z=7},level = 1,price = 0},["tpfree2"] = { --pos = {x=1248, y=1070, z=7},level = 1,price = 0},["tpvip2"] = { --pos = {x=1249, y=1064, z=7},level = 1,price = 0},["tpvip"] = { -- pos = {x=1108, y=1028, z=7},level = 1,price = 0},} local a = lugar[param]if not(a) thendoPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "As cidades que você pode ir são: demolay, fidelitas")doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Os lugares que você pode ir são: shopping, tpfree, tpfree2, tpvip, tpvip2")doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF)return TRUEelseif config.vip == true and not isVip(cid) thendoPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Apenas contas vip tem esse recurso.")return TRUEelseif config.battle == true and getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE thendoPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não pode se teleportar em uma batalha.")return TRUEenddoSendMagicEffect(getPlayerPosition(cid),27)doTeleportThing(cid, a.pos)doSendMagicEffect(getPlayerPosition(cid),40)return TRUEend
  11. Galera, Há muito tempo eu havia sumido do mundo de tibia e otserv devido a vida profissional ter tomado muito de meu tempo. Durante este tempo que fiquei por aqui trabalhei em um projeto em cima do servidor opensource que eu mantinha (Vanaheim) e fiz uma versão onde tirei todas as missions e implementei alguns sistemas e paguei um desenvolvedor para fazer outros. Alguns sistemas: - Reward Chest - Equip Hotkey - Blessings - Citywars (War Antientrosa) - Tibia Store Acho um desperdício isto estar como conteúdo privado então vou disponibilizar na comunidade todo o conteúdo. Mapa global completo com sistemas integrados e Dawnport: https://github.com/brunominervino/Lucera Repositório com sistemas separados: https://github.com/brunominervino/tfs_systems Creio que não precise de scan pois os projetos estão no Github. OBS: Não atenderei nenhum pedido de suporte, até porque não tenho tempo, minha intenção é que alguém dê seguimento
  12. Segue imagem do problema, a Outfits *todas* estão com a animação padrão, parada travada no move Agora que conseguir finalmente compilar o TFS 1.2 no windows, como eu faço para que o cliente não seja o 10.77, mas sim um de minha preferencia? É possível eu mudar a versão do cliente, não encontro nas pesquisas, não sei se tem outro nome para isso @Edit Dá para criar minha "própria" versão do cliente de forma que o OTC, Server reconheça e conecte?
  13. eae pessoal do xtibia, aqui esta um script reformulado que um membro deixou no xtibia a muito tempo. nesse script o tibia irar se tornar mais "real", Tornando possível levar dano de frio ou calor, funciona basicamente assim, dependendo da sua roupa e sua altura no tibia (em Z, subsolo e acima do solo) você irar ganhar temperatura, e quando chegar a uma certa temperatura você irar levar dano, ex: eu desci ate o fundo, onde e muito frio portanto se eu não tiver uma roupa quente o suficiente vou levar dano de frio. sem mais delongas vamos ao script ~~ #Instalação infelizmente eu não consegui adaptar tudo, principalmente a parte do movements, se alguém conseguir agradeceria se postasse #Créditos Pc98 Autor do script. @patrickjean Por disponibilizar no Xtibia a base que eu usei > link < @Noock por quase nada.
  14. Alguém pode me ajudar, pra quando der look na pessoa mostrar quantos resets ela tem? eu uso um systema de reset que puxa pela database, a tabela resets. tfs 1.2
  15. Olá! Existe alguma função que dobre o loot de um determinado monstro? Ex: local monster = {"rat", "demon", "goblin"} preciso saber se existe uma função que dobre o loot dos monstros acima... só preciso da função, o resto eu sei fazer... desde-já, obrigado! TFS 1.2
  16. Olá, eu gostaria de saber como faço para criar um otserver do zero... sou designer grafico e jogo tibia a 7 anos e ja montei um otserver na versao 8.6 e dei uma parada por um tempo e gostaria de criar um otserver global na versão atual mais não sei como botar online. Gostaria de saber também alguns requisitos minimos para rodar o ot, meu pc sempre fica ligado por que to sempre trabalhando editando... Eu me interessei nesse map aqui GLOBAL FULL XTIBIA 10.96 com os seguintes downloads: Datapack/Servidor 10.96 - (Atualizado 07/07) Sources/EXE-DLL com cast 10.96 (Atualizado 19/07) Website compativel 100% (Atualizado 27/05)Database (Atualizado 07/07) eu queria saber como faço pra organizar tudo em uma pasta e e deixar so no ponto de abrir, até mesmo pra ver ele offline. Pretendo colocar um otserver sério e buscar sempre está divulgando com minhas edições graficas, chamando jogadores e fazendo eventos no jogo... quem puder me ajudar eu agradeceria muito. vlw !
  17. Estou com esse problema ja tentei mudar a creatures, como mostra na imagem de erro e nao consigo abri o boss pra pegar o loot e quando chego no Reward também não está lá o loot alguém pode me ajudar?
  18. Olá, gostaria de saber as melhores bases Open Source para se iniciar um projeto de Poketibia, em vossas opiniões... xD
  19. Gostaria que me ajudassem a adicionar um piso, nessa função, lembrando versão do 10.90 TFS 1.2 !!! Aí é o seguinte, nesse script você quebra a pedra e depois de um certo tempo aparece uma outra pedra no lugar da que foi quebrada, porém quando aparece a pedra, também aparece um buraco preto e eu quero adicionar um piso para que o script tenha looping, sem o piso o item de pedra não da spawn. Explicando melhor: 1º o chão tem a pedra normal 2º bati na pedra e ela quebrou retornando gold nuggets 3º a pedra vai spawnar! 4º mas ela volta com um buraco preto nela. 5º quando quebro a pedra com esse buraco ela não volta!!!! 6º preciso quebrar a pedra e adicionar um chão para ela novamente quando chegar na função doTransformItem eu creio que o chão fica preto por causa disso e se eu remover essa função a pedra não volta e não aparece nada no chão! Veja na imagem!!!! function event_rockGrow(rockPos, old_id) local rock = (getThingfromPos(rockPos).uid) doTransformItem(rock, old_id) doSendMagicEffect(rockPos, 3)end Script original:
  20. Gostaria de saber se alguém tem como me ajuda com isso, quero que o shop admin adicione tibia coins no lugar de points,
  21. Olá XTibianos, Me chamo Rodrigo, sou novo nisso tudo e estou entrando de cabeça para estudar em geral o processo de um OTserv. Não consigo estudar os Otservs que existem aqui no Xtibia por serem muitos antigos, modificados, com erros ou sem sources. Por isso eu estou tentando compilar um TFS 100% limpo (consegui), também compilar o Server (vou fazer isso agora), como sou leigo, ainda não entendi se ao compilar o server GIT do SERVER, vou receber apenas as pastas e configs, caso seja isso, onde eu posso conseguir as DLLs para rodar o servidor? Estou trabalhando com arquitetura x64 Como falei no início, o meu objetivo é estudar, tenho uma noção básica de programação e quero fazer modificações de todos os níveis em um OTServ gradualmente. Então quem entende do assunto, se puder me resumir uma explicação de como gerar um "OT limpo", como conseguir as DLLs sem ter que pegar de outro server, assim como peguei o TFS e SERVER original. Aproveitando, como posso descobrir a versão do Tibia do TFS? GIT do TFS??? Consigo trabalhar com esse TFS em qualquer versão do Tibia sem bugs no cliente? Por último, qual a melhor versão de Tibia para se trabalhar, considerando a versão do cliente, sources etc... Em termos de possibilidades, customizações. Obrigado, peço desculpas se estiver na área errada. Sim, já li alguns bons tutoriais, já sei como rodar um OT, mudar mapa, sprites, criar sistemas.
  22. Olá galera, bem... Estou explorando a área de Programação pois achei bem interessante, e sempre gostei desta areá e, estava vendo uns tutoriais aqui, outros ali, e gostaria que alguém me explicasse para que server isto: function "OnUse()"... XD
  23. Olá galera, queria saber se alguém pode fazer ou me auxiliar a fazer uma magia de clone? Ela funcionará assim: Vai clonar a outfit, vida, e nome do personagem que a usar, o dano é baseado no skill do player que a usar, exemplo ele tem skill 100, o clone usa 50% do skill, ou seja, skill 50. Alguém tem ideia de como fazer isso?
  24. Olá amigos, eu preciso de sua ajuda, porque eu estou criando um servidor do TFS 1.2 e é mysql versão 10.76. Meu problema é que quando eu abri-lo e colocar o ip eu recebo: erro de conexão falhou e amigos se eles podem obter. Menos eu. Iria me ajudar por favor? Para este problema deveria? e como resolvido?
  25. Quero aprender Traduzir meu servidor 860 alguém ajuda pfv nunca consegui fazer essas coisas de sorce
×
×
  • Create New...