Tudo que arthurluna postou
-
GOD ANONIMO - HELP CHAT !
Vou verificar, se conseguir eu disponibilizo
-
[PEDIDO] Como adicionar Paypal no Gesior?
Paypal Html. <b>PayPal Shop System.</b><br><br> The shop costs:<ul><li> 5 EUR (for 7 points)</li><li> 10 EUR (for 15 points)</li><li> 20 EUR (for 32 points)</li><br> <b>Here are the steps you need to make:</b> <br> 1. A PayPal account with a required balance [5, 10 or 20 EUR] or a creditcard. <br> 2. Fill in your account number. <br> 3. Click on the Buy Now button or your creditcard brand. <br> 4. Make a transaction. <br> 5. After the transaction 6, 14 or 31 points will be automatically added to your account. <br> 6. Go to Item shop and use your points <br> <br> <br> </b> <span style="color:red">If you recall the money, and your premiumpoints can't be recalled your account will be deleted</span> <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input type="hidden" name="cmd" value="_xclick"> <input type="hidden" name="business" value="[email protected]"> <input type="hidden" name="lc" value="US"> <input type="hidden" name="item_name" value="Kiltera Premium points"> <b>Account name/login:</b> <input type="text" name="custom" value=""> <select name="amount"> <option value="5.00">5 EUR</option> <option value="10.00">10 EUR</option> <option value="20.00">20 EUR</option> </select> <input type="hidden" name="button_subtype" value="products"> <input type="hidden" name="currency_code" value="EUR"> <input type="hidden" name="no_shipping" value="1"> <input type="hidden" name="currency_code" value="EUR"> <input type="hidden" name="notify_url" value="http://kiltera.vapus.net/paypal/ipn/ipn.php"> <input type="hidden" name="return" value="http://kiltera.vapus.net"> <input type="hidden" name="rm" value="0"> <input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHostedGuest"> <input type="image" src="https://www.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> <img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"> </form> Biografia: http://code.google.com/p/gesior-aac/source/browse/trunk/AAC/?r=81
-
GOD ANONIMO - HELP CHAT !
Skype - ArthurLameque2012 [email protected]
-
Xampp apache nao roda URGEEEENTE!
Olá, Sugiro que o senhor desinstale este seu xampp e instale este disponível. http://www.baixaki.com.br/download/xampp.htm Veja este vídeo: http://tibiaking.com/forum/topic/8861-como-criar-um-site-para-seu-servidor/
-
GOD ANONIMO - HELP CHAT !
Obrigado Madaras....
-
GOD ANONIMO - HELP CHAT !
Nada, Qualquer coisa, disponha se abusar !
-
GOD ANONIMO - HELP CHAT !
Verdade, Obrigado você por me incentivar a aprender mais sobre OT, qualquer duvida só falar que eu estudo pra ajudar a vocês do TK Obrigado Leandro M.
-
GOD ANONIMO - HELP CHAT !
Bom Galera, muita gente anda procurando um script ou tutorial de como colocar o GOD pra falar anonimamente no HELP chat, é eu e meu amigo conseguimos arrumar, então vim posta para o TK, ajudando a todos como sempre.... DIA 1 DE FEVEREIRO INAUGURAÇÃO DO REPLICA DO TIBIA GLOBAL - WOTABR... EM BREVE SITE ESTARÁ DISPONÍVEL Em Game.cpp usa o comando - Ctrl + F e procure por esse script. case MSG_CHANNEL: { if(channelId == CHANNEL_HELP) { if(player->hasFlag(PlayerFlag_TalkOrangeHelpChannel)) type = MSG_CHANNEL_HIGHLIGHT; if(player->hasFlag(PlayerFlag_CanTalkRedChannel)) type = MSG_GAMEMASTER_CHANNEL; } break; } Em seguida troque por este: case MSG_CHANNEL: { if(channelId == CHANNEL_HELP) { if(player->hasFlag(PlayerFlag_TalkOrangeHelpChannel)) type = MSG_CHANNEL_HIGHLIGHT; if(player->hasFlag(PlayerFlag_CanTalkRedChannel)) type = MSG_GAMEMASTER_CHANNEL; if(player->hasFlag(PlayerFlag_CanTalkRedChannelAnonymous)) { if(text.length() < 251) return g_chat.talk(player, type, text, channelId, statementId, true); } } break; } Caso queira deixar o GOD Anonimo em Defaut, Help, Guild, Trade, ou seja, em Geral só usar este script: case MSG_CHANNEL: { if(channelId == CHANNEL_HELP) { if(player->hasFlag(PlayerFlag_TalkOrangeHelpChannel)) type = MSG_CHANNEL_HIGHLIGHT; if(player->hasFlag(PlayerFlag_CanTalkRedChannel)) type = MSG_GAMEMASTER_CHANNEL; } if(player->hasFlag(PlayerFlag_CanTalkRedChannelAnonymous)) { if(text.length() < 251) return g_chat.talk(player, type, text, channelId, statementId, true); } break; } Depois é só compilar e já era CRÉDITOS: Gugahoa ArthurLuna
-
Ajuda funções config.lua
Vlw ! To Aqui pra isso !
-
[Problema] Logar no OT....
Posta fotos do bug relatado, facilita !
-
OTRestarter v2.0.3 [Funções Avançadas!]
Vlw Leandro ! Problema resolvido !
-
Ultimate Tibia Editor
- OTRestarter v2.0.3 [Funções Avançadas!]
Olá Tk, Meu OTRestarter evoluiu desde a última versão 1.0.0, eu melhorei ele algumas vezes sobre e sem liberá-lo aqui devido a alguns comentários ruins última vez. De qualquer forma aqui é com SOPRO recursos! E muito mais na versão 2.0.3! Vamos começar a introdução de OTRestarter v2.0.3 -: | Imagens |: - - Botão Drag'n'Drop! -Visão geral do programa: -Auto-Updater -:| VIRUS SCAN |:- NOTA: Por favor relatar quaisquer bugs Se você encontrou algum. Visite o meu site! AeroSoft Agradecimentos para ver ou fazer download, Aerox Aerox12 ArthurLuna -:| Download |:- https://otrestarter.svn.codeplex.com/svn/- Grizzly Adams (Killing in the name of... Quest) All tasks, 100% Tibi RL
Este é o novo script para matar em nome de ... Quest que eu fiz. Ele inclui recursos para mort real tíbia. características: Você pode começar apenas as tarefas de monitores segundo seu nível e / ou armazenamento Você pode repetir tarefas (Times pode ser alterado) Você pode começar a tarefa 3 ao mesmo tempo (Contagem pode ser alterado) Recompensas são fáceis de configurar e tem um monte de recursos Os tipos de vantagens são: dinheiro / REWARD_MONEY: Dá dinheiro para o jogador. exp experiência / / REWARD_EXP: Dá pontos de experiência para o jogador. realização / ach / REWARD_ACHIEVEMENT: Dá uma conquista para o jogador. Isso funciona com meu sistema de conquistas. armazenamento armazenamento / / REWARD_STORAGE: Dá uma de armazenamento para o jogador. pontos / ponto / REWARD_POINT: Dá pontos Paw & Fur ao jogador. itens / item / objeto / REWARD_ITEM: Dá um item para o jogador. As bandeiras de recompensa são: valor: Aqui você declarar as variáveis para as recompensas. Tamanho da tabela depende do tipo de recompensa. Exemplo: Se o tipo de recompensa = "experiência" então o valor deve ser {1000}. Se o tipo de recompensa = "item" então o valor deve ser {2195, 1} (Itemid, cont) armazenamento: Esta bandeira é usada para definir um armazenamento para o jogador quando ele recebe a recompensa. Utilizado para evitar ser recompensado mais do que uma vez quando a tarefa é repetida. Exemplo: storage = {1250, 1}. Quando o jogador recebe uma recompensa, ele vai obter o armazenamento de 1250 com valor 1 e não receberá a mesma recompensa de novo depois de repetir a mesma tarefa. Você pode verificar as tarefas começou. Você pode verificar quantos pontos Paw & Fur que você tem, e também a sua classificação. Quando um monstro é morto, você receberá uma mensagem de como muitos já mortos. Tarefas nomes são declarados em 'raceName a variável, mas se você quiser dar um nome diferente para o' raceName 'você pode adicionar' nome 'da variável para a tarefa (Você pode ver o exemplo na segunda tarefa de Necromancers e sacerdotisa) Nota: O sistema para matar os patrões não é adicionado aqui. A única coisa que você pode fazer é adicionar uma ação-id para os teleports para chefes de quartos e verificar com um script se o jogador tem x armazenamento Primeiro de tudo, você precisa adicionar esta lib: RANK_NONE = 0 RANK_HUNTSMAN = 1 RANK_RANGER = 2 RANK_BIGGAMEHUNTER = 3 RANK_TROPHYHUNTER = 4 RANK_ELITEHUNTER = 5 REWARD_MONEY = 1 REWARD_EXP = 2 REWARD_ACHIEVEMENT = 3 REWARD_STORAGE = 4 REWARD_POINT = 5 REWARD_ITEM = 6 QUESTSTORAGE_BASE = 1500 KILLSSTORAGE_BASE = 65000 REPEATSTORAGE_BASE = 48950 POINTSSTORAGE = 2500 tasks = { --Tasks for level 6 to 49. [1] = {killsRequired = 100, raceName = "Trolls", level = {6, 19}, premium = true, creatures = {"troll", "troll champion", "island troll", "swamp troll"}, rewards = { {type = "exp", value = {200}}, {type = "money", value = {200}} }}, [2] = {killsRequired = 150, raceName = "Goblins", level = {6, 19}, premium = true, creatures = {"goblin", "goblin assassin", "goblin leader"}, rewards = { {type = "exp", value = {300}}, {type = "money", value = {250}} }}, [3] = {killsRequired = 300, raceName = "Crocodiles", level = {6, 49}, premium = true, creatures = {"crocodile"}, rewards = { {type = "exp", value = {800}}, {type = "achievement", value = {"Blood-Red Snapper"}}, {type = "storage", value = {35000, 1}}, {type = "points", value = {1}} }}, [4] = {killsRequired = 300, raceName = "Badgers", level = {6, 49}, premium = true, creatures = {"badger"}, rewards = { {type = "exp", value = {500}}, {type = "points", value = {1}} }}, [5] = {killsRequired = 300, raceName = "Tarantulas", level = {6, 49}, premium = true, creatures = {"tarantula"}, rewards = { {type = "exp", value = {1500}}, {type = "achievement", value = {"No More Hiding"}}, {type = "storage", value = {35001, 1}}, {type = "points", value = {2}} }}, [6] = {killsRequired = 150, raceName = "Carniphilas", level = {6, 49}, premium = true, creatures = {"carniphila"}, rewards = { {type = "exp", value = {2500}}, {type = "achievement", value = {"Rootless Behaviour"}}, {type = "storage", value = {35002, 1}}, {type = "points", value = {3}} }}, [7] = {killsRequired = 200, raceName = "Stone Golems", level = {6, 49}, premium = true, creatures = {"stone golem"}, rewards = { {type = "exp", value = {2000}}, {type = "points", value = {3}} }}, [8] = {killsRequired = 300, raceName = "Mammoths", level = {6, 49}, premium = true, creatures = {"mammoth"}, rewards = { {type = "exp", value = {4000}}, {type = "achievement", value = {"Meat Skewer"}}, {type = "storage", value = {35003, 1}}, {type = "points", value = {3}} }}, [9] = {killsRequired = 300, raceName = "Gnarlhounds", level = {6, 49}, premium = true, creatures = {"gnarlhound"}, rewards = { {type = "exp", value = {1000}}, {type = "points", value = {2}} }}, [10] = {killsRequired = 300, raceName = "Terramites", level = {6, 49}, premium = true, creatures = {"terramite"}, rewards = { {type = "exp", value = {1000}}, {type = "points", value = {2}} }}, [11] = {killsRequired = 300, raceName = "Apes", level = {6, 49}, premium = true, creatures = {"kongra", "sibang", "merklin"}, rewards = { {type = "exp", value = {1000}}, {type = "points", value = {2}} }}, [12] = {killsRequired = 300, raceName = "Thornback Tortoises", level = {6, 49}, premium = true, creatures = {"thornback tortoise"}, rewards = { {type = "exp", value = {1500}}, {type = "points", value = {2}} }}, [13] = {killsRequired = 300, raceName = "Gargoyles", level = {6, 49}, premium = true, creatures = {"gargoyle"}, rewards = { {type = "exp", value = {1500}} }}, --Tasks for level 50 to 79. [14] = {killsRequired = 300, raceName = "Ice Golems", level = {50, 79}, premium = true, creatures = {"ice golem"}, rewards = { {type = "exp", value = {12000}}, {type = "achievement", value = {"Breaking The Ice"}}, {type = "storage", value = {35004, 1}}, {type = "points", value = {2}} }}, [15] = {killsRequired = 400, raceName = "Quara Scouts", level = {50, 79}, premium = true, creatures = {"quara pincher scout", "quara predator scout", "quara hydromancer scout", "quara constrictor scout", "quara mantassin scout"}, rewards = { {type = "exp", value = {10000}}, {type = "points", value = {2}} }}, [16] = {killsRequired = 400, raceName = "Mutated Rats", level = {50, 79}, premium = true, creatures = {"mutated rat"}, rewards = { {type = "exp", value = {10000}}, {type = "achievement", value = {"Twisted Mutation"}}, {type = "storage", value = {35005, 1}}, {type = "points", value = {2}} }}, [17] = {killsRequired = 250, raceName = "Ancient Scarabs", level = {50, 79}, premium = true, creatures = {"ancient scarab"}, rewards = { {type = "exp", value = {15000}}, {type = "achievement", value = {"Crawling Death"}}, {type = "storage", value = {35006, 1}}, {type = "points", value = {2}} }}, [18] = {killsRequired = 300, raceName = "Wyverns", level = {50, 79}, premium = true, creatures = {"wyvern"}, rewards = { {type = "exp", value = {12000}}, {type = "points", value = {2}} }}, [19] = {killsRequired = 300, raceName = "Lancer Beetles", level = {50, 79}, premium = true, creatures = {"lancer beetle"}, rewards = { {type = "exp", value = {8000}}, {type = "points", value = {2}} }}, [20] = {killsRequired = 400, raceName = "Wailing Widows", level = {50, 79}, premium = true, creatures = {"wailing widow"}, rewards = { {type = "exp", value = {12000}}, {type = "points", value = {3}} }}, [21] = {killsRequired = 250, raceName = "Killer Caimans", level = {50, 79}, premium = true, creatures = {"killer caiman"}, rewards = { {type = "exp", value = {10000}}, {type = "points", value = {2}} }}, [22] = {killsRequired = 300, raceName = "Bonebeasts", level = {50, 79}, premium = true, creatures = {"bonebeast"}, rewards = { {type = "exp", value = {12000}}, {type = "achievement", value = {"Spareribs for Dinner"}}, {type = "storage", value = {35007, 1}}, {type = "points", value = {2}} }}, [23] = {killsRequired = 300, raceName = "Crystal Spiders", level = {50, 79}, creatures = {"crystal spider"}, premium = true, rewards = { {type = "exp", value = {15000}}, {type = "achievement", value = {"Arachnoise"}}, {type = "storage", value = {35008, 1}}, {type = "points", value = {3}} }}, [24] = {killsRequired = 300, raceName = "Mutated Tigers", level = {50, 79}, premium = true, creatures = {"mutated tiger"}, rewards = { {type = "exp", value = {12000}}, {type = "points", value = {2}} }}, --Taks for level 80 to 129. [25] = {killsRequired = 600, raceName = "Underwater Quara", level = {80, 129}, premium = true, creatures = {"quara hydromancer", "quara predator", "quara constrictor", "quara mantassin", "quara pincher"}, rewards = { {type = "exp", value = {15000}}, {type = "achievement", value = {"Back into the Abyss"}}, {type = "storage", value = {35009, 1}}, {type = "points", value = {3}} }}, [26] = {killsRequired = 500, raceName = "Giant Spiders", level = {80, 129}, premium = true, creatures = {"giant spider"}, rewards = { {type = "exp", value = {20000}}, {type = "achievement", value = {"Choking on Her Venom"}}, {type = "storage", value = {35010, 1}}, {type = "points", value = {3}} }}, [27] = {killsRequired = 300, raceName = "Werewolves", level = {80, 129}, premium = true, creatures = {"werewolf"}, rewards = { {type = "exp", value = {30000}}, {type = "achievement", value = {"Howly Silence"}}, {type = "storage", value = {35011, 1}}, {type = "points", value = {4}} }}, [28] = {killsRequired = 400, raceName = "Nightmares", level = {80, 129}, premium = true, creatures = {"nightmare", "nightmare scion"}, rewards = { {type = "exp", value = {25000}}, {type = "achievement", value = {"Dream is Over"}}, {type = "storage", value = {35012, 1}}, {type = "points", value = {3}} }}, [29] = {killsRequired = 600, raceName = "Hellspawns", level = {80, 129}, premium = true, creatures = {"hellspawn"}, rewards = { {type = "exp", value = {25000}}, {type = "achievement", value = {"Scorched Flames"}}, {type = "storage", value = {35013, 1}} }}, [30] = {killsRequired = 800, raceName = "High Class Lizards", level = {80, 129}, premium = true, creatures = {"lizard chosen", "lizard dragon priest", "lizard high guard", "lizard legionnaire"}, rewards = { {type = "exp", value = {30000}}, {type = "achievement", value = {"Zzztill Zzztanding!"}}, {type = "storage", value = {35014, 1}}, {type = "points", value = {3}} }}, [31] = {killsRequired = 600, raceName = "Stampors", level = {80, 129}, premium = true, creatures = {"stampor"}, rewards = { {type = "exp", value = {20000}}, {type = "achievement", value = {"Stepped on a Big Toe"}}, {type = "storage", value = {35015, 1}}, {type = "points", value = {3}} }}, [32] = {killsRequired = 500, raceName = "Brimstone Bugs", level = {80, 129}, premium = true, creatures = {"brimstone bug"}, rewards = { {type = "exp", value = {15000}}, {type = "achievement", value = {"Something Smells"}}, {type = "storage", value = {35016, 1}}, {type = "points", value = {3}} }}, [33] = {killsRequired = 400, raceName = "Mutated Bats", level = {80, 129}, premium = true, creatures = {"mutated bat"}, rewards = { {type = "exp", value = {20000}}, {type = "achievement", value = {"Kapow!"}}, {type = "storage", value = {35017, 1}}, {type = "points", value = {2}} }}, --Tasks for level 130+ [34] = {killsRequired = 650, raceName = "Hydras", level = {130, 9999}, premium = true, creatures = {"hydra"}, rewards = { {type = "exp", value = {30000}}, {type = "achievement", value = {"One Less"}}, {type = "storage", value = {35018, 1}}, {type = "points", value = {3}} }}, [35] = {killsRequired = 800, raceName = "Serpent Spawns", level = {130, 9999}, premium = true, creatures = {"serpent spawn"}, rewards = { {type = "exp", value = {30000}}, {type = "achievement", value = {"Hissing Downfall"}}, {type = "storage", value = {35019, 1}}, {type = "points", value = {4}} }}, [36] = {killsRequired = 500, raceName = "Medusae", level = {130, 9999}, premium = true, creatures = {"medusa"}, rewards = { {type = "exp", value = {40000}}, {type = "achievement", value = {"The Serpent's Bride"}}, {type = "storage", value = {35020, 1}}, {type = "points", value = {5}} }}, [37] = {killsRequired = 700, raceName = "Behemoths", level = {130, 9999}, premium = true, creatures = {"behemoth"}, rewards = { {type = "exp", value = {30000}}, {type = "achievement", value = {"Just Cracked Me Up!"}}, {type = "storage", value = {35021, 1}}, {type = "points", value = {4}} }}, [38] = {killsRequired = 900, raceName = "Sea Serpents and Young Sea Serpents", level = {130, 9999}, premium = true, creatures = {"sea serpent", "young sea serpent"}, rewards = { {type = "exp", value = {30000}}, {type = "achievement", value = {"The Drowned Sea God"}}, {type = "storage", value = {35022, 1}}, {type = "points", value = {4}} }}, [39] = {killsRequired = 250, raceName = "Hellhounds", level = {130, 9999}, premium = true, creatures = {"hellhound"}, rewards = { {type = "exp", value = {40000}}, {type = "achievement", value = {"The Gates of Hell"}}, {type = "storage", value = {35023, 1}}, {type = "points", value = {5}} }}, [40] = {killsRequired = 500, raceName = "Ghastly Dragons", level = {130, 9999}, premium = true, creatures = {"ghastly dragon"}, rewards = { {type = "exp", value = {30000}}, {type = "achievement", value = {"Beautiful Agony"}}, {type = "storage", value = {35024, 1}}, {type = "points", value = {5}} }}, [41] = {killsRequired = 900, raceName = "Drakens", level = {130, 9999}, premium = true, creatures = {"draken spellweaver", "draken warmaster", "draken abomination", "draken elite"} , rewards = { {type = "exp", value = {30000}}, {type = "achievement", value = {"Enter zze Draken!"}}, {type = "storage", value = {35025, 1}}, {type = "points", value = {3}} }}, [42] = {killsRequired = 650, raceName = "Destroyers", level = {130, 9999}, premium = true, creatures = {"destroyer"}, rewards = { {type = "exp", value = {30000}}, {type = "achievement", value = {"Best there was!"}}, {type = "storage", value = {35026, 1}}, {type = "points", value = {4}} }}, [43] = {killsRequired = 400, raceName = "Undead Dragons", level = {130, 9999}, premium = true, creatures = {"undead dragon"}, rewards = { {type = "exp", value = {50000}}, {type = "achievement", value = {"Back from the Dead"}}, {type = "storage", value = {35027, 1}}, {type = "points", value = {6}} }}, --Special tasks. [44] = {killsRequired = 6666, raceName = "Demons", level = {130, 9999}, rank = RANK_ELITEHUNTER, premium = true, creatures = {"demon"}, rewards = { {type = "storage", value = {41300, 1}} --Storage that let's you to start Demon Oak }}, [45] = {killsRequired = 500, raceName = "Green Djinns or Efreets", level = {1, 9999}, storage = {12500, 1}, premium = true, creatures = {"green djinn", "efreet"}, rewards = { --Requires an storage (Gained on The Djinn War - Marid Faction) {type = "exp", value = {10000}}, {type = "money", value = {5000}}, {type = "storage", value = {35028, 1}} }}, [46] = {killsRequired = 500, raceName = "Blue Djinns or Marids", level = {1, 9999}, storage = {12501, 1}, premium = true, creatures = {"blue djinn", "marid"}, rewards = { --Requires an storage (Gained on The Djinn War - Efreet Faction) {type = "exp", value = {10000}}, {type = "money", value = {5000}}, {type = "storage", value = {35029, 1}} }}, [47] = {killsRequired = 3000, raceName = "Pirates", level = {1, 9999}, storage = {12600, 1}, premium = true, creatures = {"pirate ghost", "pirate marauder", "pirate cutthroad", "pirate buccaneer", "pirate corsair", "pirate skeleton"}, rewards = { --Requires an storage (Gained on The Shattered Isles Quest) {type = "exp", value = {10000}}, {type = "money", value = {5000}}, {type = "storage", value = {35030, 1}} }}, [48] = {killsRequired = 3000, raceName = "Pirates second task", level = {1, 9999}, storage = {REPEATSTORAGE_BASE + 47, 3}, norepeatable = true, premium = true, creatures = {"pirate ghost", "pirate marauder", "pirate cutthroad", "pirate buccaneer", "pirate corsair", "pirate skeleton"}, rewards = { --Requires an storage (Gained completing Raymond Striker's first task three times.) NOTE: The required storage to start this task is: base + first pirate task id (47) {type = "exp", value = {10000}}, {type = "money", value = {5000}}, {type = "storage", value = {35031, 1}} }}, [49] = {killsRequired = 5000, raceName = "Minotaurs", level = {1, 40}, storage = {12700, 1}, norepeatable = true, premium = false, creatures = {"minotaur", "minotaur mage", "minotaur archer"}, rewards = { --Requires an storage (Gained on To Outfox a Fox Quest) {type = "storage", value = {35032, 1}} }}, [50] = {killsRequired = 4000, raceName = "Necromancers and Priestess", level = {60, 9999}, norepeatable = true, premium = true, creatures = {"necromancer", "priestess"}, rewards = { --Requires an storage (Gained on To Outfox a Fox Quest) {type = "storage", value = {35033, 1}}, {type = "storage", value = {12800, 1}} --storage to stark the second Necromancers and Priestess task. }}, [49] = {killsRequired = 1000, name = "Necromancers and Priestess second task", raceName = "Necromancers and Priestess", level = {60, 9999}, storage = {12800, 1}, norepeatable = true, premium = true, creatures = {"necromancer", "priestess"}, rewards = { --Requires an storage (Gained on To Outfox a Fox Quest) {type = "exp", value = {40000}}, {type = "storage", value = {35033, 1}} }}, } tasksByPlayer = 3 repeatTimes = 3 function getPlayerRank(cid) return (getPlayerStorageValue(cid, POINTSSTORAGE) >= 100 and RANK_ELITEHUNTER or getPlayerStorageValue(cid, POINTSSTORAGE) >= 70 and RANK_TROPHYHUNTER or getPlayerStorageValue(cid, POINTSSTORAGE) >= 40 and RANK_BIGGAMEHUNTER or getPlayerStorageValue(cid, POINTSSTORAGE) >= 20 and RANK_RANGER or getPlayerStorageValue(cid, POINTSSTORAGE) >= 10 and RANK_HUNTSMAN or RANK_NONE) end function getTaskByName(name, table) local t = (table and table or tasks) for k, v in pairs(t) do if v.name then if v.name:lower() == name:lower() then return k end else if v.raceName:lower() == name:lower() then return k end end end return false end function getTasksByPlayer(cid) local canmake = {} local able = {} for k, v in pairs(tasks) do if getCreatureStorage(cid, QUESTSTORAGE_BASE + k) < 1 and getCreatureStorage(cid, REPEATSTORAGE_BASE + k) < repeatTimes then able[k] = true if getPlayerLevel(cid) < v.level[1] or getPlayerLevel(cid) > v.level[2] then able[k] = false end if v.storage and getCreatureStorage(cid, v.storage[1]) < v.storage[2] then able[k] = false end if v.rank then if getPlayerRank(cid) < v.rank then able[k] = false end end if v.premium then if not isPremium(cid) then able[k] = false end end if able[k] then table.insert(canmake, k) end end end return canmake end function canStartTask(cid, name, table) local v = "" local id = 0 local t = (table and table or tasks) for k, i in pairs(t) do if i.name then if i.name:lower() == name:lower() then v = i id = k break end else if i.raceName:lower() == name:lower() then v = i id = k break end end end if v == "" then return false end if getCreatureStorage(cid, QUESTSTORAGE_BASE + id) > 0 then return false end if (getCreatureStorage(cid, REPEATSTORAGE_BASE + id) >= repeatTimes) or (v.norepeatable and getCreatureStorage(cid, REPEATSTORAGE_BASE + id) > 0) then return false end if getPlayerLevel(cid) >= v.level[1] and getPlayerLevel(cid) <= v.level[2] then if v.premium then if isPremium(cid) then if v.rank then if getPlayerRank(cid) >= v.rank then if v.storage then if getCreatureStorage(cid, v.storage[1]) >= v.storage[2] then return true end else return true end end else return true end end else return true end end return false end function getPlayerStartedTasks(cid) local tmp = {} for k, v in pairs(tasks) do if getCreatureStorage(cid, QUESTSTORAGE_BASE + k) > 0 and getCreatureStorage(cid, QUESTSTORAGE_BASE + k) < 2 then table.insert(tmp, k) end end return tmp end function isSummon(cid) return getCreatureMaster(cid) ~= cid or false end NOTA: Se você usa TFS 0.4Dev você deve fazer isso ou script não vai funcionar: substituindo: function isSummon(cid) return getCreatureMaster(cid) ~= cid or false end Por: function isSummon(cid) return getCreatureMaster(cid) ~= nil or false end Grizzly Adams.xml <?xml version="1.0" encoding="UTF-8"?> <npc name="Grizzly Adams" script="data/npc/scripts/KillingInTheNameOf.lua" access="3" walkinterval="2000" lookdir="2"> <mana now="800" max="800"/> <health now="200" max="200"/> <look type="144" head="97" body="97" legs="94" feet="97" addons="3"/> </npc> data/npc/scripts/KillingInTheNameOf.lua: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 local choose = {} local cancel = {} local available = {} function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE and 0 or cid if isInArray({"tasks", "task", "mission"}, msg:lower()) then local can = getTasksByPlayer(cid) if #can > 0 then local text = "" local sep = ", " table.sort(can, (function(a, b) return (a < b) end)) local t = 0 for _, id in ipairs(can) do t = t + 1 if t == #can - 1 then sep = " and " elseif t == #can then sep = "." end text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep end selfSay("The current task" .. (#can > 1 and "s" or "") .. " that you can choose " .. (#can > 1 and "are" or "is") .. " " .. text, cid) talkState[talkUser] = 0 else selfSay("I don't have any task for you right now.", cid) end elseif msg ~= "" and canStartTask(cid, msg) then if #getPlayerStartedTasks(cid) >= tasksByPlayer then selfSay("Sorry, but you already started " .. tasksByPlayer .. " tasks.", cid) return true end local task = getTaskByName(msg) if task and getCreatureStorage(cid, QUESTSTORAGE_BASE + task) > 0 then return false end selfSay("In this task you must defeat " .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Are you sure that you want to start this task?", cid) choose[cid] = task talkState[talkUser] = 1 elseif msg:lower() == "yes" and talkState[talkUser] == 1 then doCreatureSetStorage(cid, QUESTSTORAGE_BASE + choose[cid], 1) selfSay("Excellent! You can check the status of your task saying report to me.", cid) choose[cid] = nil talkState[talkUser] = 0 elseif msg:lower() == "report" then local started = getPlayerStartedTasks(cid) local finishedAtLeastOne = false local finished = 0 if started and #started > 0 then for _, id in ipairs(started) do if getCreatureStorage(cid, KILLSSTORAGE_BASE + id) >= tasks[id].killsRequired then for _, reward in ipairs(tasks[id].rewards) do print("Rewards loaded") local deny = false if reward.storage then if getCreatureStorage(cid, reward.storage[1]) >= reward.storage[2] then deny = true end end if isInArray({REWARD_MONEY, "money"}, reward.type:lower()) and not deny then doPlayerAddMoney(cid, reward.value[1]) elseif isInArray({REWARD_EXP, "exp", "experience"}, reward.type:lower()) and not deny then doPlayerAddExperience(cid, reward.value[1]) doPlayerSendDefaultCancel(cid, "You gained " .. reward.value[1] .. " experience points.") elseif isInArray({REWARD_ACHIEVEMENT, "achievement", "ach"}, reward.type:lower()) and not deny then if doPlayerAddAchievement then doPlayerAddAchievement(cid, reward.value[1], true) end elseif isInArray({REWARD_STORAGE, "storage", "stor"}, reward.type:lower()) and not deny then doCreatureSetStorage(cid, reward.value[1], reward.value[2]) elseif isInArray({REWARD_POINT, "points", "point"}, reward.type:lower()) and not deny then doCreatureSetStorage(cid, POINTSSTORAGE, getCreatureStorage(cid, POINTSSTORAGE) + reward.value[1]) elseif isInArray({REWARD_ITEM, "item", "items", "object"}, reward.type:lower()) and not deny then doPlayerAddItem(cid, reward.value[1], reward.value[2]) end if reward.storage then doCreatureSetStorage(cid, reward.storage[1], reward.storage[2]) end end if tasks[id].norepeatable then doCreatureSetStorage(cid, QUESTSTORAGE_BASE + id, 2) else doCreatureSetStorage(cid, QUESTSTORAGE_BASE + id, 0) end doCreatureSetStorage(cid, KILLSSTORAGE_BASE + id, 0) if getCreatureStorage(cid, REPEATSTORAGE_BASE + id) < 1 then doCreatureSetStorage(cid, REPEATSTORAGE_BASE + id, 0) end doCreatureSetStorage(cid, REPEATSTORAGE_BASE + id, getCreatureStorage(cid, REPEATSTORAGE_BASE + id) + 1) finishedAtLeastOne = true finished = finished + 1 end end if not finishedAtLeastOne then selfSay("You haven't finished any task yet.", cid) else selfSay("Awesome! you finished " .. (finished > 1 and "various" or "a") .. " task" .. (finished > 1 and "s" or "") .. ". Talk to me again if you want to start a task.", cid) end else selfSay("You haven't started any task yet.", cid) end elseif msg:lower() == "started" then local started = getPlayerStartedTasks(cid) if started and #started > 0 then local text = "" local sep = ", " table.sort(started, (function(a, b) return (a < b) end)) local t = 0 for _, id in ipairs(started) do t = t + 1 if t == #started - 1 then sep = " and " elseif t == #started then sep = "." end text = text .. "{" .. (tasks[id].name or tasks[id].raceName) .. "}" .. sep end selfSay("The current task" .. (#started > 1 and "s" or "") .. " that you started " .. (#started > 1 and "are" or "is") .. " " .. text, cid) else selfSay("You haven't started any task yet.", cid) end elseif msg:lower() == "cancel" then local started = getPlayerStartedTasks(cid) if started and #started > 0 then selfSay("Cancelling a task will make the count restart. Wich task you want to cancel?", cid) talkState[talkUser] = 2 else selfSay("You haven't started any task yet.", cid) end elseif getTaskByName(msg) and talkState[talkUser] == 2 and isInArray(getPlayerStartedTasks(cid), getTaskByName(msg)) then local task = getTaskByName(msg) if getCreatureStorage(cid, KILLSSTORAGE_BASE + task) > 0 then selfSay("You currently killed " .. getCreatureStorage(cid, KILLSSTORAGE_BASE + task) .. "/" .. tasks[task].killsRequired .. " " .. tasks[task].raceName .. ". Cancelling this task will restart the count. Are you sure you want to cancel this task?", cid) else selfSay("Are you sure you want to cancel this task?", cid) end talkState[talkUser] = 3 cancel[cid] = task elseif msg:lower() == "yes" and talkState[talkUser] == 3 then doCreatureSetStorage(cid, QUESTSTORAGE_BASE + cancel[cid], -1) doCreatureSetStorage(cid, KILLSSTORAGE_BASE + cancel[cid], -1) selfSay("You have cancelled the task " .. (tasks[cancel[cid]].name or tasks[cancel[cid]].raceName) .. ".", cid) talkState[talkUser] = 0 elseif isInArray({"points", "rank"}, msg:lower()) then selfSay("At this time, you have " .. getCreatureStorage(cid, POINTSSTORAGE) .. " Paw & Fur points. You " .. (getPlayerRank(cid) == 5 and "are an Elite Hunter" or getPlayerRank(cid) == 4 and "are a Trophy Hunter" or getPlayerRank(cid) == 3 and "are a Big Game Hunter" or getPlayerRank(cid) == 2 and "are a Ranger" or getPlayerRank(cid) == 1 and "are a Huntsman" or "haven't been ranked yet") .. ".", cid) talkState[talkUser] = 0 end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) creaturescripts.xml <event type="kill" name="KillingInTheNameOf" event="script" value="killinginthenameof.lua"/> data/creaturescripts/scripts/killinginthenameof.lua function onKill(cid, target, lastHit) local started = getPlayerStartedTasks(cid) if isPlayer(target) or isSummon(target) then return true end if started and #started > 0 then for _, id in ipairs(started) do if isInArray(tasks[id].creatures, getCreatureName(target):lower()) then if getCreatureStorage(cid, KILLSSTORAGE_BASE + id) < 0 then doCreatureSetStorage(cid, KILLSSTORAGE_BASE + id, 0) end if getCreatureStorage(cid, KILLSSTORAGE_BASE + id) < tasks[id].killsRequired then doCreatureSetStorage(cid, KILLSSTORAGE_BASE + id, getCreatureStorage(cid, KILLSSTORAGE_BASE + id) + 1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, getCreatureStorage(cid, KILLSSTORAGE_BASE + id) .. "/" .. tasks[id].killsRequired .. " " .. tasks[id].raceName .. " already killed.") end end end end return true end login.lua: registerCreatureEvent(cid, "KillingInTheNameOf") Tai Creditos: Darkhaos ArthurLuna - Pela tradução e postagem !- Obsidian Knife 100%
Creaturescripts: <event type="kill" name="SummonKill" event="script" value="obsidianknife.lua"/> <event type="login" name="obs_login" event="script" value="obsidianknife.lua"/> <event type="death" name="ObMonsterCheck" event="script" value="obsidianknife.lua"/> obsidianknife.lua function onLogin(cid) registerCreatureEvent(cid, "SummonKill") return true end function onKill(cid, target) if isMonster(target) and isPlayer(getCreatureMaster(target)) then registerCreatureEvent(target, "ObMonsterCheck") end return true end function onDeath(cid, corpse) doItemSetAttribute(corpse.uid, "aid", 91347) return true end Actions: <action itemid="5908" event="script" value="tools/obsidian_knife.lua"/> local MINOTAUR_LEATHER, LIZARD_LEATHER, GREEN_DRAGON_LEATHER, RED_DRAGON_LEATHER, HARDENED_BONE, BEHEMOTH_FANG = 5878, 5876, 5877, 5948, 5925, 5893 local config = { [3090] = {25, MINOTAUR_LEATHER}, [2871] = {25, MINOTAUR_LEATHER}, [2866] = {25, MINOTAUR_LEATHER}, [2876] = {25, MINOTAUR_LEATHER}, [3104] = {25, GREEN_DRAGON_LEATHER}, [2881] = {25, RED_DRAGON_LEATHER}, [2931] = {25, BEHEMOTH_FANG}, [4256] = {25, LIZARD_LEATHER}, [4259] = {25, LIZARD_LEATHER}, [4262] = {25, LIZARD_LEATHER}, [11285] = {25, LIZARD_LEATHER}, [11277] = {25, LIZARD_LEATHER}, [11269] = {25, LIZARD_LEATHER}, [11273] = {25, LIZARD_LEATHER}, [11281] = {25, LIZARD_LEATHER}, [3031] = {25, HARDENED_BONE} } local pumpkin_items = { [1] = {2683}, [2] = {2688, 50}, [3] = {6571}, [4] = {6492}, [5] = {6574}, [6] = {6526}, [7] = {2096}, [8] = {9005, 20} } local sculpting = { [7441] = {randsize = 4, newid = 7442}, [7442] = {randsize = 5, newid = 7444}, [7444] = {randsize = 6, newid = 7445}, [7445] = {randsize = 7, newid = 7446}, } function onUse(cid, item, fromPosition, itemEx, toPosition) if itemEx.itemid == 8961 then if getPlayerStorageValue(cid, 81279) <= 0 then doCreatureSay(cid, "Happy Halloween!", TALKTYPE_ORANGE_1) doSendMagicEffect(getCreaturePosition(cid), math.random(28,30)) setPlayerStorageValue(cid, 81279, 1) local v = pumpkin_items[math.random(#pumpkin_items)] doPlayerAddItem(cid, v[1], v[2] or 1) else doCreatureSay(cid, "You already used your knife on the corpse.", TALKTYPE_ORANGE_1, false, cid) end return true end -- Sculpting local v = sculpting[itemEx.itemid] if v then if(math.random(v.randsize) == 1) then doTransformItem(itemEx.uid, v.newid) else doRemoveItem(itemEx.uid) doCreatureSay(cid, "The attempt at sculpting failed miserably.", TALKTYPE_ORANGE_1) end doSendMagicEffect(toPosition, CONST_ME_HITAREA) return true end -- summons if itemEx.actionid == 91347 then return doPlayerSendCancel(cid, "You cant skin a summon corpse.") end -- Skinning v = config[itemEx.itemid] if not v then return false elseif math.random(100) <= v[1] then doPlayerAddItem(cid, v[2], 1) doSendMagicEffect(toPosition, CONST_ME_MAGIC_GREEN) else doSendMagicEffect(toPosition, CONST_ME_BLOCKHIT) end doTransformItem(itemEx.uid, itemEx.itemid + 1) doDecayItem(itemEx.uid) return true end Créditos: Cykotitan Lucas Ferraz ArthurLuna- Ajuda funções config.lua
rateStaminaLoss = 1 ------ Perda da taxa da stamina rateStaminaGain = 29 ------Ganho taxa da stamina rateStaminaThresholdGain = 48 ---Ganho da Taxa da Stamina - Não sei exatamente staminaRatingLimitTop = 10 * 60 ----- Limite de Tempo da Stamina staminaRatingLimitBottom = 14 * 60 --- Limite de Quantidade de Tempo da Stamina staminaLootLimit = 14 * 60 --- Limite de loot da stamina -- Account manager accountManager = "yes" -- Abilitar ou desabilitar o acc manager newPlayerChooseVoc = "yes" -- Coloque yes para o player escolher a vocação inicial newPlayerSpawnPosX = 100 -- Onde o novo player criado irá aparecer newPlayerSpawnPosY = 40 -- Onde o novo player criado irá aparecer newPlayerSpawnPosZ = 7 -- Onde o novo player criado irá aparecer newPlayerTownId = 1 -- Cidade em que o novo player irá morar newPlayerLevel = 10 -- Level inicial do novo player newPlayerMagicLevel = 2 -- Ml inicial do novo player generateAccountNumber = "no" -- Gerar accunt number automáticamente na hora de criar o char -- Banishments notationsToBan = 3 -- Notations para banir? warningsToFinalBan = 4 -- Alertas para banir? warningsToDeletion = 5 -- Alertas para deletar banLength = 7 * 24 * 60 * 60 -- Total de dias que o char fica banido finalBanLength = 30 * 24 * 60 * 60 -- Total de dias que o char fica banido em caso de Final Warning ipBanishmentLength = 1 * 24 * 60 * 60 -- Total de tempo que o player fica banido em caso de Ban IP broadcastBanishments = "yes" -- Mostrar para todos do server quando um player é banido killsToBan = 5 -- Quantos o player precisa matar para ser banido maxViolationCommentSize = 200 -- Numero de letras que o Rule Violation deve ter ( Ctrl + R) -- Battle -- NOTE: loginProtectionPeriod is the famous Tibia anti-magebomb system. -- deathLostPercent set to nil enables manual mode. -- showHealingDamageForMonsters inheritates from showHealingDamage. worldType = "pvp" -- Tipo de server. Varia de "pvp", "non-pvp", "pvp-enforced". protectionLevel = 75 -- A partir desse level o player poderá ser atacado por outro player killsToRedSkull = 3 -- Quantos players precisa matar para RedSkull pzLocked = 60 * 1000 -- Tempo de PK, sem matar nenhum player. criticalHitChance = 30 -- Chance em % de um player dar um hit mais alto do que o normal displayCriticalHitNotify = "yes" -- Mostrar a palavra "CRITICAL" quando um player da um critical hit removeWeaponAmmunition = "no" -- Remover bolts, arrows, etc. removeWeaponCharges = "no" -- Remover cargas de armas, Como armas encantadas ou Ice Rapiers removeRuneCharges = "yes" -- Remover cargas de runas timeToDecreaseFrags = 24 * 60 * 60 * 1000 -- Tempo que um frag demora pra desaparecer whiteSkullTime = 15 * 60 * 1000 -- Tempo de PK, se tiver matado um player experienceByKillingPlayers = "no" -- Player ganha experiencia ao matar outro player showHealingDamage = "yes" -- Mostrar quanto um player healou. Exemplo: player usa uma Health potion e sobe uma mensagem +135 showHealingDamageForMonsters = "yes" -- Mesma coisa do exemplo de cima, só que com monstros stopAttackingAtExit = "no" -- Caso o player feche o Tibia ou caia a internet continuar atacando loginProtectionPeriod = 10 * 1000 -- Proteção de login. Exemplo: Player entra no char e não pode ser atacado por 10 segundos deathLostPercent = 7 -- Porcetagem de perda de level em caso de morte stairhopDelay = 2 * 1000 -- O próprio nome já diz. Exemplo: Player desce uma escada e não pode atacar durante 2 segundos gainExperienceColor = 215 -- Cor do numero da Exp. 215 = Branco -- Connection config worldId = 0 ip = "127.0.0.1" -- Seu IP loginPort = 7171 -- Port que você quer que os players se conectem ao seu servidor gamePort = 7172 -- Não mude!!! adminPort = 7171 -- Ainda to pra descobrir statusPort = 7171 -- Ainda to pra descobrir loginTries = 10 -- Tentativas de login, se nessas 10 não conseguir a character list desaparece retryTimeout = 5 * 1000 -- Tempo para aparecer novamente a mensagem de server offline loginTimeout = 60 * 1000 -- Tempo para aparecer a mensagem de server offline maxPlayers = "1000" -- Maximo de players online no server motd = "Bem vindo!" -- Mensagem que aparece antes da Character List displayOnOrOffAtCharlist = "no" -- Mostrar se o player está online ou offline na character list onePlayerOnlinePerAccount = "yes" -- Apenas um player online por account allowClones = 0 -- Clonar char. 0 para não e 1 para sim serverName = "Alissow OTs" -- Nome do server loginMessage = "Bem vindo ao Alissow OTs! Para comprar premium fale !buypremium ." -- Primeira mensagem que aparece quando entra no server statusTimeout = 5 * 60 * 1000 replaceKickOnLogin = "yes" -- Se tiver um online no char o outro que entrar irá kickar o que estava antes. Entendeu? forceSlowConnectionsToDisconnect = "no" -- Forçar conexões lentar a desconectar do server loginOnlyWithLoginServer = "no" -- Database -- NOTE: sqlFile is used only by sqlite database, and sqlKeepAlive by mysql database. -- To disable sqlKeepAlive such as mysqlReadTimeout use 0 value. sqlType = "sqlite" -- Varia de sqlite à Mysql sqlHost = "localhost" sqlPort = 3306 sqlUser = "root" sqlPass = "" sqlDatabase = "theforgottenserver" -- Nome da database do server sqlFile = "forgottenserver.s3db" -- Mesmo do anterior sqlKeepAlive = 0 mysqlReadTimeout = 10 mysqlWriteTImeout = 10 passwordType = "plain" -- Deathlist deathListEnabled = "yes" -- Abilitar o deathlist. Pode ser acessado pelo comando !deathlist "Player maxDeathRecords = 5 -- Mostrar mortes na deathlist -- Guilds ingameGuildManagement = "yes" -- Guild system pelo jogo levelToFormGuild = 75 -- Level para criar guild guildNameMinLength = 4 -- Minimo de tamanho do nome da guild guildNameMaxLength = 22 -- Máximo de tamanho do nome da guild -- Highscores highscoreDisplayPlayers = 15 -- Função highscores, funciona perfeitamente apenas em Mysql updateHighscoresAfterMinutes = 60 -- Houses buyableAndSellableHouses = "yes" -- Abilitar compra e venda de casas houseNeedPremium = "yes" -- Premium para comprar casas bedsRequirePremium = "yes" -- Premium para usar camas levelToBuyHouse = 100 -- Level para comprar houses housesPerAccount = 0 -- Houses por account, 0 para infinito. houseRentAsPrice = "no" -- Hâ? housePriceAsRent = "no" -- Hâ? housePriceEachSquare = 1000 -- Preço de cada SQM (quadrado) da casa houseRentPeriod = "never" -- Periodo de aluguel da casa, Varia de "never", "weekly", "montly" e "daily". (Se não me engano) -- Item usage timeBetweenActions = 200 -- Tempo para executar actions timeBetweenExActions = 1000 -- Tempo para executar actions da pasta Actions checkCorpseOwner = "yes" -- Impedir roubo de loots hotkeyAimbotEnabled = "yes" -- Abilitar hotkeys -- Map -- NOTE: storeTrash costs more memory, but will perform alot faster cleaning. -- useHouseDataStorage usage may be found at README. mapName = "xedegux" -- Nome do map, Aquele da pasta world mapAuthor = "Alissow" -- Autor do map randomizeTiles = "yes" useHouseDataStorage = "no" storeTrash = "yes" cleanProtectedZones = "yes" -- Limpar zonas em PZ -- Startup -- NOTE: defaultPriority works only on Windows and niceLevel on *nix -- coresUsed are seperated by comma cores ids used by server process, -- default is -1, so it stays untouched (automaticaly assigned by OS). defaultPriority = "high" niceLevel = 5 coresUsed = "-1" optimizeDatabaseAtStartup = "yes" removePremiumOnInit = "yes" -- Muted buffer maxMessageBuffer = 4 -- Maximo de mensagens seguidas para dar "mutted" bufferMutedOnSpellFailure = "no" -- Miscellaneous -- NOTE: promptExceptionTracerErrorBox works only with precompiled support feature, -- called "exception tracer" (__EXCEPTION_TRACER__ flag). dataDirectory = "data/" -- Pasta onde está o resto do ot. Padrão Data. kickIdlePlayerAfterMinutes = 15 -- Kickar o player AFK em xx minutos allowChangeOutfit = "yes" -- Players podem mudar outfits allowChangeColors = "yes" -- Players mudam cores do outfit allowChangeAddons = "yes" -- Players mudam addons disableOutfitsForPrivilegedPlayers = "no" -- Significa desabilitar outfits para players privilegiados, não sei como funciona bankSystem = "yes" -- Bank system, Funciona com NPC ou Talkaction saveGlobalStorage = "yes" ghostModeInvisibleEffect = "yes" displaySkillLevelOnAdvance = "yes" -- Mostrar o skill na mensagem quando avança. Exemplo "You advanced in axe fighting. [77] spellNameInsteadOfWords = "no" -- Mostrar nome da Magia ao invés da pronuncia. emoteSpells = "yes" -- Magias em animação. Em laranja expireReportsAfterReads = 1 -- Apagar reports (ctrl + R) se o player fechar ou sair do tibia promptExceptionTracerErrorBox = "yes" storePlayerDirection = "no" playerQueryDeepness = 2 -- Premium-related freePremium = "no" -- Premium gratuita quando cria o char premiumForPromotion = "yes" -- Premium para comprar promotion -- Blessings -- NOTE: blessingReduction* regards items/containers loss. -- eachBlessReduction is how much each bless reduces the experience/magic/skills loss. blessingsOnlyPremium = "yes" -- Blessings apenas para premiums blessingReductionBase = 30 blessingReductionDecreament = 5 eachBlessReduction = 8 -- Rates -- NOTE: experienceStages configuration is located in data/XML/stages.xml. experienceStages = "no" -- Exp stages, configurado em data/XML stages.xml rateExperience = 75 -- Exp Rate rateSkill = 130 -- Skill Rate rateMagic = 95 -- Ml Rate rateLoot = 3 -- Loot rate rateSpawn = 1 -- Spawn rate -- Global save -- NOTE: globalSaveHour means like 03:00, not that it will save every 3 hours, -- if you want such a system please check out data/globalevents/globalevents.xml. globalSaveEnabled = "no" -- Abilitar Global salve, nunca usei mas acho que é algo parecido como o server save do global globalSaveHour = 8 shutdownAtGlobalSave = "yes" cleanMapAtGlobalSave = "no" -- Spawns deSpawnRange = 2 deSpawnRadius = 50 -- Summons maxPlayerSummons = 2 -- Max de monstros que o player pode sumonar teleportAllSummons = "no" -- Teleportar os summons caso o player corra para longe teleportPlayerSummons = "no" -- Mesmo do de cima -- ABAIXO coloque como quiser ownerName = "Alissow" ownerEmail = "[email protected]" url = "http://sotserv.blogspot.com" location = "Brasil" displayGamemastersWithOnlineCommand = "no" -- Mostrar GMs online no comando !online -- Logs -- NOTE: This kind of logging does not work in GUI version. -- For such, please compile the software with __GUI_LOGS__ flag. adminLogsEnabled = "no" displayPlayersLogging = "yes" prefixChannelLogs = "" runeFile = "" outLogName = "" errorLogName = "" truncateLogsonstartup = "no"- SharpMapTracker 9.61-9.81 Perfect
Se estiver na áreas errada movam por favor. características Suporta Tibia 9,61-9,81 Rastrear a partir de arquivos Tibiacast Acompanhar spawns criatura Acompanhar discursos NPCs Acompanhe itens NPCs loja Acompanhar vozes NPCs Auto Atendimento para NPC com base em palavras-chave Em tempo real minimap espectador Salvar como OTBM Reordenar os itens de azulejo (Corrigir problemas de fronteira) Converter tipos de fluidos Tibia para tipos de fluidos OpenTibia Carregar Mapas OTBM v0.5 Changelist Adicionado NPC talk auto Adicionado inteligente desova rastreador Acompanhe itens NPCs loja Acompanhar vozes NPCs Outras pequenas correções Changelist v0.6 Adicionado suporte para carregar arquivos OTBM Faixa desova fixo Adicionado "azulejos Retrack" opção Adicionado "Destaque azulejos faltantes" opition Outras pequenas correções v0.7 Changelist Adicionado suporte para Tibia 9,70 Outras pequenas correções v0.8 Changelist Adicionado suporte para Tibia 9,70 Outras pequenas correções v0.8.1 Changelist Adicionado suporte para gravações mais recentes Tibiacast (v4.9) uso Copie o items.otb para a pasta rastreador Abra o rastreador Clique no cliente de carga Escolha um cliente aberto ou abrir um novo requisitos . Net Framework 4 Downloder: http://www.mediafire.com/?uhgechygayl63gz Source: http://www.mediafire.com/?hu7a77ltwyalq75 Credits: Bruno D Jo3Bingham Arthurluna- [Resolvido][Duvida] Vendendo sv
Como o TK é um site de Open Tibia, ele comprou um servidor e posto free, sem custo nem um... Leia e releia o tópico dele. Ele momento algum comercializou algo que comprou. No caso do Beeki, ele comentou que tem o server, e não anunciou valor nem um...No caso se tivesse comentado quando era o valor, ou postado sobre o Sever com anuncio de venda, o tópico em si seria fechado...- [Resolvido][Duvida] Vendendo sv
Tibiaking, foi criado no intuito de Open Tibia Server, Não pra comercio de Otserver, estamos aqui para sanar duvidas, para esclarecimentos e muito mais.... Se anunciar algo como compra ou vendar, será advertido pelos Administradores do Site...Use fórum que tem permissão para esse tipo de anuncio.- Comandos IP Tables / Database Comandas
Ok, Pode deixar !- Comandos IP Tables / Database Comandas
Vocês se preocupam mais com os créditos do que o conteúdo Emprisionante Créditos: Talaturen War System by Elf Don daniello Cykotitan - Stian Arthur Luna- Ban / Unban 9.x + 100% Perfect [Install]
Esse script tirei do Projeto do Lucas Ferraz que tenho aqui no meu PC...Se foi ele que fez não tenho a certeza, mesmo assim vou por. Créditos: Lucas Ferraz Arthur Luna- Comandos IP Tables / Database Comandas
Só server em Linux, não sei exatamente como para que funciona cada comando, se tiver alguém que esclareça é melhor, será reputado também. iptables -N conn-flood iptables -I INPUT 1 -p tcp --syn -j conn-flood iptables -A conn-flood -m limit --limit 7/s --limit-burst 20 -j RETURN iptables -A conn-flood -j DROP iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT iptables -A INPUT -p icmp -j DROP echo "Block TCP-CONNECT scan attempts (SYN bit packets)" iptables -A INPUT -p tcp --syn -j DROP echo "Block TCP-SYN scan attempts (only SYN bit packets)" iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH SYN -j DROP echo "Block TCP-FIN scan attempts (only FIN bit packets)" iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN -j DROP echo "Block TCP-ACK scan attempts (only ACK bit packets)" iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH ACK -j DROP echo "Block TCP-NULL scan attempts (packets without flag)" iptables -A INPUT -m conntrack --ctstate INVALID -p tcp --tcp-flags ! SYN,RST,ACK,FIN,URG,PSH SYN,RST,ACK,FIN,URG,PSH -j DROP echo "Block "Christmas Tree" TCP-XMAS scan attempts (packets with FIN, URG, PSH bits)" iptables -A INPUT -m conntrack --ctstate NEW -p tcp --tcp-flags SYN,RST,ACK,FIN,URG,PSH FIN,URG,PSH -j DROP echo "Block DOS - Ping of Death" iptables -A INPUT -p ICMP --icmp-type echo-request -m length --length 60:65535 -j ACCEPT echo "Block DOS - Teardrop" iptables -A INPUT -p UDP -f -j DROP echo "Block DDOS - SYN-flood" iptables -A INPUT -p TCP --syn -m iplimit --iplimit-above 9 -j DROP echo "Block DDOS - Smurf" iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP iptables -A INPUT -p ICMP --icmp-type echo-request -m pkttype --pkttype broadcast -j DROP iptables -A INPUT -p ICMP --icmp-type echo-request -m limit --limit 3/s -j ACCEPT echo "Block DDOS - UDP-flood (Pepsi)" iptables -A INPUT -p UDP --dport 7 -j DROP iptables -A INPUT -p UDP --dport 19 -j DROP echo "Block DDOS - SMBnuke" iptables -A INPUT -p UDP --dport 135:139 -j DROP iptables -A INPUT -p TCP --dport 135:139 -j DROP echo "Block DDOS - Connection-flood" iptables -A INPUT -p TCP --syn -m iplimit --iplimit-above 3 -j DROP echo "Block DDOS - Fraggle" iptables -A INPUT -p UDP -m pkttype --pkt-type broadcast -j DROP iptables -A INPUT -p UDP -m limit --limit 3/s -j ACCEPT echo "Block DDOS - Jolt" iptables -A INPUT -p ICMP -f -j DROP Database Comandos. -------------------------------------------------------------------- DROP USER 'pma'@'localhost'; -------------------------------------------------------------------- ALTER TABLE `players` ADD `exphist_lastexp` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist1` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist2` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist3` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist4` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist5` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist6` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist7` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetimetoday` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime1` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime2` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime3` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime4` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime5` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime6` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime7` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetimeall` BIGINT( 255 ) NOT NULL DEFAULT '0'; -------------------------------------------------------------------- UPDATE `players` SET `exphist_lastexp`=`players`.`experience` -------------------------------------------------------------------- CREATE TABLE IF NOT EXISTS `bounty_hunters` ( `id` int(11) NOT NULL auto_increment, `fp_id` int(11) NOT NULL, `sp_id` int(11) NOT NULL, `k_id` int(11) NOT NULL, `added` int(15) NOT NULL, `prize` bigint(20) NOT NULL, `killed` int(11) NOT NULL, `kill_time` int(15) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -------------------------------------------------------------------- ALTER TABLE `guilds` ADD `invited_to` INT( 11 ) NOT NULL , ADD `invited_by` INT( 11 ) NOT NULL , ADD `in_war_with` INT( 11 ) NOT NULL , ADD `kills` INT( 11 ) NOT NULL , ADD `show` SMALLINT( 1 ) NOT NULL , ADD `war_time` INT( 11 ) NOT NULL ; -------------------------------------------------------------------- CREATE TABLE `deaths_in_wars` ( `guild_id` INT( 11 ) NOT NULL , `player_id` INT( 11 ) NOT NULL , `killer_guild` INT( 11 ) NOT NULL , `killer` INT( 11 ) NOT NULL , `date` INT( 11 ) NOT NULL , `result1` INT( 11 ) NOT NULL , `result2` INT( 11 ) NOT NULL ) ENGINE = MYISAM ; -------------------------------------------------------------------- UPDATE `guilds` SET `invited_to` = 0, `invited_by` = 0, `in_war_with` = 0, `kills` = 0, `show` = 0, `war_time` = 0 WHERE `id` > 0; -------------------------------------------------------------------- Change Temple position UPDATE Players SET posx =32360, posy =31782, posz =7; -------------------------------------------------------------------- UPDATE accounts SET premdays=4500; -------------------------------------------------------------------- Database Cleanup DELETE FROM players WHERE level < 20 AND lastlogin < UNIX_TIMESTAMP() - 15*24*60*60 DELETE FROM players WHERE deleted = 1; DELETE FROM player_deaths WHERE player_id NOT IN (SELECT id FROM players); DELETE FROM player_depotitems WHERE player_id NOT IN (SELECT id FROM players); DELETE FROM player_items WHERE player_id NOT IN (SELECT id FROM players); DELETE FROM player_skills WHERE player_id NOT IN (SELECT id FROM players); DELETE FROM player_spells WHERE player_id NOT IN (SELECT id FROM players); DELETE FROM player_storage WHERE player_id NOT IN (SELECT id FROM players); DELETE FROM player_viplist WHERE player_id NOT IN (SELECT id FROM players); -------------------------------------------------------------------- Bless for all UPDATE `players` SET `blessings`=31; -------------------------------------------------------------------- •Remove a specific item (here id 2160) completely from the game (depot, players, houses) DELETE FROM player_depotitems, player_items, tile_items WHERE itemtype = 2160; -------------------------------------------------------------------- •Delete all items from player id. DELETE FROM `player_depotitems` , `player_items` WHERE `player_id` = '1234' -------------------------------------------------------------------- •Select all PageAcces higher than zero. SELECT * FROM `accounts` WHERE `page_access` > 0 LIMIT 0 , 30 -------------------------------------------------------------------- •Select all Gamemaster. SELECT * FROM `players` WHERE `group_id` > 1 LIMIT 0 , 30 -------------------------------------------------------------------- ALTER TABLE players AUTO_INCREMENT = 7; -------------------------------------------------------------------- SET GLOBAL max_allowed_packet = 16776192; -------------------------------------------------------------------- ALTER TABLE `guilds` ADD `wins` INT NOT NULL DEFAULT '0'; ALTER TABLE `guilds` ADD `losses` INT NOT NULL DEFAULT '0'; ALTER TABLE `guilds` ADD `draws` INT NOT NULL DEFAULT '0'; --------------------------------------------------------------------. Resete Database Comando UPDATE `ot`.`players` SET `level` = '8', `health` = '180', `healthmax` = '180', `experience` = '4200', `mana` = '35', `manamax` = '35', `cap` = '400' UPDATE `ot`.`players_skills` SET `value` = '10' War System 100% Database Comando ------------------------------------------------------- CREATE TABLE IF NOT EXISTS `guild_wars` ( `id` INT NOT NULL AUTO_INCREMENT, `guild_id` INT NOT NULL, `enemy_id` INT NOT NULL, `begin` BIGINT NOT NULL DEFAULT '0', `end` BIGINT NOT NULL DEFAULT '0', `frags` INT UNSIGNED NOT NULL DEFAULT '0', `payment` BIGINT UNSIGNED NOT NULL DEFAULT '0', `guild_kills` INT UNSIGNED NOT NULL DEFAULT '0', `enemy_kills` INT UNSIGNED NOT NULL DEFAULT '0', `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `status` (`status`), KEY `guild_id` (`guild_id`), KEY `enemy_id` (`enemy_id`) ) ENGINE=InnoDB; --------------------------------------------------------------- ALTER TABLE `guild_wars` ADD CONSTRAINT `guild_wars_ibfk_1` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_wars_ibfk_2` FOREIGN KEY (`enemy_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE; --------------------------------------------------------------- ALTER TABLE `guilds` ADD `balance` BIGINT UNSIGNED NOT NULL AFTER `motd`; ------------------------------------------------------------------ CREATE TABLE IF NOT EXISTS `guild_kills` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `guild_id` INT NOT NULL, `war_id` INT NOT NULL, `death_id` INT NOT NULL ) ENGINE = InnoDB; ------------------------------------------------------------------------------- ALTER TABLE `guild_kills` ADD CONSTRAINT `guild_kills_ibfk_1` FOREIGN KEY (`war_id`) REFERENCES `guild_wars` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_kills_ibfk_2` FOREIGN KEY (`death_id`) REFERENCES `player_deaths` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_kills_ibfk_3` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE; ------------------------------------------------------------------------------------ ALTER TABLE `killers` ADD `war` INT NOT NULL DEFAULT 0; --------------------------------------------------------------------------------------- Advanced Ban/Unban System !
- Ban / Unban 9.x + 100% Perfect [Install]
Bom Galera venho trazer pra você que possuem servidores 9.x+ que o Ban ou Unban não funciona... <talkaction log="yes" words="/unban" access="3" event="script" value="unban.lua"/> <talkaction log="yes" words="/ban" access="2" event="script" value="ban.lua"/> Unban.lua function onSay(cid, words, param, channel) if(param == '') then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.") return true end local account, tmp = getAccountIdByName(param), false if(account == 0) then account = getAccountIdByAccount(param) if(account == 0) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player or account '" .. param .. "' does not exists.") return true end tmp = true end local ban = getBanData(account, BAN_ACCOUNT) if(ban and doRemoveAccountBanishment(account)) then local name = param if(tmp) then name = account end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, name .. " has been " .. (ban.expires == -1 and "undeleted" or "unbanned") .. ".") end if(tmp) then return true end tmp = getIpByName(param) if(isIpBanished(tmp) and doRemoveIpBanishment(tmp)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "IP Banishment on " .. doConvertIntegerToIp(ip) .. " has been lifted.") end local guid = getPlayerGUIDByName(param, true) if(guid == nil) then return true end ban = getBanData(guid, BAN_PLAYER, PLAYERBAN_LOCK) if(ban and doRemovePlayerBanishment(guid, PLAYERBAN_LOCK)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Namelock from " .. param .. " has been removed.") end ban = getBanData(guid, BAN_PLAYER, PLAYERBAN_BANISHMENT) if(ban and doRemovePlayerBanishment(guid, PLAYERBAN_BANISHMENT)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, param .. " has been " .. (ban.expires == -1 and "undeleted" or "unbanned") .. ".") end return true end ban.lua local TYPE_ACCESS = { [1] = { "Player" }, [2] = { "Player" }, [3] = { "Account", "Player" }, [4] = { "Account", "Player" }, [5] = { "Account", "Player", "IP" } } function onSay(cid, words, param, channel) unregisterCreatureEventType(cid, "channelrequest") unregisterCreatureEventType(cid, "textedit") doPlayerSendChannels(cid, TYPE_ACCESS[getPlayerAccess(cid)]) registerCreatureEvent(cid, "Ban_Type") return true end Agora vamos em data/creaturescripts <event type="channelrequest" name="Ban_Type" event="script" value="ban/type.lua"/> <event type="channelrequest" name="Ban_Action" event="script" value="ban/action.lua"/> <event type="textedit" name="Ban_Finish" event="script" value="ban/finish.lua"/> action.lua local ACCESS = { [1] = { 8 }, [2] = { 1, 2, 4, 5, 7, 9 }, [3] = { 1, 2, 3, 4, 5, 6, 7, 9 }, [4] = { 1, 2, 3, 4, 5, 6, 7, 9 }, [5] = { 1, 2, 3, 4, 5, 6, 7, 9 } } function onChannelRequest(cid, channel, custom) unregisterCreatureEvent(cid, "Ban_Action") if(not custom or type(channel) ~= 'number') then doPlayerSendCancel(cid, "Invalid action.") return false end if(not isInArray(ACCESS[getPlayerAccess(cid)], channel)) then doPlayerSendCancel(cid, "You cannot do this action.") return false end local output = "Name:\n\nComment:\n" if(isInArray({1, 5}, channel)) then output = "Name:\n\n(Optional) Length:\n\nComment:\n" end doShowTextDialog(cid, 2599, output, true, 1024) doCreatureSetStorage(cid, "banConfig", table.serialize({ type = (channel > 4 and 2 or 1), subType = channel })) registerCreatureEvent(cid, "Ban_Finish") return false end finish.lua local config = { banLength = getConfigValue('banLength'), finalBanLength = getConfigValue('finalBanLength'), ipBanLength = getConfigValue('ipBanLength'), notationsToBan = getConfigValue('notationsToBan'), warningsToFinalBan = getConfigValue('warningsToFinalBan'), warningsToDeletion = getConfigValue('warningsToDeletion') } function onTextEdit(cid, item, text) unregisterCreatureEvent(cid, "Ban_Finish") if(item.itemid ~= 2599) then return true end local data = table.unserialize(getCreatureStorage(cid, "banConfig")) if(not data.type) then return true end if(text:len() == 0) then return false end text = text:explode("\n") if(not data.subType or isInArray({1, 5}, data.subType)) then if(text[1] ~= "Name:" or text[3] ~= "(Optional) Length:" or text[5] ~= "Comment:") then doPlayerSendCancel(cid, "Invalid format.") return false end local size = table.maxn(text) if(size > 6) then data.comment = "" for i = 6, size do data.comment = data.comment .. text[i] .. "\n" end else data.comment = text[6] end if(text[4]:len() > 0) then data.length = loadstring("return " .. text[4])() end elseif(text[1] ~= "Name:" or text[3] ~= "Comment:") then doPlayerSendCancel(cid, "Invalid format.") return false else data.comment = text[4] end data.name = text[2] if(data.type == 1) then errors(false) local player = getPlayerGUIDByName(data.name, true) errors(true) if(not player) then doPlayerSendCancel(cid, "Player not found.") return false end local account = getAccountIdByName(data.name) if(account == 0 or getAccountFlagValue(cid, PLAYERFLAG_CANNOTBEBANNED)) then doPlayerSendCancel(cid, "You cannot take action on this player.") return false end local warnings, warning = getAccountWarnings(account), 1 if(data.subType == 1) then if(not tonumber(data.length)) then data.length = os.time() + config.banLength if((warnings + 1) >= config.warningsToDeletion) then data.length = -1 elseif((warnings + 1) >= config.warningsToFinalBan) then data.length = os.time() + config.finalBanLength end else data.length = os.time() + data.length end doAddAccountBanishment(account, player, data.length, data.comment, getPlayerGUID(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " (warnings: " .. (warnings + 1) .. ") has been banned.") elseif(data.subType == 2) then doAddAccountBanishment(account, player, config.finalBanLength, data.comment, getPlayerGUID(cid)) if(warnings < config.warningsToFinalBan) then warning = config.warningsToFinalBan - warnings end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " (warnings: " .. warning .. ") has been banned.") elseif(data.subType == 3) then doAddAccountBanishment(account, player, -1, data.comment, getPlayerGUID(cid)) if(warnings < config.warningsToDeletion) then warning = config.warningsToDeletion - warnings end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " (warnings: " .. warning .. ") has been deleted.") elseif(data.subType == 4) then local notations = getNotationsCount(account) + 1 if(notations >= config.notationsToBan) then data.length = os.time() + config.banLength if((warnings + 1) >= config.warningsToDeletion) then data.length = -1 elseif((warnings + 1) >= config.warningsToFinalBan) then data.length = os.time() + config.finalBanLength end doAddAccountBanishment(account, player, data.length, data.comment, getPlayerGUID(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " (warnings: " .. (warnings + 1) .. ") has been banned reaching notations limit.") else doAddNotation(account, player, data.comment, getPlayerGUID(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " (account notations: " .. notations .. ") has been noted.") warning = 0 end end if(warning > 0) then doAddAccountWarnings(account, warning) doRemoveNotations(account) local pid = getPlayerByGUID(player) if(pid) then doPlayerSendTextMessage(pid, MESSAGE_STATUS_WARNING, "You have been banned.") doSendMagicEffect(getThingPosition(pid), CONST_ME_MAGIC_GREEN) addEvent(valid(doRemoveCreature), 1000, pid, true) end end elseif(data.type == 2) then errors(false) local player = getPlayerGUIDByName(data.name, true) errors(true) if(not player) then doPlayerSendCancel(cid, "Player not found.") return false end local account = getAccountIdByName(data.name) if(account == 0 or getAccountFlagValue(account, PLAYERFLAG_CANNOTBEBANNED)) then doPlayerSendCancel(cid, "You cannot take action on this player.") return false end data.subType = data.subType - 4 if(data.subType == 1) then if(not tonumber(data.length)) then local warnings = getAccountWarnings(account) + 1 data.length = os.time() + config.banLength if(warnings >= config.warningsToDeletion) then data.length = -1 elseif(warnings >= config.warningsToFinalBan) then data.length = os.time() + config.finalBanLength end else data.length = os.time() + data.length end doAddPlayerBanishment(data.name, 3, data.length, data.comment, getPlayerGUID(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " has been banned.") local pid = getPlayerByGUID(player) if(pid) then doPlayerSendTextMessage(pid, MESSAGE_STATUS_WARNING, "You have been banned.") doSendMagicEffect(getThingPosition(pid), CONST_ME_MAGIC_GREEN) addEvent(valid(doRemoveCreature), 1000, pid, true) end elseif(data.subType == 2) then doAddPlayerBanishment(data.name, 3, -1, data.comment, getPlayerGUID(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " has been deleted.") elseif(data.subType == 3) then local warnings, notations = getAccountWarnings(account) + 1, getNotationsCount(account, player) + 1 if(notations >= config.notationsToBan) then data.length = os.time() + config.banLength if(warnings >= config.warningsToDeletion) then data.length = -1 elseif(warnings >= config.warningsToFinalBan) then data.length = os.time() + config.finalBanLength end doAddPlayerBanishment(account, 3, data.length, data.comment, getPlayerGUID(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " has been banned reaching notations limit.") local pid = getPlayerByGUID(player) if(pid) then doPlayerSendTextMessage(pid, MESSAGE_STATUS_WARNING, "You have been banned.") doSendMagicEffect(getThingPosition(pid), CONST_ME_MAGIC_GREEN) addEvent(valid(doRemoveCreature), 1000, pid, true) end else doAddNotation(account, player, data.comment, getPlayerGUID(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " (notations: " .. notations .. ") has been noted.") end elseif(data.subType == 4) then doAddPlayerBanishment(data.name, 1, -1, data.comment, getPlayerGUID(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " has been reported.") elseif(data.subType == 5) then doAddPlayerBanishment(data.name, 2, -1, data.comment, getPlayerGUID(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " has been namelocked.") local pid = getPlayerByGUID(player) if(pid) then doPlayerSendTextMessage(pid, MESSAGE_STATUS_WARNING, "You have been banned.") doSendMagicEffect(getThingPosition(pid), CONST_ME_MAGIC_GREEN) addEvent(valid(doRemoveCreature), 1000, pid, true) end end elseif(data.type == 3) then local ip = getIpByName(data.name) if(not ip) then doPlayerSendCancel(cid, "Player not found.") return false end local account = getAccountIdByName(data.name) if(account == 0 or getAccountFlagValue(account, PLAYERFLAG_CANNOTBEBANNED)) then doPlayerSendCancel(cid, "You cannot take action on this player.") return false end if(not tonumber(data.length)) then data.length = config.ipBanLength end doAddIpBanishment(ip, 4294967295, os.time() + data.length, data.comment, getPlayerGUID(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, getPlayerNameByGUID(player) .. " has been banned on IP: " .. doConvertIntegerToIp(ip) .. ".") local pid = getPlayerByGUID(player) if(pid) then doPlayerSendTextMessage(pid, MESSAGE_STATUS_WARNING, "You have been banned.") doSendMagicEffect(getThingPosition(pid), CONST_ME_MAGIC_GREEN) addEvent(valid(doRemoveCreature), 1000, pid, true) end end return false end type.lua local TYPES, ACCESS = { { event = "Ban_Action", actions = { [1] = "Banishment", [2] = "Banishment + Final Warning", [3] = "Deletion", [4] = "Notation" } }, { event = "Ban_Action", actions = { [5] = "Banishment", [6] = "Deletion", [7] = "Notation", [8] = "Report", [9] = "Lock" } }, { event = "Ban_Finish" } }, { type = { [1] = { 1 }, [2] = { 1 }, [3] = { 1, 2 }, [4] = { 1, 2 }, [5] = { 1, 2, 3 } }, action = { [1] = { 8 }, [2] = { 8 }, [3] = { 1, 4, 5, 7, 9 }, [4] = { 1, 2, 4, 5, 7, 9 }, [5] = { 1, 2, 3, 4, 5, 6, 7, 9 }, } } function onChannelRequest(cid, channel, custom) unregisterCreatureEvent(cid, "Ban_Type") if(not custom or type(channel) ~= 'number') then doPlayerSendCancel(cid, "Invalid action.") return false end local type = TYPES[channel] if(not type) then doPlayerSendCancel(cid, "Invalid action.") return false end local access = getPlayerAccess(cid) if(not isInArray(ACCESS.type[access], channel)) then doPlayerSendCancel(cid, "You cannot do this action.") return false end registerCreatureEvent(cid, type.event) if(type.actions) then access = ACCESS.action[access] if(not access or table.maxn(access) == 0) then return false end local actions = {} for _, action in ipairs(access) do local tmp = type.actions[action] if(tmp) then actions[action] = tmp end end doPlayerSendChannels(cid, actions) else doShowTextDialog(cid, 2599, "Name:\n\n(Optional) Length:\n\nComment:\n", true, 1024) doCreatureSetStorage(cid, "banConfig", table.serialize({ type = channel })) end return false end Bom galera é isso ai, funciona perfeitamente em TFS 3.X+ - OTRestarter v2.0.3 [Funções Avançadas!]
Informação Importante
Confirmação de Termo