Jump to content
Close

Search the Community

Showing results for tags 'CreatureScript%25252FGlobalEvent%25252FMoveMent'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Community
    • Rules
    • Portal
    • Resources
    • Commerce
    • Clubs
  • OTServers
    • Discussion
    • Support
    • Tutorial
    • Download
    • Code Development
    • Contests and Events
    • Form Team
    • Advertise your Server
  • Tibia and Bots
    • Discussion
  • Others
    • Playground (Off-topic)
    • Other Games
    • Advertising
    • Graphics and Design
    • Development and Programming
  • League of Legends's Geral
  • League of Legends's Suporte
  • Nto New Season's Tópicos
  • Fakes's Fakes
  • Tibia's Geral
  • Tibia's Notícias
  • Tibia's Media
  • Tibia's Life Thread
  • Computação's Geral
  • Computação's Dicas e Tutoriais
  • Computação's Suporte
  • Roleplaying's Roleplaying
  • Academia de Mapping's Quadro da Clopin
  • Academia de Mapping's Dev Area
  • Academia de Mapping's Quadro do Nolis
  • Academia de Mapping's Quadro do Namikaze
  • Styller's Tópicos

Calendars

  • Official Calendar
  • OTServs Calendar
  • Several Calendars

Product Groups

  • Advertisements in Top
  • Advertisements In Signatures
  • Advertisements in Topics
  • Others Advertisements

Categories

  • Sales Section
    • Scripting Sales
    • Codes Sales
    • Mapping Sales
    • Websites Sales
    • Design/Sprites Sales
    • Bots Sales
  • Look Jobs
  • Looking for Freelancers
  • Team Formation

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Localization


My character


Favorite OTServ


Bot preferred


Interests

Found 50 results

  1. Fala galera do TK, vejo que tem bastante gente procurando esse sisteminha que é praticamente igual ao dodge system, então eu decidi fazer visto que na realidade era só mudar 3 linhas kkkk em todo caso ta aí pra quem quiser: creaturescripts.xml: <!-- CRITICAL SYSTEM --> <event type="statschange" name="critical" event="script" value="critical.lua"/> creaturescripts\scripts\login.lua: --- CRITICAL SYSTEM ---- registerCreatureEvent(cid, "critical") if getPlayerStorageValue(cid, 48913) == -1 then setPlayerStorageValue(cid, 48913, 0) end creaturescritps\scripts\critical.lua: --[[Critical System ------------------------- By Night Wolf]] local lvlcrit = 48913 local multiplier = 1.5 function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS) then if (getPlayerStorageValue(attacker, lvlcrit)*3) >= math.random (0,1000) then dano = math.ceil(value*(multiplier)) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) return false end end return true end lvlcrit é o storage que fica salvo o seu level de critical e multiplier é o multiplicador do dano para ataques críticos.. nesse caso um ataque critico vai ser 1,5 vezes maior doque um ataque normal (50% maior) Agora em actions.xml adicione: <action itemid="1294" script="criticalrock.lua"/> e em actions\scripts\criticalrock.lua adicione: --- CRITICAL System by Night Wolf local config = { effectonuse = 14, -- efeito que sai levelscrit = 100, --- leveis que terão storagecrit = 48913 -- storage que será verificado } function onUse(cid, item, frompos, item2, topos) if getPlayerStorageValue(cid, config.storagecrit) < config.levelscrit then doRemoveItem(item.uid, 1) doSendMagicEffect(topos,config.effectonuse) doPlayerSendTextMessage(cid,22,"You've Leveled your Critical Skill to ["..(getPlayerStorageValue(cid, config.storagecrit)+1).."/"..config.levelscrit.."].") setPlayerStorageValue(cid, config.storagecrit, getPlayerStorageValue(cid, config.storagecrit)+1) elseif getPlayerStorageValue(cid, config.storagecrit) >= config.levelscrit then doPlayerSendTextMessage(cid,22,"You've already reached the MAX level of Critical Skill.\nCongratulations!!!!") return 0 end return 1 end Feito isso tá pronto, pra editar o item que dá a skill de critical vc edita no actions.xml mesmo: <action itemid="1294" << ID do item que será usado pra dar a skill. A config tá bem simples: effectonuse = 14, -- efeito que sai levelscrit = 100, --- leveis que terão storagecrit = 48913 -- storage que será verificado. Lembrando que cada pedra utilizada dará 0,3% a mais de chance.. 10 pedras dão 3% de chance de dar critico a cada ataque e 100 pedras (NIVEL MÁXIMO PADRÃO) dará 30% de chance de dar crítico em cada ataque. Espero que vcs gostem, qualquer coisa deixem os comentários aqui. Obs: aqui tá uma foto Note que esse script só funciona em players, se vc quiser que funcione em monstros você vai ter que abrir um por um todos os monstros do server e colocar essa tag aqui: <script> <event name="critical"/> </script> coloque antes de </monster> Minha dica: coloquem apenas no Trainer pra que o player consiga ver que ele tem o critical e quanto ele tira e deixem avisado que o sistema só vai funcionar em players.
  2. Fala galera do TK, criei esse anelzinho pra servers que procuram inovar.. bom, oque ele faz?? Simples, ele torna o usuário invisível. aff, mas já existe o stealth ring que faz isso! Sim mas dessa vez eu digo invisível mesmo, nenhum monstro ou players conseguirá te ver. que lixo, assim qualquer player vai poder ficar invisível e passar no meio dos monstros e players.. vai estragar o server Aí é que vc se engana porque o anel vem uma maldição, quem usar ele vai perdendo 3% de vida por segundo (ajustável) e só vai estragar o server se vc sair distribuindo o anel pra todos os players haha O anel em si possui duas versões, na primeira ele retira 3% de vida por segundo, na segunda ele adiciona uma condição que te deixa perdendo uma quantidade fixa de vida, CONTUDO, na segunda versão aparece uma poça de sangue cada vez que toma o dano então dá pros players te pegarem caso vc coloque o anel e resolva fugir kkkkk Vou chamar aqui de versão 1 e 2 respectivamente. OBS: ISSO É EM MOVEMENTS! 1ª versão (sem sangue mas que tira 3% de vida por segundo): local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local percent = 3 local tempo = 1 -- em segundos function onEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "By using this ring you will become fully invisible and lose health over time because of it's curse.") function lifesteal(cid) steal = addEvent(lifesteal, 1000*tempo, cid) if isCreature(cid) then doSendAnimatedText(getCreaturePos(cid), "-"..math.floor((getCreatureMaxHealth(cid) * (percent/100))), 144, cid) doCreatureAddHealth(cid, -math.floor(getCreatureMaxHealth(cid) * (percent/100))) end end lifesteal(cid) doAddCondition(cid, invisible) doAddCondition(cid, outfit) doSendMagicEffect(getCreaturePos(cid), 12) return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 2165) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") stopEvent(steal) doRemoveCondition(cid, CONDITION_INVISIBLE) doSendMagicEffect(getCreaturePos(cid), 12) doRemoveCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) return true end 2ª versão (a cada 1,5 segundos ele te tira um dano configurado e deixa uma poça de sangue embaixo de vc facilitando que te identifiquem mesmo estando invisivel): local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local condition = createConditionObject(CONDITION_PHYSICAL) setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE) addDamageCondition(condition, -1, 1500, -500) function onEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "By using this ring you will become fully invisible and lose health over time because of it's curse.") doAddCondition(cid, condition) doAddCondition(cid, invisible) doAddCondition(cid, outfit) doSendMagicEffect(getCreaturePos(cid), 12) return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 2165) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") doRemoveCondition(cid, CONDITION_PHYSICAL) doRemoveCondition(cid, CONDITION_INVISIBLE) doSendMagicEffect(getCreaturePos(cid), 12) doRemoveCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) return true end Agora edite no items.xml o stealth ring pra que ele seja infinito: <item id="2202" article="a" name="stealth ring"> <attribute key="weight" value="100" /> <attribute key="slotType" value="ring" /> <attribute key="transformDeEquipTo" value="2165" /> </item> e em movements.xml adicione essas linhas: <movevent type="Equip" itemid="2202" slot="ring" event="script" value="stealth.lua"/> <movevent type="DeEquip" itemid="2202" slot="ring" event="script" value="stealth.lua"/> Editando: Na primeira versão vc pode alterar as seguintes coisas que estão em colorido: local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local percent = 3 local tempo = 1 -- em segundos em vermelho é o tempo que dura a invisibilidade... -1 é infinito em azul é a porcentagem de vida que perde por tempo em verde é o tempo em que se perde vida.. nesse caso a cada 1 segundo perde 3% Na segunda versão vc pode editar as mesmas coisas do primeiro só que o tempo e o dano pelo tempo estão na condition: local condition = createConditionObject(CONDITION_PHYSICAL) setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE) addDamageCondition(condition, -1, 1500, -500) em vermelho é o numero de vezes que vai tirar vida. Mais uma vez -1 significa infinito (infinito até remover o anel) em azul é o dano que vc toma a cada tempo (lembre-se de deixar sempre um - na frente se não ele vai adicionar vida) em verde é o tempo em que se perde vida.. nesse caso a cada 1 segundo e meio retira 500 de vida Bom, é isso.. um script simples mas que vai ajudar muita gente pelo fato de usar conditions não tão comuns e de uma forma diferente haha
  3. Seu servidor tem o sistema de Raids ou Tasks, ou até mesmo somente algum sistema que summone bosses? Se sim esse script será muito útil para você. Então, esse script faz com que toda vez que algum dos Bosses que poderam ser configurados no script forem mortos, aparecer uma mensagem em Broadcast, para quem não sabe broadcast é aquela mensagem vermelha igual a que quando o GOD fala, ela aparace para todo mundo. Um exemplo da mensagem: O jogador GodMarini conseguiu matar o tao poderoso BOSS Morgaroth! Vá para data/creaturescripts/scripts e crie ou copie um arquivo .lua e o nomeie para bosses.lua ou para o nome que você quiser e cole isso dentro dele, -- by GodMarini for TibiaKing Fórum. -- local bosses = {"Demodras","The Horned Fox","Necropharus","The Old Window", "Morgaroth","Zulazza The Corruptor", "Ghazbaran", "Orshabaal","Ferumbras"} function onKill(cid, target, lastHit) if isInArray(bosses,getCreatureName(target)) then doBroadcastMessage("O jogador "..getCreatureName(cid).." conseguiu matar o tao poderoso BOSS "..getCreatureName(target).."!") end return true end Agora, abra o arquivo login.lua na mesma pasta e pressione CRTL + F e procure por está linha, registerCreatureEvent(cid, "AdvanceSave") e logo abaixo cole isso, registerCreatureEvent(cid, "bosses") Pronto a parte mais "difícil" já está feita, agora vamos para a ultima parte e mais simples da instalação do script; volta uma pasta e abra o arquivo creaturescripts.xml e adicione está linha, <event type="kill" name="bosses" event="script" value="bosses.lua"/> Autor: Shoeei
  4. Como funciona? A cada monstro que vc mata, seus itens equipados ganham 1 de exp. Quando seus itens chegarem às quantidades de exp definidas, eles upam e ficam com o nome assim: Demon Helmet + 1. Helmets, armors, legs, e boots recebem 1 de arm a cada vez que upam. Armas recebem 1 de ataque e escudos 1 de defesa. Para o monstro contar, ele deve dar um mínimo de exp (definido no script). O número de exp a que me refiro é aquele um presente no arquivo .xml. Para instalar, crie Killua Items Upgrade.lua em data/creaturescripts/scripts e coloque: Em data/creaturescripts/creaturescripts.xml coloque essas duas tags: <event type="kill" name="Item level" event="script" value="Killua Items Upgrade.lua"/> <event type="login" name="Item levell" event="script" value="Killua Items Upgrade.lua"/> Configurando: Na tabela table_of_slots, coloque em quais slots os itens upam. min_exp é a experiência mínima que o monstro deve ter para contar exp para o item. Se vc colocar 500, somente os monstros que tem exp igual ou superior a 500 no arquivo.xml vão valer. exp_levels são os valores de exp que os itens devem atingir para upar. No meu caso, quando o item alcançar 50 de exp, ele upa para o level 1. Quando alcançar 50 de exp, upa para o level 2 e assim por diante.
  5. Sistema de Loterias por globalevents. Crie um arquivo .lua com o nome lottery dentro da pasta data/globalevents/scripts/loterry.lua, adicione dentro do arquivo o seguinte code: local config = { lottery_hour = "2 hours", -- Tempo ate a proxima loteria (Esse tempo vai aparecer somente como broadcast message) rewards_id = {2494, 2472, 2514, 2160}, -- ID dos Itens Sorteados na Loteria crystal_counts = 10, -- Usado somente se a rewards_id for crystal coin (ID: 2160). website = "yes", -- Only if you have php scripts and table `lottery` in your database! days = { "Monday-08:00", "Monday-13:00", "Monday-19:30", "Tuesday-08:00", "Tuesday-13:00", "Tuesday-19:30", "Wednesday-08:00", "Wednesday-13:00", "Wednesday-19:30", "Thursday-08:00", "Thursday-13:00", "Thursday-19:30", "Friday-01:22", "Friday-13:00", "Friday-19:30", "Saturday-21:27", "Saturday-21:28", "Saturday-21:29", "Sunday-08:00", "Sunday-13:00", "Sunday-19:30" } } local function getPlayerWorldId(cid) if not(isPlayer(cid)) then return false end local pid = getPlayerGUID(cid) local worldPlayer = 0 local result_plr = db.getResult("SELECT * FROM `players` WHERE `id` = "..pid..";") if(result_plr:getID() ~= -1) then worldPlayer = tonumber(result_plr:getDataInt("world_id")) result_plr:free() return worldPlayer end return false end local function getOnlineParticipants() local players = {} for _, pid in pairs(getPlayersOnline()) do if getPlayerAccess(pid) <= 2 and getPlayerStorageValue(pid, 281821) <= os.time() then table.insert(players, pid) end end if #players > 0 then return players end return false end function onThink(cid, interval) if table.find(config.days, os.date("%A-%H:%M")) then if(getWorldCreatures(o) <= 0)then return true end local query = db.query or db.executeQuery local random_item = config.rewards_id[math.random(1, #config.rewards_id)] local item_name = getItemNameById(random_item) local data = os.date("%d/%m/%Y - %H:%M:%S") local online = getOnlineParticipants() if online then local winner = online[math.random(1, #online)] local world = tonumber(getPlayerWorldId(winner)) if(random_item == 2160) then doPlayerSetStorageValue(winner, 281821, os.time() + 3600 * 24) doPlayerAddItem(winner, random_item, config.crystal_counts) doBroadcastMessage("[LOTTERY SYSTEM] Winner: " .. getCreatureName(winner) .. ", Reward: " .. config.crystal_counts .." " .. getItemNameById(random_item) .. "s! Congratulations! (Next lottery in " .. config.lottery_hour .. ")") else doPlayerSetStorageValue(winner, 281821, os.time() + 3600 * 24) doBroadcastMessage("[LOTTERY SYSTEM] Winner: " .. getCreatureName(winner) .. ", Reward: " ..getItemNameById(random_item) .. "! Congratulations! (Next lottery in " .. config.lottery_hour .. ")") doPlayerAddItem(winner, random_item, 1) end if(config.website == "yes") then query("INSERT INTO `lottery` (`name`, `item`, `world_id`, `item_name`, `date`) VALUES ('".. getCreatureName(winner).."', '".. random_item .."', '".. world .."', '".. item_name .."', '".. data .."');") end else print("Ninguem OnLine pra ganhar na loteria") end end return true end Recomendamos modificar: - rewards_id = {2494, 2472, 2514, 2160}, -- ID dos Itens Sorteados na Loteria Recomendo de item count apenas o 2160, outros podem bugar. - crystal_counts = 10, -- Usado somente se a rewards_id for crystal coin (ID: 2160). Altere pra mais ou menos o dinheiro. - "Monday-08:00", Ajuste os dias e horários como desejado. Em globalevents.xml, adicione: <!-- Lottery --> <globalevent name="lottery" interval="60000" event="script" value="lottery.lua"/> Não mexa no code acima. Certo, essa é a parte do servidor, agora vamos adicionar as querys necessárias no MySql: CREATE TABLE `lottery` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL, `item` varchar(255) NOT NULL, `world_id` tinyint(2) unsigned NOT NULL default '0', `item_name` varchar(255) NOT NULL, `date` varchar(256) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; Caso você queria adicionar uma query pra testar o site, veja: INSERT INTO `lottery` (`id`, `name`, `item`, `world_id`, `item_name`, `date`) VALUES(NULL, 'Character', '2470', '0', 'golden legs', '22/05/2014 - 04:49:50'); Agora vamos pra parte do site, crie um arquivo .php com o nome lottery, adicione dentro do arquivo o seguinte code: <?PHP $main_content .= '<center><h1>Lottery</h1><h3>Lotterys held at 09:00, 14:00 and 20:30 hour, brazil time.</h3></center><br><TABLE BORDER=0 CELLSPACING=1 CELLPADDING=4 WIDTH=100%><tr BGCOLOR="'.$config['site']['vdarkborder'].'"><td CLASS=white><center><b>Player Name</b></center></td><td CLASS=white width=184 colspan=2><center><b>Winning Item</b></center></td><td width=50 CLASS=white><center><b>World</b></center></td><td width=100 CLASS=white><center><b>Date and Time</b></center></td></tr>'; $lottery = $SQL->query('SELECT id, name, item, world_id, item_name, date FROM lottery WHERE world_id = 0 ORDER BY id DESC;'); foreach($lottery as $result) { $players++; if(is_int($players / 2)) $bgcolor = $config['site']['lightborder']; else $bgcolor = $config['site']['darkborder']; $main_content .= '<TR BGCOLOR='.$bgcolor.'><TD WIDTH=35%><center><a href="?subtopic=characters&name='.urlencode($result['name']).'">'.$result['name'].'</a></center></td><TD WIDTH=5%><img src=\'/item_images/'.urlencode($result['item']).'.gif\'></td><TD WIDTH=30%><center>'.$result['item_name'].'</center></td><TD WIDTH=7%><center>MegaTibia</center></td></td><TD WIDTH=30%><center>'.$result['date'].'</center></td></tr>'; } $main_content .= '</table>'; ?> Em index.php adicione: case "lottery"; $topic = "Lottery"; $subtopic = "lottery"; include("lottery.php"); break; Em layouts.php adicione o code abaixo: <a href="?subtopic=lottery"> <div id="submenu_lottery" class="Submenuitem" onmouseover="MouseOverSubmenuItem(this)" onmouseout="MouseOutSubmenuItem(this)"> <div class="LeftChain" style="background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);"></div> <div id="ActiveSubmenuItemIcon_lottery" class="ActiveSubmenuItemIcon" style="background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);"></div> <div id="ActiveSubmenuItemLabel_lottery" class="SubmenuitemLabel">Lottery</div> <div class="RightChain" style="background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);"></div> </div> </a> Pronto galera só isso, não esqueça clica em GOSTEI! Comente, participe do tópico, isso nos ajuda muito. Créditos: .lua - Killua e Matheus .php - Matheus e Natanael Beckman querys - Natanael Beckman e Matheus Atualização 24/05/2014 - Adicionado regras pra não sorteá membro da staff(GM, GOD) - Adicionando sistema de Storage pra não correr o risco de um player ganhar 2x no mesmo dia.
  6. Bom.. eu pesquisei e pesquisei, achei vários tutoriais ensinando, mas nenhum funcionava, tenho um aqui comigo que já veio em meu otserver, não sei quem é o dono mas espero ajudar a todos. a função do script é aparecer um teleport em tal dia e em tal hora no seguinte local e que irá enviá-lo para outro local e depois de um tempo desapareça. Primeiramente abra data/globalevents/scripts e crie o seguinte: teleporteautomatico.lua local config = { day = "Monday","Wednesday","Friday","Sunday", pos = {x=151, y=77, z=6}, topos = {x=550, y=34, z=7}, time = 5, -- tempo que o teleport ira sumir em minutos msg_open = "O Portal vai se abrir em 5 minutos.", msg_close = "O Portal se fechou." } local function DelTp() local t = getTileItemById(config.pos, 1387) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(config.pos, CONST_ME_POFF) end end function onTimer() if (os.date("%A") == config.day) then doCreateTeleport(1387, config.topos, config.pos) doBroadcastMessage(config.msg_open) addEvent(DelTp, config.time*60*1000) addEvent(doBroadcastMessage, config.time*60*1000, config.msg_close) end return true end adicione em globalevents.xml a seguinte tag: <globalevent name="Teleport Automatico" time="15:30" event="script" value="teleportautomatico.lua"/> está configurado para 15:30, caso queira trocar.. se pode trocar de 00:00 até 23:59 para configurá-lo é fácil: day = "Monday","Wednesday","Friday","Sunday", -- Dias em que o teleport irá aparecer pos = {x=151, y=77, z=6}, -- Posição aonde será criado o teleport topos = {x=550, y=34, z=7}, -- Posição pra onde o teleport ira levar o player time = 5, -- tempo que o teleport ira sumir em minutos, msg_open = "SUA MENSAGEM AO ABRIR O TELEPORT" msg_close = "MENSAGEM AO FECHAR O TELEPORT" Espero ter ajudado um colega que pediu ai, REP+ se puderem CRÉDITOS: luanluciano93
  7. Em GlobalEvents crie um Arquivo chamado Check.lua local function CheckPlayer_Items() query = db.getResult("SELECT *, SUBSTRING( CONVERT( attributes USING latin1 ) FROM 22) AS 'serial' FROM player_items WHERE CONVERT( attributes USING latin1 ) LIKE '%description%' GROUP BY SUBSTRING( CONVERT( attributes USING latin1 ) FROM 22) having count(*) > 1") if (query:getID() == -1) then textquery = "\n Check Items : Nenhum item encontrado." print(textquery) return true end if (query:getID() ~= -1) then text = "\n[!] -> Deleting item player_items: [Player ID: " .. getPlayerNameByGUID(query:getDataInt("player_id")) .. " - Sid: "..(query:getDataInt("sid")).." - Pid: "..(query:getDataInt("pid")).." - Itemtype: "..(query:getDataInt("itemtype")).." - Serial: " .. query:getDataString("serial") .."" db.query("DELETE FROM `otservs`.`player_items` WHERE `player_items`.`player_id` =" .. (query:getDataInt("player_id")) .. " AND `player_items`.`sid` ="..(query:getDataInt("sid")).." AND `player_items`.`pid` ="..(query:getDataInt("pid"))..";") db.query("DELETE FROM `otservs`.`player_depotitems` WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM 22) = " .. db.escapeString(query:getDataString("serial")) .. ";") db.query("DELETE FROM `otservs`.`tile_items` WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM 22) = " .. db.escapeString(query:getDataString("serial")) .. ";") f = io.open("data/logs/AntiClone.txt", "a+") f:write("Player: "..text.." - " .. os.date("%d %B %Y - %X.", os.time()) .."\n\n----------------------------------------------------------\n") f:close() print(text) if (query:getID() == -1) then textplayer_items = "\n Check Items : Todos os Items Foram Removidos." print(textplayer_items) return true end CheckPlayer_Items() end return true end local function CheckPlayer_DepotItems() query = db.getResult("SELECT *, SUBSTRING( CONVERT( attributes USING latin1 ) FROM 22) AS 'serial' FROM player_depotitems WHERE CONVERT( attributes USING latin1 ) LIKE '%description%' GROUP BY SUBSTRING( CONVERT( attributes USING latin1 ) FROM 22) having count(*) > 1") if (query:getID() == -1) then textquery = "\n Check Items : Nenhum item encontrado." print(textquery) return true end if (query:getID() ~= -1) then text = "\n[!] -> Deleting item player_depotitems: [Player ID: " .. getPlayerNameByGUID(query:getDataInt("player_id")) .. " - Sid: "..(query:getDataInt("sid")).." - Pid: "..(query:getDataInt("pid")).." - Itemtype: "..(query:getDataInt("itemtype")).." - Serial: " .. query:getDataString("serial") .."" db.query("DELETE FROM `otservs`.`player_items` WHERE `player_items`.`player_id` =" .. (query:getDataInt("player_id")) .. " AND `player_items`.`sid` ="..(query:getDataInt("sid")).." AND `player_items`.`pid` ="..(query:getDataInt("pid"))..";") db.query("DELETE FROM `otservs`.`player_depotitems` WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM 22) = " .. db.escapeString(query:getDataString("serial")) .. ";") db.query("DELETE FROM `otservs`.`tile_items` WHERE SUBSTRING(CONVERT(attributes USING latin1) FROM 22) = " .. db.escapeString(query:getDataString("serial")) .. ";") f = io.open("data/logs/AntiClone.txt", "a+") f:write("Player: "..text.." - " .. os.date("%d %B %Y - %X.", os.time()) .."\n\n----------------------------------------------------------\n") f:close() print(text) if (query:getID() == -1) then textplayer_items = "\n Check Items : Todos os Items Foram Removidos." print(textplayer_items) return true end CheckPlayer_DepotItems() end return true end function onStartup() CheckPlayer_Items() CheckPlayer_DepotItems() return true end em globalevents.xml Adicione <globalevent name="AntiClone" type="start" event="script" value="Check.lua"/> Para Adicionar a Opção de Verificar itens Clonados Adicione um Serial em todos os Itens Vips : em shop.lua Adicione ( Modern Acc ) function onThink(interval, lastExecution, thinkInterval) local result = db.getResult("SELECT * FROM shop_history WHERE `processed` = 0;") if(result:getID() ~= -1) then while(true) do cid = getCreatureByName(getPlayerNameByGUID(tonumber(result:getDataInt("player")))) product = tonumber(result:getDataInt("product")) itemr = db.getResult("SELECT * FROM shop_offer WHERE `id` = "..product..";") if isPlayer(cid) then local um_um = {1,2,3,4,5,6,7,8,9,0} um = um_um[math.random(1, #um_um)] local dois_dois = {1,2,3,4,5,6,7,8,9,0} dois = dois_dois[math.random(1, #dois_dois)] local tres_tres = {1,2,3,4,5,6,7,8,9,0} tres = tres_tres[math.random(1, #tres_tres)] local quatro_quatro = {1,2,3,4,5,6,7,8,9,0} quatro = quatro_quatro[math.random(1, #quatro_quatro)] local id = tonumber(itemr:getDataInt("item")) local tid = tonumber(result:getDataInt("id")) local count = tonumber(itemr:getDataInt("count")) local tipe = tonumber(itemr:getDataInt("type")) local productn = tostring(itemr:getDataString("name")) if isInArray({5,8},tipe) then if getPlayerFreeCap(cid) >= getItemWeightById(id, count) then if isContainer(getPlayerSlotItem(cid, 3).uid) then received = doPlayerAddItem(cid, id, count, false) if received then doItemSetAttribute(received, "description", ''.. productn ..' by ' .. getCreatureName(cid) .. ' [ID:' .. um .. '' .. dois .. '' .. tres .. '' .. quatro .. '].') doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system") db.query("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";") f = io.open("data/logs/Shop.txt", "a+") f:write("Player : '".. productn .." by ".. getCreatureName(cid) .." [ID: ".. um .."".. dois .."".. tres .."".. quatro .."] Item : "..productn.." - "..getCreatureName(cid).."- " .. os.date("%d %B %Y - %X.", os.time()) .."\n----------------------------------------------------------\n") f:close() else doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space on container to receive >> "..productn.." <<") end else doPlayerSendTextMessage(cid,19, "Sorry, you don't have a container to receive >> "..productn.." <<") end else doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)") end elseif isInArray({6,7},tipe) then if tipe == 6 then bcap = 8 bid = 1987 elseif tipe == 7 then bcap = 20 bid = 1988 end if isItemRune(id) then count = 1 end if getPlayerFreeCap(cid) >= (getItemWeightById(1987, 1) + getItemWeightById(id,count * bcap)) then local bag = doCreateItemEx(bid, 1) for i = 1,bcap do doAddContainerItem(bag, id, count) end received = doPlayerAddItemEx(getPlayerSlotItem(cid, 3).uid, bag) if received == RETURNVALUE_NOERROR then doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system") db.query("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";") else doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space to receive >> "..productn.." <<") end else doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)") end end end itemr:free() if not(result:next()) then break end end result:free() end return true end Tag : <globalevent name="shop" interval="3000" event="script" value="shop.lua"/> Creditos : Emerson Henrique < DBO INFINITY> Comandos e Codigos Adaptados de varios sistemas Ajuda : Arthur Luna (Ajudou no limite de Caracteres) PS : Meu Shop salva na db. apenas o ID do player e não o nome essa Adaptação não vou disponibilizar. http://otsbrasil.com/dbo Servidor Derivado Dragon Ball Online 8.6 + Cast System + War System entre outros sistemas. [ADM] Aaron Autorizo modificações e Postar em Qualquer Forum, esse codigo é meu e fiz de graça e forneço de Graça. PS2 : Se Possivel mudar o Titulo para Anti Clone System [GlobalEvents] Shop.lua[Modern Acc] / CheckItens.lua
  8. Bom para quem não sabe como funciona o script,é basicamente uma senha para conseguir abrir uma porta e após um tempo a porta se fecha automaticamente,podendo ser configurado o tempo/senha/porta. • Adicionando o script • Em "data/creaturescripts/creaturescripts.xml" adicione está tag : <event type="textoparaporta" name="Senha" event="script" value="senhaporta.lua"/> Em "data/creaturescripts/scripts/login.lua" adicione está tag no final do script : registerCreatureEvent(cid, "Senha") Em "data/creaturescripts/scripts/senhaporta.lua" adicione este script : local uniqueids = {8049, 8050} local passwords = { ["TibiaKing"] = {doorpos = {x = 163, y = 36, z = 7}, doorid = 6257, blackboardpos = {x = 162, y = 36, z = 7}, blackboardid = 1811, uniqueid = 8049, doorclosetime = 10}, ["TK"] = {doorpos = {x = 1000, y = 1000, z = 7}, doorid = 1213, blackboardpos = {x = 1000, y = 1000, z = 7}, blackboardid = 1811, uniqueid = 8050, doorclosetime = 10} } function onTextEdit(cid, item, newText) local x = passwords[newText] local function onCloseDoor() if(getTileItemById(x.doorpos,x.doorid+1).uid) > 0 then doTransformItem(getTileItemById(x.doorpos,x.doorid+1).uid, x.doorid) doSendMagicEffect(x.doorpos, CONST_ME_MAGIC_RED) end end for _, check in pairs(uniqueids) do if item.uid == check then if x and item.uid == x.uniqueid then if(getTileItemById(x.doorpos,x.doorid).uid) > 0 then doTransformItem(getTileItemById(x.doorpos,x.doorid).uid, x.doorid + 1) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_GREEN) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, 'Sua Senha "'..newText..'" esta correta, voce pode entrar.') addEvent(onCloseDoor,x.doorclosetime*1000) doRemoveItem(item.uid, 1) local blackboard = doCreateItem(x.blackboardid,1,x.blackboardpos) doItemSetAttribute(blackboard, "uid", x.uniqueid) else doRemoveItem(item.uid, 1) local blackboard = doCreateItem(x.blackboardid,1,x.blackboardpos) doItemSetAttribute(blackboard, "uid", x.uniqueid) doPlayerSendCancel(cid, 'A porta ja esta aberta, feche-a ou espera ela se fechar.') end else doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) doPlayerSendCancel(cid, 'Sua senha "'..newText..'" esta incorreta.') end end end return true end • Configurando • Creditos : Limos Imagens :
  9. Para quem não sabe como funciona o script : O player precisa usar um passaporte para poder entrar passar por tal lugar.(pode ser usado de item donation para ter acesso a area vip ou coisa do tipo) Testado em: TFS 0.3.6 e 0.4 Dev. • Adicionando o script • Em "data/actions/scripts/passaporte.lua" : function onUse(cid, item, frompos, item2, topos) if item.itemid == 1954 then local playerpos = getCreaturePosition(cid) doRemoveItem(item.uid,1) setPlayerStorageValue(cid,19200,1) doSendMagicEffect(playerpos, 12) doCreatureSay(cid, "Parabens!, voce verificou seu passaporte, agora voce pode entrar no barco!.", TALKTYPE_ORANGE_1) end end Em "data/actions/actions.xml" : <action itemid="1954" script="passaporte.lua" /> Agora em "data/movements/scripts/passagem.lua" : function onStepIn(cid, item, position, fromPosition) if isPlayer(cid) == true then if getPlayerStorageValue(cid, 19200) == -1 then doTeleportThing(cid, fromPosition, true) doPlayerSendTextMessage(cid,22, "Voce precisa do passaporte para entrar no barco!.") doSendMagicEffect(getPlayerPosition(cid), 2) else doPlayerSendTextMessage(cid,22, 'Seu passaporte foi verificado, voce pode entrar no barco!.') doSendMagicEffect(getPlayerPosition(cid), 22) end end return true end Em "data/movements/movements.xml" : <movevent type="StepIn" tileitem="0" itemid="9120" event="script" value="passagem.lua"/> • Configurando •
  10. Galera é um script muito simples, porém pra mim é muito ÚTIL. Abra a pasta data/globalevents/scripts crie um arquivo .lua com o nome GlobalSave.lua, em seguida adicone o code: function prepareShutdown(minutes) if(minutes <= 0) then doSetGameState(GAMESTATE_SHUTDOWN) return false end if(minutes == 1) then doBroadcastMessage("Server is going down in " .. minutes .. " minute for global save, please log out now!") elseif(minutes <= 3) then doBroadcastMessage("Server is going down in " .. minutes .. " minutes for global save, please log out.") else doBroadcastMessage("Server is going down in " .. minutes .. " minutes for global save.") end shutdownEvent = addEvent(prepareShutdown, 60000, minutes - 1) return true end function onTime() return prepareShutdown(5) -- Quantos minutos pra executar o ServeSave. end Ajustes: Quando quiser modificar os minutos altere: -return prepareShutdown(5) - (5) = 5 minutos, eu recomendo no mínimo 5 minutos, em outras palavras não mexa. Em globalevents.xml adicione a tag seguinte: <globalevent name="GlobalSave" time="05:30" event="script" value="GlobalSave.lua"/> No meu ServeSave é feito as 05:30 da manhã, modifique pro horário desejado! Em config.lua verifique essa regra: Se tiver TRUE deixa, assim ele fecha o .exe se não tiver no seu config.lua não tem problema closeInstanceOnShutdown = true - - - Esse tutorial é só isso, clique em GOSTEI, e comente no tópico, muito obrigado! -------------------------------------------------------------------------------------------------------------------------------------------------------- AUTO RESTART -------------------------------------------------------------------------------------------------------------------------------------------------------- Pra você que utiliza Windows esse é perfeito: Dezon OT Admin [restarter] Pra você que utiliza Linux: Baixe esse arquivo, TFS.SH, bote dentro da pasta do seu OT. Esse arquivo está configurado pra abrir outro arquivo chamado tfs caso o seu seja outro nome mude pra esse, tfs. Sempre que for abrir seu OT execute esse comando ./tfs.sh& e assim toda vez que o OT cair ele renicia automaticamente.
  11. Evento Devovorga testado TFS 1.0 tíbia 10.37 mapa global breve explicação do evento obejetivo: mata os 5 bosses do evento rise devovorga para liberar acesso a sala do boss devovorgar com tempo de 5 horas para conclusão do evento. bosses: Anmothra Irahsae Teneshpar Phrodomo Chikhaton vamus para os scripts Data/creaturescripts/scripts cria uma pasta com nome "evento devovorga" dentro da pasta cria arquivo com nome bossdevovorga.lua copia e cola tudo dentro: local bosses = { ["devovorga"] = 206 } function onKill(cid, target) if(bosses[string.lower(getCreatureName(target))]) then if(string.lower(getCreatureName(target)) == "") then setGlobalStorageValue(bosses[string.lower(getCreatureName(target))], getGlobalStorageValue(bosses[string.lower(getCreatureName(target))]) < 1 and 1 or 2) if(getGlobalStorageValue(bosses[string.lower(getCreatureName(target))]) == 2) then end return true end broadcastMessage("Thanks to the mighty and fearless Tibians who drove Devovorga back into her abyss, your regeneration has been improved.", MESSAGE_EVENT_ADVANCE) broadcastMessage("You made it - Devovorga, the incredibly powerful weapon sealed deep below Vengoth, was destroyed.", MESSAGE_EVENT_ADVANCE) broadcastMessage("Upon her death, energy was released all over the world - the next month, it will boost your health and mana regeneration.", MESSAGE_EVENT_ADVANCE) broadcastMessage("Congratulations, Tibians!", MESSAGE_EVENT_ADVANCE) setGlobalStorageValue(bosses[string.lower(getCreatureName(target))], 2) addEvent(setGlobalStorageValue, 3 * 60 * 1000, bosses[string.lower(getCreatureName(target))], 0) end return true end proximo passo Data/creaturescripts/scripts cria uma pasta com nome "evento devovorga" dentro da pasta cria arquivo com nome bosses.lua copia e cola tudo dentro: local tpId = 11798 local tps = { ["Anmothra"] = {pos = {x=32955, y=31519, z=9}, toPos = {x=32950, y=31514, z=9}, time = 18000}, ["Irahsae"] = {pos = {x=32942, y=31514, z=9}, toPos = {x=32937, y=31510, z=9}, time = 18000}, ["Teneshpar"] = {pos = {x=32947, y=31506, z=9}, toPos = {x=32936, y=31524, z=9}, time = 18000}, ["Phrodomo"] = {pos = {x=32937, y=31521, z=9}, toPos = {x=32913, y=31515, z=9}, time = 18000}, ["Chikhaton"] = {pos = {x=32913, y=31527, z=9}, toPos = {x=32946, y=31516, z=10}, time = 18000}, } function removeTp(tp) local t = getTileItemById(tp.pos, tpId) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(tp.pos, CONST_ME_POFF) end end function onDeath(cid) local tp = tps[getCreatureName(cid)] if tp then doCreateTeleport(tpId, tp.toPos, tp.pos) doCreatureSay(cid, "O teleport irá sumir em 5 horas corra grandes aventureiros", TALKTYPE_ORANGE_1) addEvent(removeTp, tp.time*1000, tp) end return TRUE end proximo passo Data/creaturescripts abra o arquivo creaturescripts.xml adicione essas duas linhas: <event type="death" name="teleport" script="evento devovorga/bosses.lua"/> <event type="kill" name="bossdevovorga" script="evento devovorga/bossdevovorga.lua"/> arquivos creaturescripts finalizado proximo passo Data/movements/scripts criar um arquivo chamado teleportarea.lua copiar e colar tudo dentro: function onStepIn(cid, item, position, fromPosition) local teleport = { action = item.actionid, [17001] = {x=32975, y=32427, z=8}, [17002] = {x=32976, y=32429, z=7}, [17003] = {x=32634, y=32305, z=8}, [17004] = {x=32629, y=32329, z=7}, [17005] = {x=32131, y=31835, z=8}, [17006] = {x=32169, y=31829, z=7}, [17007] = {x=31936, y=31538, z=8}, [17008] = {x=31965, y=31582, z=7}, [17009] = {x=33325, y=31741, z=8}, [17010] = {x=33325, y=31741, z=7}, [17011] = {x=32956, y=31516, z=8}, [17012] = {x=32949, y=31520, z=7}, [17013] = {x=32956, y=31519, z=9}, [17014] = {x=32943, y=31514, z=9}, [17015] = {x=32947, y=31507, z=9}, [17016] = {x=32937, y=31522, z=9}, [17017] = {x=32948, y=31520, z=7} } if(not isPlayer(cid)) then return true end doTeleportThing(cid, teleport[item.actionid]) return true end proximo Data/movements/scripts criar um arquivo chamado devo.lua copiar e colar tudo dentro: local teleports2 = { [2181] = {text = "Ate o Proximo Evento", newPos = {x = 32948, y = 31520, z = 7}, storage = 7}, } local teleports = { [2182] = {boss = true, text = "Parabéns você concluiu o Evento Rise of Devovorga", bossStorage = 206, newPos = {x = 32945, y = 31521, z = 9}, storage = 7}, } function onStepIn(cid, item, position, lastPosition) if (item.uid == 2181) then if(getPlayerStorageValue(cid,1050) <= teleports2[item.uid].storage) then setPlayerStorageValue(cid, 1050, teleports2[item.uid].storage) end doTeleportThing(cid, teleports2[item.uid].newPos) doSendMagicEffect(teleports2[item.uid].newPos, CONST_ME_TELEPORT) doCreatureSay(cid, teleports2[item.uid].text, TALKTYPE_ORANGE_1) return true end if(teleports[item.uid].boss) then if(getGlobalStorageValue(teleports[item.uid].bossStorage) == 2) then if(getPlayerStorageValue(cid,1050) <= teleports[item.uid].storage) then setPlayerStorageValue(cid, 1050, teleports[item.uid].storage) end doTeleportThing(cid, teleports[item.uid].newPos) doSendMagicEffect(teleports[item.uid].newPos, CONST_ME_TELEPORT) doCreatureSay(cid, teleports[item.uid].text, TALKTYPE_ORANGE_1) else doTeleportThing(cid, {x = 32912, y = 31515, z = 10}) doSendMagicEffect({x = 32912, y = 31515, z = 10}, CONST_ME_TELEPORT) doCreatureSay(cid, "Precisa Concluir o evento Rise of Devovorga.", TALKTYPE_ORANGE_1) end return true end if(teleports[item.uid].storage) then if(getPlayerStorageValue(cid, 1050) >= teleports[item.uid].storage) then doTeleportThing(cid, teleports[item.uid].newPos) doSendMagicEffect(teleports[item.uid].newPos, CONST_ME_TELEPORT) doCreatureSay(cid, teleports[item.uid].text, TALKTYPE_ORANGE_1) else doTeleportThing(cid, lastPosition) doSendMagicEffect(getCreaturePosition(cid),10) doCreatureSay(cid, 'You don\'t have enough energy to enter this portal', TALKTYPE_ORANGE_1) end return true end if(teleports[item.uid]) then doTeleportThing(cid, teleports[item.uid].newPos) doSendMagicEffect(teleports[item.uid].newPos, CONST_ME_TELEPORT) doCreatureSay(cid, teleports[item.uid].text, TALKTYPE_ORANGE_1) return true end return true end proximo passo Data/movements abra o arquivo movements.xml adicione essas duas linhas: <movevent event="StepIn" fromaid="17001" toaid="17016" script="teleportarea.lua"/> <movevent event="StepIn" fromuid="2181" touid="2182" script="devo.lua"/> arquivos movements finalizado proximo arquivos Data/raids criar um arquivo chamado devovorga.lua copiar e colar tudo dentro: <raid> <announce delay="1000" type="Event" message="Something is rumbling deep underground all over the world" /> <announce delay="20000" type="Event" message="The Power of Devovorga has risen again." /> <singlespawn delay="20000" name="Anmothra" x="32634" y="32309" z="8" /> <announce delay="30000" type="Event" message="The Fury of Devovorga has risen again." /> <singlespawn delay="30000" name="Irahsae" x="32967" y="32405" z="8" /> <announce delay="40000" type="Event" message="The Dark knowledge of Devovorga has risen again." /> <singlespawn delay="40000" name="Teneshpar" x="31932" y="31524" z="8" /> <announce delay="50000" type="Event" message="The Soul of Devovorga has risen again." /> <singlespawn delay="50000" name="Phrodomo" x="32135" y="31833" z="8" /> <announce delay="60000" type="Event" message="The Hatred of Devovorga has risen again." /> <singlespawn delay="50000" name="Chikhaton" x="33330" y="31741" z="8" /> <singlespawn delay="1000" name="Spawn of Devovorga" x="32931" y="31516" z="10" /> <singlespawn delay="2000" name="Spawn of Devovorga" x="32925" y="31515" z="10" /> <singlespawn delay="3000" name="Spawn of Devovorga" x="32925" y="31521" z="10" /> <singlespawn delay="4000" name="Spawn of Devovorga" x="32917" y="31521" z="10" /> <singlespawn delay="5000" name="Spawn of Devovorga" x="32914" y="31514" z="10" /> <singlespawn delay="6000" name="Devovorga" x="32921" y="31516" z="10" /> </raid> proximo passo Data/raids abra o arquivo Raids.xml adicione essa linhas: <raid name="Devovorga" file="Devovorga.xml" interval2="1440" chance="1" margin="60" enabled="yes"/> download da pasta dos monstro do evento finalizado os códigos vou explica como ativa o evento no momento que usar o comando /raid devovorga o evento iniciará assim sumonando cada mini Boss pra seu lugar os jogadores terá 5 horas no momento que matarem o primeiro mini Boss passando as 5 horas e não matarem os mini bosses ou ate mesmo o Boss devovorga o evento falhara quem estive dentro da sala ficara ate o final seja quando morre ou sair da sala do Boss assim não voltara mais não irei explica código por código porque esta tudo pronto para mapa global fica a critério de cada um não sou script ( fiz uma gambiarra esta funcionando 100%) apenas tentei fazer algo diferente OBS.: sala de premiação não finalizei pois fica a critério de cada um o que fazer (minha sugestão se os jogadores concluir o evento no próximo salve serve coloca Double XP pra galera hehehehe) fora os baus que darão os itens aos jogadores. Scan dos arquivos anexados detalhe para nao buga os portais como usei o portal dimensional portal id 11798 o servidor nao reconhece como teleport vai buga abra: pasta itens abra itens.xml procure por: <item fromid="5023" toid="5024" article="a" name="magic forcefield"> <attribute key="type" value="teleport" /> <attribute key="description" value="You can see the other side trough it." /> </item> substitua por esse: <item fromid="11798" toid="11799" article="a" name="dimensional portal"> <attribute key="type" value="teleport" /> <attribute key="description" value="You can see the other side trough it." /> </item> procure por: <item id="11798" article="a" name="dimensional portal" /> substitua por esse: <item id="5023" article="a" name="magic forcefield" /> pronto Antes de mais nada não sei se postei no lugar correto peço aos moderadores que se não tiver na área correta que movam para certa fico grato se copiar e colar pelo menos mantem os creditos fico grato
  12. Fala galera do TK, hoje vim trazer pra vocês um script de um server bem famoso, trata-se de nada mais e nada menos doque a Aegis of Immortal do Fox World. Quase nenhum OTserver consegue me deixar com vontade de jogar, mas se tem um que chegou bem próximo foi o Fox e o motivo é a criatividade dos caras. É muito fácil aprender lua e ser um ótimo scripter mas ter criatividade pra criar esse tipo de script é bem mais raro. Sem mais delongas vou apresentar a idéia do script e logo em seguida ensinar a instalar no seu servidor. Aegis of the Immortal Descrição: É obtida 1 carga ao vencer o boss Aegis (aparece em invasões). Com esta técnica, o jogador ganha a aura do boss, e se morrer é teleportado para a Aegis Dimension, e após 3 segundos volta para o lugar que estava, com life e mana full como se não tivesse sido tocado. (limite de 1 carga) Tipo: (B.Skill) Vocações: All Vocations Elemento: n/a fonte: site do fox Well, o script é bem simpleszinho mas eu apanhei pra caramba pra fazer ele funcionar certinho (acredito que nem o script dos caras do Fox funcione da maneira correta, mas esse daqui vai funcionar) Antes de tudo você tem que criar uma área no seu map editor e colocar ela inteira como no-pvp e no-logout. Essa vai ser a área que você vai ser teleportado, será a sua "Aegis Dimension". Feito isso você vai precisar adicionar essa linha em creaturescripts.xml: <event type="statschange" name="reborn" script="reborn.lua"/> obs: eu levei muito tempo tentando fazer por onPrepareDeath mas aparentemente essa função não funciona tão bem quanto statschange e acabava chamando a si mesma repetidas vezes. agora crie um arquivo chamado reborn.lua na pasta creaturescripts\scripts e coloque isso dentro dele: Agora você só tem que adicionar essa linha no creaturescripts\scripts\login.lua (de preferencia antes do ultimo return true) --- BOSS SKILLS ---- registerCreatureEvent(cid, "reborn") if getPlayerStorageValue(cid, 19332) == -1 then setPlayerStorageValue(cid, 19332, 0) end Agora seu server possui a Aegis of Immortal e você pode configurar essa skill passiva de diferentes maneiras: 1) Pode ser uma quest que dá como prêmio X quantidades dessa skill 2) Um npc que vende X quantidades da skill 3) Um item que ao ser equipado ativa a skill 4) Um boss que vc mata e ganha quantidades dela 5) Um bonus em algum evento 6) Um item de shop etc. Tudo que vc precisa fazer é criar um script que dê o storage 19332, o valor do storage é o numero de vezes que vc vai utilizar a skill. aqui tem um exemplo de uma quest que ganha 5 charges da Aegis of Immortal: function onUse(cid, item) local storage = 19332 if getPlayerStorageValue(cid, storage) ~= 5 then doPlayerSetStorageValue(cid, storage, 5) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have habilited your [BOSS SKILL]") else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your [BOSS SKILL] is already with "..getPlayerStorageValue(cid, storage).." charges.") end return true end e aqui tem algumas fotos de como fica no seu server: Espero que vcs tenham gostado.. Vou dar 20% de Crédito pro Kilua porque sem o tutorial dele de addEvent isso daqui não seria possível e 30% pro pessoal do Fox por terem me dado a idéia do script. EDIT: Fiz um monstro q dá essa skill ao morrer, só que eu inovei um pouquinho e fiz ele tendo a skill, ou seja, vc tem que matar ele um numero X de vezes pra valer de verdade kkk A graça é que esse numero de X é inerente ao player (fiz por storage), então se um grupo de 10 pessoas for fazer e cada hora uma matar, serão (X+1) vezes no mínimo auhauhauh Só que como ele não dá loot e o unico premio dele é a skill pra quem matar X vezes, então o pessoal dá KS mesmo. Enfim, aproveitem: creaturescripts\scripts\aegis.lua local config = { storagekill = 19500, --- storage q conta a quantidade de kills storageaegis = 19332, --- storage da skill tempo = 5, -- tempo até ele renascer times = 2, --- quantidade de vezes que tenho que matar charges = 1, --- cargas da skill q ganha ao matar definitivamente effect1 = 66, -- efeito ao morrer effect2 = 10 --- efeito ao renascer } function onKill(cid, target, lastHit) local killed = getPlayerStorageValue(cid,config.storagekill) local skill = getPlayerStorageValue(cid, config.storageaegis) if isMonster(target) and getCreatureName(target):lower() == 'aegis' then if killed < config.times then doCreatureSay(target, "I'll be back mortal...", 20) doSendMagicEffect(getThingPos(target), config.effect1) setPlayerStorageValue(cid, config.storagekill, killed+1) addEvent(doSendMagicEffect, 1000*config.tempo, getThingPos(target), config.effect2) addEvent(doCreateMonster, 1000*config.tempo, "Aegis", getCreaturePosition(target), true) end if killed >= config.times then setPlayerStorageValue(cid, config.storagekill, 0) if skill < config.charges then doPlayerSendTextMessage(cid,22,"Congratulations, you just killed "..getCreatureName(target).." and earned Aegis of Immortal skill!") setPlayerStorageValue(cid, config.storageaegis, config.charges) end end end return true end creaturescripts\scripts\login.lua registerCreatureEvent(cid, "aegis") if getPlayerStorageValue(cid, 19500) == -1 then setPlayerStorageValue(cid, 19500, 0) end creaturescripts.xml <event type="kill" name="aegis" script="aegis.lua"/> monster\aegis.xml <?xml version="1.0" encoding="UTF-8"?> <monster name="Aegis" nameDescription="Aegis, the immortal" race="blood" experience="0" speed="605" manacost="0"> <health now="100000" max="100000"/> <look type="287" head="0" body="0" legs="0" feet="0" corpse="0"/> <targetchange interval="2000" chance="15"/> <strategy attack="60" defense="5"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" skill="210" attack="260"/> <attack name="lifedrain" interval="1000" chance="20" range="3" min="-550" max="-1050"/> <attack name="firecondition" interval="1000" chance="7" range="2" min="-800" max="-1200"> <attribute key="shootEffect" value="fire"/> <attribute key="areaEffect" value="yellowspark"/> </attack> <attack name="physical" interval="1000" chance="7" radius="6" target="0" min="-250" max="-750"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="death" interval="1000" chance="50" radius="5" target="0" min="-200" max="-500"> <attribute key="areaEffect" value="mortarea"/> <attribute key="shootEffect" value="suddendeath"/> </attack> <attack name="firefield" interval="1000" chance="4" radius="5" target="0"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="fire" interval="1000" chance="34" range="7" radius="7" target="1" min="-350" max="-850"> <attribute key="shootEffect" value="fire"/> <attribute key="areaEffect" value="firearea"/> </attack> <attack name="fire" interval="1000" chance="13" length="8" spread="0" min="-500" max="-1000"> <attribute key="areaEffect" value="explosion"/> </attack> <attack name="fire" interval="1000" chance="10" length="8" spread="3" min="-300" max="-1500"> <attribute key="areaEffect" value="firearea"/> </attack> </attacks> <defenses armor="165" defense="150"> <defense name="healing" interval="1000" chance="25" min="2000" max="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="speed" interval="1000" chance="10" speedchange="1800" duration="4000"> <attribute key="areaEffect" value="redshimmer"/> </defense> </defenses> <immunities> <immunity physical="0"/> <immunity energy="1"/> <immunity fire="1"/> <immunity poison="0"/> <immunity lifedrain="1"/> <immunity paralyze="1"/> <immunity outfit="1"/> <immunity drunk="1"/> <immunity invisible="1"/> </immunities> <voices interval="5000" chance="50"> <voice sentence="Poor innocent, I CAN'T DIE HAHAHAHAAHA"/> <voice sentence="Your soul will be mine!"/> <voice sentence="MUAHAHAHAAHAHA, I TOLD YOU" yell="1"/> </voices> </monster> OBS: edite ele porque eu coloquei ele muito forte, com muita vida e com muita recuperação de vida. monster\monsters.xml <monster name="Aegis" file="aegis.xml"/>
  13. Salve galerinha do TK. A tempos algumas pessoas vem me pedindo sistema simples de anunciar morte, visto bastante em servidores de wars, baiaks e demais servidores. Então resolvi fazer e trazer aqui para vocês do TK. Sistema simples e legas, quanto um player morrer para outro player irá aparecer no Default: "Nome do player que morreu" acabou de ser humilhado pelo jogador "Nome do player que matou" Acho que esse sistema deixa a galera louca, caçando players e zoando então resolvi trazer pra cá. Primeiramente em creaturescripts.xml adicione a seguinte linha: <event type="kill" name="anunciarmorte" event="script" value="anunciar_morte.lua"/> Pós adicionar, crie um arquivo com o nome de anunciar_morte.lua e coloque dentro da pasta creaturescripts/scripts com o seguinte conteúdo: function onKill(cid, target, lastHit) if not isPlayer(target) or not isPlayer(cid) then return true end doBroadcastMessage(""..getCreatureName(target).."["..getPlayerLevel(target).."] acabou de ser humilhado pelo jogador "..getCreatureName(cid).."["..getPlayerLevel(cid).."].", MESSAGE_STATUS_CONSOLE_ORANGE) return true end E por fim vá até creaturescripts/scripts e abra seu login.lua, abaixo de: registerCreatureEvent(cid, "Mail") ou qualquer linha parecida com registerCreature... adicione a seguinte linha: registerCreatureEvent(cid, "anunciarmorte") Pronto, finalizado! Só isso? Sim script simples e divertido! Qualquer dúvida me comunique Créditos: Absolute.
  14. Ae galera do TK, não quero fazer propaganda de nada mas sempre ajudei o pessoal do tibiaking, e com seu fim, resolvi procurar outro fórum para me posicionar, quando conheci aqui não botava muita Fé mas ao longo do tempo percebi que o TK merecia meu respeito, pois ao contrário do tibiaking ele defende o OpenSource, afinal de tudo resolvi fazer minha primeira contribuição para o TK. Defense System Informações:Esse sistema é bem simples, consiste em um sistema que ignora o ataque do oponente dependendo do nivel de defense. Sim, sei que o próprio tibia já tem um sistema desse, mas acontece que para servidores baiak fastattack isso torna as coisas mais emocionantes. Descrição: O player oponente tem 10 porcento de chance máxima de defender o próximo ataque. Testado em Versão 8.60. Instalação Vá em data/creaturescripts/scripts e cria um arquivo chamado defense.lua, dentro dele coloque. Logo em seguida vá até data/creaturescripts abra o arquivo creaturescripts.xml e adicione essa tag. Agora vá em data/creaturescripts/scripts e abra o arquivo login.lua e adicione essa tag. Em seguida vá a pasta data/actions/scripts e cria um arquivo chamado defense.lua, dentro dele coloque isso. Agora vá ao arquivo data/actions/actions.xml e adicione essa tag. Créditos: 100% - Gabisa00 Dúvidas, bugs, sugestões, somente no tópico. Gostou do Sistema Faça Seu Pedido Aqui!
  15. Para quem não sabe como funciona o script : Cada vocation ao atingir X level ganha uma X recompensa(podendo ganhar mais de um item por level). • Adicionando o script • Em "data/creaturescripts/scripts/vocreward.lua" : local c = { [{1,5}] = { [13] = {items = {{itemid = 2191, count = 1}}, storage = 40953}, [19] = {items = {{itemid = 2188, count = 1}}, storage = 40954}, [22] = {items = {{itemid = 8921, count = 1}}, storage = 40955}, [26] = {items = {{itemid = 2189, count = 1}}, storage = 40956}, [33] = {items = {{itemid = 2187, count = 1}, {itemid = 2152, count = 25}}, storage = 40957}, [37] = {items = {{itemid = 8920, count = 1}, {itemid = 2152, count = 50}}, storage = 40958}, [42] = {items = {{itemid = 8922, count = 1}, {itemid = 2160, count = 1}}, storage = 40959} }, [{2,6}] = { [13] = {items = {{itemid = 2186, count = 1}}, storage = 40953}, [19] = {items = {{itemid = 2185, count = 1}}, storage = 40954}, [22] = {items = {{itemid = 8911, count = 1}}, storage = 40955}, [26] = {items = {{itemid = 2181, count = 1}}, storage = 40956}, [33] = {items = {{itemid = 2183, count = 1}, {itemid = 2152, count = 25}}, storage = 40957}, [37] = {items = {{itemid = 8912, count = 1}, {itemid = 2152, count = 50}}, storage = 40958}, [42] = {items = {{itemid = 8910, count = 1}, {itemid = 2160, count = 1}}, storage = 40959} }, [{3,7}] = { [12] = {items = {{itemid = 2389, count = 5}}, storage = 40953}, [16] = {items = {{itemid = 2389, count = 10}}, storage = 40954}, [20] = {items = {{itemid = 3965, count = 10}}, storage = 40955}, [25] = {items = {{itemid = 7378, count = 10}}, storage = 40956}, [30] = {items = {{itemid = 2456, count = 1}, {itemid = 2544, count = 100}}, storage = 40957}, [35] = {items = {{itemid = 7364, count = 100}, {itemid = 2152, count = 75}}, storage = 40958}, [40] = {items = {{itemid = 7365, count = 100}, {itemid = 2160, count = 1}}, storage = 40959} }, [{4,8}] = { [15] = {items = {{itemid = 2409, count = 1}}, storage = 40953}, [30] = {items = {{itemid = 2392, count = 1}, {itemid = 2152, count = 75}}, storage = 40957}, [40] = {items = {{itemid = 2407, count = 1}, {itemid = 2160, count = 1}}, storage = 40959} } } function onAdvance(cid, skill, oldlevel, newlevel) if skill ~= SKILL__LEVEL then return true end for voc, x in pairs(c) do if isInArray(voc, getPlayerVocation(cid)) then for level, z in pairs(x) do if newlevel >= level and getPlayerStorageValue(cid, z.storage) ~= 1 then local text = "" for v = 1, #z.items do count, info = z.items[v].count, getItemInfo(z.items[v].itemid) local ret = ", " if v == 1 then ret = "" elseif v == #z.items then ret = " and " end text = text .. ret text = text .. (count > 1 and count or info.article).." "..(count > 1 and info.plural or info.name) doPlayerAddItem(cid, z.items[v].itemid, z.items[v].count) end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Parabens, voce alcancou o level "..level.." e obteve "..text..".") doSendMagicEffect(getPlayerPosition(cid), CONST_ME_FIREWORK_YELLOW) setPlayerStorageValue(cid, z.storage, 1) end end end end return true end Em "data/creaturescripts/creaturescripts.xml" : <event type="advance" name="VocReward" event="script" value="vocreward.lua"/> Em "data/creaturescripts/scripts/login.lua" : registerCreatureEvent(cid, "VocReward") • Configurando •
  16. Fala galerinha do TK, já vi gente pedindo aqui e por PM para mim o script de dar uma porcentagem a mais de exp para jogadores VIP. Então venho trabalhando com o lindo do xWhiteWolf para disponibilizar esse sisteminha simples e 100% funcional. Como funciona: Quando qualquer player logar irá aparecer a mensagem: Adquira sua VIP ACCOUNT "seusite" e obtenha X% a mais de EXP para facilitar sua hunt. Quando qualquer player logar e possuir VIP ACCOUNT irá aparecer: Você é um jogador vip, possui X% a mais de exp do que os jogadores free's. Diferente de muitos scripts já visto, a mensagem aparecerá em POP-UP quando o player logar (POP-UP é aquela janelinha que aparece para fechar, caixa de notificações ) Vamos ao script/instalação: Em data/creaturescritps/scripts crie um arquivo com o nome tkexp.lua e adicione dentro: function onLogin(cid) local rate = 1.5 -- 50% local config = { welvip = "Você é um jogador vip, possui "..((rate - 1)*100).."% a mais de exp do que os jogadores free's", not_vip = "Adquira sua vip em nosso site www.tibiaking.com e obtenha "..((rate - 1)*100).."% a mais de EXP para facilitar sua hunt!", s = 13540, -- storage vip } if getPlayerStorageValue(cid, config.s) - os.time() >= 1 then doPlayerSetExperienceRate(cid, rate) doPlayerPopupFYI(cid, config.welvip) else doPlayerPopupFYI(cid, config.not_vip) end return TRUE end Em data/creaturescripts/creaturescripts.xml adicione a seguinte linha: <event type="login" name="tkexp" script="tkexp.lua"/> Em data/creaturescripts/scritps abra o login.lua e embaixo de registerCreatureEvent(cid, "Frags") ou qualquer registerCreture... adicione a seguinte linha: registerCreatureEvent(cid, "tkexp") Pronto! Importante: Configurando: local rate = 1.5 -- 50% - Rate está 1.5 ou seja 1.0 = padrão, 1.5 = padrão + 0.5 = 50%, por exemplo: caso queira adicionar 30% a mais de exp para os vips use 1.3% (padrão de 1.0 mais 0.3 = 1.3) welvip = mensagem que aparecerá quando o player logar avisando que está vip e possui a porcentagem a mais de EXP not_vip = verifica que o player não é vip e mostra a mensagem fazendo um "Marketing" para comprarem mostrando o benefício s = 13540, = Aqui a storage da sua VIP Account, você poderá ver em suas libs, cada servidor tem um número, a maioria usa 13540 mas é importante verificar Tudo ok galera Caso não entendeu ou tenha alguma dúvida não tenha vergonha de perguntar, afinal ninguém nasceu sabendo não é? Espero que gostem e usem Até o próximo. Absolute.
  17. Bom... decidi postar agora o script que eu fiz para barrar os botters de fast attack. Primeiro, crie um arquivo chamado "antiBot.lua" em "data\creaturescripts\scripts" e nele adicione o seguinte conteúdo: -- counts physicals, casts .... [player name : creature cid] playerAttacksMade = {} playerActivateTime = {} playerBlocked = {} function tablelength(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end function onLogin(cid) if isPlayer(cid) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Loading Anti Bot... done.' ) playerAttacksMade[cid] = {} playerActivateTime[cid] = {} playerBlocked[cid] = false end return true end function onLogout(cid) if isPlayer(cid) then playerAttacksMade[cid] = nil playerActivateTime[cid] = nil playerBlocked[cid] = nil end return true end function onStatsChange(cid, attacker, type, combat, value) local maxAttacks = { 6, --pos 1 6, --pos 2 6, --pos 3 6, --pos 4 7, --pos 5 7, --pos 6 7, --pos 7 7, --pos 8 } if not type == STATSCHANGE_HEALTHLOSS or not isPlayer(attacker) then return true end if value <= 0 then return true end if playerAttacksMade[attacker][cid] == nil then playerAttacksMade[attacker][cid] = 0 playerActivateTime[attacker][cid] = os.time() end local currentTime = os.time() --TESTE --doPlayerSendTextMessage(attacker, MESSAGE_STATUS_CONSOLE_ORANGE, playerAttacksMade[attacker][cid] .. '________' .. attacker .. '_____' .. cid .. '______' .. currentTime .. '_______' .. playerActivateTime[attacker][cid] ) if currentTime >= playerActivateTime[attacker][cid] then playerActivateTime[attacker][cid] = currentTime + 1 playerAttacksMade[attacker][cid] = 0 else playerAttacksMade[attacker][cid] = playerAttacksMade[attacker][cid] + 1 end if playerAttacksMade[attacker][cid] > maxAttacks[getPlayerVocation(attacker)] then playerBlocked[attacker] = true doBroadcastMessage('O player ' .. getPlayerName(attacker) .. ' esta usando bot de fast attack. O seu ataque foi travado ate que ele relogue.', 21) doShowTextDialog(attacker,1952,"PARE DE USAR ELFBOT! Seu ataque foi bloqueado. Para destravar basta relogar. Obrigado. (Sistema exclusivo do ot)") return FALSE end return TRUE end function onCombat(cid, target) if isPlayer(cid) then if not playerBlocked[cid] then registerCreatureEvent(target, "AntiBot2") else return false end end return true end function onCast(cid, target) if isPlayer(cid) then if playerBlocked[cid] then return false end end return true end e em "creaturescripts.xml", encontrado em "data\creaturescripts" adicione: <event type="combat" name="AntiBot1" event="script" value="antiBot.lua"/> <event type="statschange" name="AntiBot2" event="script" value="antiBot.lua"/> <event type="login" name="AntiBot3" event="script" value="antiBot.lua"/> <event type="logout" name="AntiBot4" event="script" value="antiBot.lua"/> <event type="cast" name="AntiBot5" event="script" value="antiBot.lua"/> Agora vou explicar a parte configurável: local maxAttacks = { 6, --pos 1 6, --pos 2 6, --pos 3 6, --pos 4 7, --pos 5 7, --pos 6 7, --pos 7 7, --pos 8 } Aqui você vai modificar qual o número máximo de ações de combate (que dão dano) que certa vocação poderá dar. Posição 1 é Sorcerer, 2 é Druid, 3 é Paladin, 4 é Knight e assim por diante.... Escolha bem esses números! Caso você erre, ele irá ficar detectando erradamente. Por exemplo,vamos supor que o knight tenha o fastAttack em 500ms (logo ele executará 2 ataques por segundo) e que sua magia de dano de menor exhaust tenha um exhaust de apenas 600ms, logo o numero maximo de ataques dele por segundo será 4 (cuidado quando spells de dano diferentes puderem ser usadas ao mesmo tempo, daí você terá de acrescentar mais 1 ao número de ataques por segundo. Por favor, testem e me falem o que acharam. Espero que ajude a tirar os botters de seu server. P.S.: Não me importo que roubem meus créditos e/ou postem em outros fórums. É bom espalhar esse script uma vez que botters nos servers 8.6 é muito comum.
  18. Eai galera, esse script eu fiz para um membro aqui do TibiaKing no suporte e achei que ficou bem legal então decidi postar. Explicação: Ao tomar um dano maior que 300, se o player tiver usando a glacier robe, uma área em volta dele vai ser congelada e todos dentro dessa área ficarão com slow. Caso o player estiver com o full glacier set, além do paralyze, as pessoas dentro da área receberão dano de freezing crie um arquivo em creaturescripts\scripts chamado glacierrobe.lua e adicione isso daqui dentro dele agora vá em creaturescripts\scripts e procure um arquivo chamado login.lua. dentro dele coloque isso (de preferencia embaixo dos outros registerCreatureEvent): registerCreatureEvent(cid, "glacierrobe") Lembre-se que se vc quiser repetir isso pra outros set's você tem que repetir todo o processo, tanto no creaturescripts.xml quanto no login.lua no meu server além do set glacier eu uso os outros 3 set's elementais, ficando assim: EDIT:: Algumas imagens pra vocês verem como o script funciona:
  19. Fala TKZIANOS de plantão WTF? AUEHAUHEA Mas ok... Venho hoje trazer a vocês um sistema de ganhar uma recompensa ao conquistar determinado nível (Configurável) Como funciona? Quando o jogador conquistar determinado level ele recebe como recompensa X item ou GOLD! Mais Absolute, o cara vai ficar se matando e upando de novo para ficar pegando a recompensa... NÃO! Quando o player conquista o level ele recebe uma STORAGE, essa storage faz com que salve isto, ou seja faz com que marque que o jogador já recebeu, se ele tentar burlar o sistema ele não vai receber pelo fato da tal STORAGE já estar gravada nele =p Em data/creaturescripts/scripts crie um arquivo chamado uplevelabsolute.lua e coloque o seguinte dentro: function onAdvance(cid, skill, oldLevel, newLevel) local config = { [50] = {item = 2160, count = 5}, [100] = {item = 2160, count = 15}, [150] = {item = 2160, count = 20}, [200] = {item = 2160, count = 25}, [250] = {item = 2160, count = 30}, [300] = {item = 2160, count = 50}, [350] = {item = 4891, count = 1}, [400] = {item = 4892, count = 1}, } if skill == 8 then for level, info in pairs(config) do if newLevel >= level and (getPlayerStorageValue(cid, 30700) == -1 or not (string.find(getPlayerStorageValue(cid, 30700), "'" .. level .. "'"))) then doPlayerAddItem(cid, info.item, info.count) doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Parabéns, você atingiu o level "..newLevel.." e ganhou "..info.count.." "..getItemNameById(info.item)..".") local sat = getPlayerStorageValue(cid, 30700) == -1 and "Values: '" .. level .. "'" or getPlayerStorageValue(cid, 30700) .. ",'" .. level .. "'" setPlayerStorageValue(cid, 30700, sat) end end end return TRUE end Em data/creaturescripts/creaturescripts.xml adicione a seguinte linha: <event type="advance" name="UpAbsolute" event="script" value="uplevelabsolute.lua"/> Em data/creaturescripts/scripts/login.lua abaixo de registerCreatureEvent(cid, "Mail") adicione a seguinte linha: registerCreatureEvent(cid, "UpAbsolute") Pronto, você implantou o sistema em seu servidor. Como configurar: [50] = {item = 2160, count = 5}, [50] = level que o player vai receber a tal recompensa 2160 = item que o player vai receber, no caso 2160 é o Crystal Coin count = 5 = quantidade do item, no caso 5 Crystal Coins Observação: Ao atingir o level o player receberá uma mensagem e o prêmio estará diretamente em sua backpack. Qualquer dúvida peço que poste =D Até o próximo sisteminha bb's.
  20. Nome: Experiencia para Guild Função: A pedidos de um membro do forum (TioSlash). Aqui está um script que ira adicionar uma porcentagem de Experiência por jogadores online. Exemplo: Ao alcançar 5 jogadores da Guild Online, todos que estiverem online recebem 2% de xp adicional por jogador. Ou seja, um total de +10% de xp. Bom para servidores com bastante RPG, incentivando a cooperação. Atualizações: Dia 17/08/2014 Versão: Testada somente na "10.31". (OTX Server - Galaxy) Créditos: Kazuza - (eu) Por ter criado. TioSlash - Pela Ideia. Vodkart - Por ter achado a função dele que retorna os jogadores da Guild ( sem ela com meu nivel de script não teria conseguido). xWhiteWolf - Por uma ajudinha. "Pasta Servidor > Data > Creaturescripts > Scripts" crie "ExpGuild.lua". function getGuildMembersOnline(GuildId) local players,query = {},db.getResult("SELECT `name` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " .. GuildId .. ");") if (query:getID() ~= -1) then repeat table.insert(players,query:getDataString("name")) until not query:next() query:free() end return #players > 0 and players or false end function onLogin(cid) local guild_id = getPlayerGuildId(cid) local minimo = 2 local max = 2 local porcentagem = 2 ----------------------------------------- doPlayerSetExperienceRate(cid, 1) if guild_id == 0 then addEvent(doPlayerSendTextMessage, 200,cid, MESSAGE_STATUS_CONSOLE_RED,"[GUILD] Entre em uma guild para ter bonus de experiencia.") return true end if guild_id > 0 then local membros_online = table.maxn(getGuildMembersOnline(guild_id)) local tabela_membros = getGuildMembersOnline(guild_id) --if #getPlayersByIp(getPlayerIp(cid)) >= max then --doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED,"[GUILD] Players com Multi-Cliente nao contam para ganhar o bonus de experiencia.") --return true --end if membros_online <= minimo then addEvent(doPlayerSendTextMessage, 2000, cid, MESSAGE_STATUS_CONSOLE_RED,"[GUILD] Para ter bonus de experiencia precisa ter mais de "..minimo.." jogadores da guild online.\n Jogadores da Guild Online ["..membros_online.."]") return true end if membros_online > minimo then for var = 1, #tabela_membros do local nomes = getCreatureByName(tabela_membros[var]) local XP = ((membros_online*porcentagem) / 100) + 1.00 doPlayerSetExperienceRate(nomes, XP) addEvent(doPlayerSendTextMessage,1000,nomes, MESSAGE_STATUS_CONSOLE_RED, "[GUILD] A experiencia dos membros da guilda foi aumentada para +"..membros_online*porcentagem.."% - Membro "..getCreatureName(cid).." logou.") end return true end end end "Pasta Servidor > Data > Creaturescripts > Scripts" crie "ExpGuild_out.lua". function getGuildMembersOnline(GuildId) local players = {} for _, pid in pairs(getPlayersOnline()) do if getPlayerGuildId(pid) == tonumber(GuildId) then table.insert(players, getPlayerName(pid)) end end return #players > 0 and players or false end function onLogout(cid) if getPlayerGuildId(cid) == 0 then return true else local guild_id = getPlayerGuildId(cid) local membros_online = table.maxn(getGuildMembersOnline(guild_id)) local tabela_membros = getGuildMembersOnline(guild_id) local porcentagem = 2 local minimo = 2 ----------------------------------------- for var = 1, #tabela_membros do local nomes = getCreatureByName(tabela_membros[var]) local membros_online = membros_online - 1 if membros_online <= minimo then doPlayerSetExperienceRate(nomes, 1.0) doPlayerSendTextMessage(nomes, MESSAGE_STATUS_CONSOLE_RED,"[GUILD] Nao tem mais o numero de players necessarios para ganhar o bonus de experiencia - Membro "..getCreatureName(cid).." deslogou.") end if membros_online > minimo then local XP = ((membros_online*porcentagem) / 100) + 1.00 doPlayerSetExperienceRate(nomes, XP) doPlayerSendTextMessage(nomes, MESSAGE_STATUS_CONSOLE_RED, "[GUILD] A experiencia dos membros da guilda foi ajustada para "..membros_online*porcentagem.."% - Membro "..getCreatureName(cid).." deslogou.") end end return true end end "Pasta Servidor > Data > Creaturescripts" em creaturescripts.xml adicione: <event type="login" name="ExpGuild" event="script" value="exp_guild.lua"/> <event type="logout" name="ExpGuild_out" event="script" value="exp_guild_out.lua"/> "Pasta Servidor > Data > Creaturescripts > Scripts" em login.lua adicione: Lá em baixo, onde tem registerCreatureEvent ponha esses dois: registerCreatureEvent(cid, "ExpGuild") registerCreatureEvent(cid, "ExpGuild_out") PS: Qualquer erro, postem. É muito importante. Como este é meu segundo script na vida. Pode ser que aconteça de dar erros. Eu testei pouco.
  21. Bom para quem não sabe como funciona o script,é uma marcação que fica no minimap(in-game) que ao deixar o ponteiro do mouse em cima aparece uma descrição,pode ser mudado tanto a descrição quanto o icone que aparece no minimap. • Adicionando o script • Em "data/creaturescripts/creaturescripts.xml" adicione está tag : <event type="think" name="IconMap" event="script" value="iconmap.lua"/> Em "data/creaturescripts/scripts" crie um arquivo lua chamado "iconmap" e cole isso dentro : local config = { storage = 030220122041, version = 1, marks = { {mark = 5, pos = {x = 1095, y = 1062, z = 7}, desc = "Temple."}, {mark = 4, pos = {x = 895, y = 996, z = 7}, desc = "Depot."} } } local f_addMark = doPlayerAddMapMark if(not f_addMark) then f_addMark = doAddMapMark end function onThink(cid, interval) if(isPlayer(cid) ~= TRUE or getPlayerStorageValue(cid, config.storage) == config.version) then return end for _, m in pairs(config.marks) do f_addMark(cid, m.pos, m.mark, m.desc ~= nil and m.desc or "") end setPlayerStorageValue(cid, config.storage, config.version) return TRUE end Em "data/creaturescripts/scripts/login.lua" adicione está tag no fim do script : registerCreatureEvent(cid, "IconMap") Caso use TFS 1.0 use este register no login.lua : player:registerEvent(cid, "IconMap") Creditos : Comedinhas. - ViitinG pelo tutorial. • Configurando • • Icones •
  22. Olá linduxos do TK, hoje trago a vocês um sistema de Anti MB que venho desenvolvendo a alguns dias para solucionar o insuportável, o chato, o irrelevante, o FDM, o tal problema de Account Manager com MB derrubando OT's e ot's. O Script é simples, fácil de adaptação. O Script é feito por storage, ou seja quando o player logar ele recebe uma GLOBAL storage evitando que outro player possa logar, a storage dura X segundos (tempo da storage sair) para outro jogador logar (recomendado 1 ou 2 segundos) Vamos a simples instalação? Em data/creaturescripts/scripts crie um arquivo com o nome de magebombabsolute.lua e insira dentro: storage = 15555 seconds = 2 -- Config -- function onLogin(cid) gone = os.time() if getPlayerAccess(cid) <= 1 then if getGlobalStorageValue(storage)+seconds < gone then setGlobalStorageValue(storage, os.time()) return TRUE else return FALSE end end return TRUE end Em data/creaturescripts.xml adicione a seguinte linha: <event type="login" name="AntiBombAbsolute" event="script" value="magebombabsolute.lua"/> No login.lua abaixo de registerCreatureEvent(cid, "ReportBug"), adicione a seguinte linha: registerCreatureEvent(cid, "AntiBombAbsolute") Onde modificar (caso queira): storage = 15555 (Não mudar, é o número que irá salvar para não logar mais de um character) seconds = 2 (Segundos que poderá logar outro char) Simples e fácil não é? Qualquer dúvida poste aqui no tópico, isto com certeza solucionará o seu problema de Account Manager+MageBot Até o próximo!
  23. Nome do Script: Ganhar Montaria Nome do Autor: Fir3z (eu) Servidor Testado e/ou Versão do Tibia: TFS 0.4 (8.70) Descrição e/ou Informações Adicionais: Ao fazer login vc automaticamente ganhará uma específica montaria. Vi um cara no Suporte querendo um script assim... e apesar de ser bem simples, acho que ainda terá muitas pessoas que vão querer esse script... No arquivo creaturescript.xml adicione está linha: <event type="login" name="Montaria" event="script" value="montaria.lua"/> Crie um arquivo com o nome montaria.lua dentro da pasta scripts e coloque isso dentro: local montaria = IDDAMONTARIA function onLogin(cid) if getPlayerStorageValue(cid, 37561) == -1 then doPlayerAddMount(cid, montaria) setPlayerStorageValue(cid, 37561, 1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Por ter feito seu primeiro login no servidor, você acabou de ganhar uma montaria!") end return TRUE end No arquivo login.lua adicione está linha: registerCreatureEvent(cid, "Montaria")
  24. Olá pessoal do TK! Vim aqui hoje trazer 1 script bem básico, mas legal! Quando o character morre Aparece em cima do corpo OwNeD! 1º Abra data\creaturescripts\scripts Agora crie 1 arquivo .LUA chamado: owned Agora cole isso: function onKill(cid, target) if isPlayer(cid) == TRUE and isPlayer(target) == TRUE then doSendAnimatedText(getCreaturePosition(target), "OwNeD!", 35) end return TRUE end 2º Abra creaturescripts.xml e coloque isso: Se for 8.40: <event type="kill" name="owned" script="owned.lua"/> Se for 8.54 para cima <event type="kill" name="owned" event="script" script="owned.lua"/> É isso aí pessoal! Eu não sei muito bem como colocar isso: <event type="statschange" name="magmaboots" event="script" value="magmaboots.lua"/> (As coisas em verde,roxo, azul) Ai fiz do meu jeito! CRÉDITOS: Leonardo ( Criador do Black World 8.40) ATT: R1B31R0 EDIT: Desculpe pelo erro no Título, não sei como mudar. Escrevi errado CreatureScripts, coloquei CreatureScripta. Desculpem!
  25. Vá até data\creaturescripts\scripts e crie um arquivo.lua e renomeie para aolinfinity.lua e cole isto dentro : function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isPlayer(cid) == true then if (getPlayerSlotItem(cid, 2).itemid == 2131) then >> 2131<< é o ID Do Aol Vcs Editão Ai O ID Do Aol Que Vcs Querem pos = getCreaturePos(cid) doCreatureSetDropLoot(cid, false) doPlayerSetLossPercent(cid, experience, 0) doSendMagicEffect(pos, 49) return TRUE end end return TRUE end Agora Vá Em : DATA/CREATURESCRIPTS/SCRIPTS/ Vá Em Login e Adicione Essa Linha abaixo : registerCreatureEvent(cid, "onPrepareDeathinifi") Agora Vá Em : Creaturescripts.xml : E adicione essa linha abaixo : <event type="preparedeath" name="onPrepareDeathinifi" event="script" value="aolinfinity.lua"/> Prontinho Gente : Rep Testado Com Sussso!!!

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...