Histórico de Curtidas
-
elinardo12 deu reputação a Guivalladao em (Resolvido)[PEDIDO] Como colocar tirar potions infinito server 10.53?tenta esse:
local ultimateHealthPot = 8473local greatHealthPot = 7591 local greatManaPot = 7590 local greatSpiritPot = 8472 local strongHealthPot = 7588 local strongManaPot = 7589 local healthPot = 7618 local manaPot = 7620 local smallHealthPot = 8704 local antidotePot = 8474 local greatEmptyPot = 7635 local strongEmptyPot = 7634 local emptyPot = 7636 local antidote = Combat() antidote:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING) antidote:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) antidote:setParameter(COMBAT_PARAM_TARGETCASTERORTOPMOST, true) antidote:setParameter(COMBAT_PARAM_AGGRESSIVE, false) antidote:setParameter(COMBAT_PARAM_DISPEL, CONDITION_POISON) local exhaust = Condition(CONDITION_EXHAUST_HEAL) exhaust:setParameter(CONDITION_PARAM_TICKS, (configManager.getNumber(configKeys.EX_ACTIONS_DELAY_INTERVAL) - 1000)) -- 1000 - 100 due to exact condition timing. -100 doesn't hurt us, and players don't have reminding ~50ms exhaustion. function onUse(cid, item, fromPosition, itemEx, toPosition) if itemEx.itemid ~= 1 or itemEx.type ~= THING_TYPE_PLAYER then return true end local player = Player(cid) if player:getCondition(CONDITION_EXHAUST_HEAL) then player:sendTextMessage(MESSAGE_STATUS_SMALL, Game.getReturnMessage(RETURNVALUE_YOUAREEXHAUSTED)) return true end if item.itemid == antidotePot then if not doCombat(cid, antidote, numberToVariant(cid)) then return false end player:addCondition(exhaust) player:say("Aaaah...", TALKTYPE_MONSTER_SAY) Item(item.uid):remove(1) player:addItem(emptyPot, 1) elseif item.itemid == smallHealthPot then if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 60, 85, CONST_ME_MAGIC_BLUE) then return false end player:addCondition(exhaust) player:say("Aaaah...", TALKTYPE_MONSTER_SAY) Item(item.uid):remove(1) player:addItem(emptyPot, 1) elseif item.itemid == healthPot then if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 125, 175, CONST_ME_MAGIC_BLUE) then return false end player:addCondition(exhaust) player:say("Aaaah...", TALKTYPE_MONSTER_SAY) Item(item.uid):remove(1) player:addItem(emptyPot, 1) elseif item.itemid == manaPot then if not doTargetCombatMana(0, cid, 75, 125, CONST_ME_MAGIC_BLUE) then return false end player:addCondition(exhaust) player:say("Aaaah...", TALKTYPE_MONSTER_SAY) Item(item.uid):remove(1) player:addItem(emptyPot, 1) elseif item.itemid == strongHealthPot then if(not isInArray({3,4,7,8}, player:getVocation():getId()) or player:getLevel() < 50) and not(player:getGroup():getId() >= 2) then player:say("This potion can only be consumed by paladins and knights of level 50 or higher.", TALKTYPE_MONSTER_SAY) return true end if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) then return false end player:addCondition(exhaust) player:say("Aaaah...", TALKTYPE_MONSTER_SAY) Item(item.uid):remove(1) player:addItem(strongEmptyPot, 1) elseif item.itemid == strongManaPot then if(not isInArray({1,2,3,5,6,7}, player:getVocation():getId()) or player:getLevel() < 50) and not(player:getGroup():getId() >= 2) then player:say("This potion can only be consumed by sorcerers, druids and paladins of level 50 or higher.", TALKTYPE_MONSTER_SAY) return true end if not doTargetCombatMana(0, cid, 115, 185, CONST_ME_MAGIC_BLUE) then return false end player:addCondition(exhaust) player:say("Aaaah...", TALKTYPE_MONSTER_SAY) Item(item.uid):remove(1) player:addItem(strongEmptyPot, 1) elseif item.itemid == greatSpiritPot then if(not isInArray({3, 7}, player:getVocation():getId()) or (player:getLevel() < 80)) and not(player:getGroup():getId() >= 2) then player:say("This potion can only be consumed by paladins of level 80 or higher.", TALKTYPE_MONSTER_SAY) return true end if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 250, 350, CONST_ME_MAGIC_BLUE) or not doTargetCombatMana(0, cid, 100, 200, CONST_ME_MAGIC_BLUE) then return false end player:addCondition(exhaust) player:say("Aaaah...", TALKTYPE_MONSTER_SAY) Item(item.uid):remove(1) player:addItem(greatEmptyPot, 1) elseif item.itemid == greatHealthPot then if(not isInArray({4, 8}, player:getVocation():getId()) or player:getLevel() < 80) and not(player:getGroup():getId() >= 2) then player:say("This potion can only be consumed by knights of level 80 or higher.", TALKTYPE_MONSTER_SAY) return true end if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 425, 575, CONST_ME_MAGIC_BLUE) then return false end player:addCondition(exhaust) player:say("Aaaah...", TALKTYPE_MONSTER_SAY) Item(item.uid):remove(1) player:addItem(greatEmptyPot, 1) elseif item.itemid == greatManaPot then if(not isInArray({1,2,5,6}, player:getVocation():getId()) or player:getLevel() < 80) and not(player:getGroup():getId() >= 2) then player:say("This potion can only be consumed by sorcerers and druids of level 80 or higher.", TALKTYPE_MONSTER_SAY) return true end if not doTargetCombatMana(0, cid, 150, 250, CONST_ME_MAGIC_BLUE) then return false end player:addCondition(exhaust) player:say("Aaaah...", TALKTYPE_MONSTER_SAY) Item(item.uid):remove(1) player:addItem(greatEmptyPot, 1) elseif item.itemid == ultimateHealthPot then if(not isInArray({4, 8}, player:getVocation():getId()) or player:getLevel() < 130) and not(player:getGroup():getId() >= 2) then player:say("This potion can only be consumed by knights of level 130 or higher.", TALKTYPE_MONSTER_SAY) return true end if not doTargetCombatHealth(0, cid, COMBAT_HEALING, 650, 850, CONST_ME_MAGIC_BLUE) then return false end player:addCondition(exhaust) player:say("Aaaah...", TALKTYPE_MONSTER_SAY) Item(item.uid):remove(1) player:addItem(greatEmptyPot, 1) end return true end -
elinardo12 deu reputação a Eytor em [8.54] Servidor + Client Naruto B&W [EXCLUSIVO]OLÁ USUARIOS DO TIBIA KING .. HOJE ESTAREI TRAZENDO UMA NOVIDADE .. O SERVIDOR DE NTO EXCLUSIVO DO NTO BLACK & WHITE(AKELE OT NOVO QUE FOI CRIADO A 1 MES POR E MIN E POR O [ADM] Johnatan).
VALE LEMBRAR QUE O NTO BLACK WHITE FOI UM DOS SERVIDORES DE NARUTIBIA QUE MAIS CRESCEU NOS ULTIMOS TEMPOS .. EM APENAS 1 SEMANA DE NTO JÁ ATINGIMOS A META DE 70 ~ 80 USUARIOS ONLINE FIXOS DIARIOS, E ESSE É O SERVIDOR MAIS RECENTE DO NTO BLACK WHITE BASEADO NO DO SERVIDOR MADARA RINNEGAN EDITADO POR MIN E POR O JOHNATA.
ANTES DE MAIS NADA GOSTARIA DE EXPLICAR O MOTIVO DE TAR POSTANDO O SERVER .. BEM O JOHNATAN ERA QUEM FAZIA PRATICAMENTE TUDO NAS ATUALIZAÇÕES E TAALS .. POREM ELE PAROU COM NTO AI TIVE QUE DESMONTAR O NTO B&W PORQUE EU NÃO TINHA CONDIÇÕES PRA DAR CONTA DO NTO SOZINHO.
CHEGA DE BLABLA E VAMOS LÁ!!
[+] NOVIDADES & CARACTERISTICAS
[+] ERROS E BUGS
[+] PRINTS DO SERVER
[+] DOWNLOAD
[+] CREDITOS
[+] NOVIDADES & CARACTERISTICAS
[+] ERROS E BUGS
[+] PRINTS DO SERVER
[+] Downloads
Servidor Naruto B&W: Clique Aqui
Client(descompilado): Clique Aqui
[+] Creditos
- Madara Rinnegan (servidor base)
- [ADM] Johnata Editar Praticamente Todo o Servidor
- Eu Por umas Besteiras q eu Coloquei e Por Postar
GOSTOU DO SERVIDOR?
DA UM REP++
-
elinardo12 deu reputação a GBs em (Resolvido)[PEDIDO] Server Nto forceO Que eu acho melhor são esses: http://www.tibiaking.com/forum/topic/44704-naruto-white/
http://www.tibiaking.com/forum/topic/43102-nto-by-madara-rinnegan/
Dps te passo o NTO Force.
-
elinardo12 deu reputação a Absolute em [Ver Gold] Checar seu balance - !mygoldFala galera do TK trago hoje algo bem simples, um comando que checa o balance do player.
Exemplo, o player está em qualquer lugar e quer verificar o seu gold na bp sem precisar ver, então ele digita: !mygold
É uma simples talkaction, fácil de adaptar
Vamos lá:
Em data/talkactions/scripts crie um arquivo com o nome de checkgold.lua e dentro adicione:
function onSay(cid, words, param, channel) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You have " .. getPlayerMoney(cid) .. " gold.") return true end Em data/talkactions/talkactions.xml adicione a seguinte linha:
<talkaction words="!mymoney" event="script" value="checkgold.lua"/> Pronto, adaptado em seu servidor!
Script simples e útil para alguns.
Dúvidas pergunte.
Até o próximo sistema.
Absolute.
-
elinardo12 deu reputação a Absolute em Stamina refil e Item que entrega todas blessBrother, fiz agora o da stamina, qualquer erro me avise.
data/actions/scripts crie absolutestamina.lua e adicione dentro:
function onUse(cid, item, fromPosition, itemEx, toPosition) local cfg = {} cfg.refuel = 42 * 60 * 1000 if(getPlayerStamina(cid) >= cfg.refuel) then doPlayerSendCancel(cid, "Your stamina is already full.") else doPlayerSetStamina(cid, cfg.refuel) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Your stamina has been refilled.") doPlayerRemoveItem(cid, 16999, 1) end return true end Em actions.xml:
<action itemid="16999" event="script" value="absolutestamina.lua"/> Aqui em doPlayerRemoveItem(cid, 16999, 1) = 16999 é o ID do item da stamina que vai ser removido
-
elinardo12 deu reputação a Absolute em [Floresta Encantada] New Event - ExclusivoFala galera , trago hoje pra vocês do tibiaking um evento EXXXXXXXXXXCLUSIVO!
É o evento [Floresta Encantada]
Como funciona?
- É aberto um teleport no templo do servidor (configurável).
- O mesmo ficará aberto por 5 minutos (os jogadores permanecerão na sala de espera do evento)
- Quando o evento começar os jogadores terão que andar pela floresta até chegar ao local da bandeira e dar use na mesma.
- Observação: Há diversos atalhos que os jogadores podem chegar rapidamente ou voltar para o começo ( Eis a sorte ).
- O Jogadores que chegar até a bandeira pós os atalhos e derrotar os monstros é o vencedor!
- Obs: Para concluir basta clicar na bandeira.
Vamos a instalação/scripts:
Em data/actions/scripts crie um arquivo com o nome de flagabsolute.lua e adicione dentro:
function onUse(cid, item) if getGlobalStorageValue(configExf.stats) == 1 then doTeleportThing(cid, configExf.templepos) doCloseExf() doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Voce ganhou o evento Floresta encantada, parabens receba seu premio") doBroadcastMessage(getPlayerName(cid) .. " foi o vencedor do Floresta Encantada.") doPlayerAddItem(cid, configExf.prize) else doPlayerSendCancel(cid, "Desculpe mas o evento encontra se fechado") end return true end Em data/actions/actions.xml adicione a seguinte linha:
<action uniqueid="5312" event="script" value="flagabsolute.lua" /> Em data/movements/scripts você irá criar 2 arquivos.
Primeiro crie o enterTp.lua e adicione dentro:
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor) if(not isPlayer(cid)) then return true end if(configExchantedForest.status == 0) then -- ativo addPlayerToExchantedForest(cid) end return true end Depois ainda na mesma pasta crie o magicTp.lua e dentro adicione:
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition) if isPlayer(cid) then if getGlobalStorageValue(configExf.stats) == 1 then doTeleportThing(cid, configExf.randpos[math.random(1, #configExf.randpos)]) doSendMagicEffect(getPlayerPosition(cid), 29) else doTeleportThing(cid, configExf.teleportPla) end end return true end Em data/movements/movements.xml adicione a linha:
<movevent type="StepIn" actionid="5310" event="script" value="eforest/magicTp.lua"/> Em data/talkactions/scripts crie um arquivo com o nome de florestaabsolute.lua e adicione dentro:
function onSay(cid, words, param) if param == "on" then if getGlobalStorageValue(configExf.stats) == -1 then doStartExf() else doPlayerSendCancel(cid, "O evento ja esta ocorrendo.") end elseif param == "off" then if getGlobalStorageValue(configExf.stats) ~= -1 then doCloseExf() doBroadcastMessage("Agora o evento Flroesta Encantada esta fechado.") else doPlayerSendCancel(cid, "O evento noo esta ocorrendo.") end end return true end Em data/talkactions/talkactions.xml adicione a seguinte linha:
<talkaction log="yes" words="/eforest" access="3" event="script" value="florestaabsolute.lua"/> Em data/monster crie um arquivo com o nome de Fucking Florest.xml e dentro adicione:
<?xml version="1.0" encoding="UTF-8"?> <monster name="Fucking Florest" nameDescription="a fucking flroest" race="blood" experience="0" speed="920" manacost="0"> <health now="60800" max="60800"/> <look type="229" corpse="9660"/> <targetchange interval="5000" chance="8"/> <strategy attack="100" defense="0"/> <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 staticattack="90"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" min="-0" max="-500"/> <attack name="lifedrain" interval="1000" chance="20" range="1" min="-200" max="-600"> <attribute key="areaEffect" value="redshimmer"/> </attack> <attack name="physical" interval="2000" chance="8" range="7" min="-0" max="-550"> <attribute key="shootEffect" value="suddendeath"/> <attribute key="areaEffect" value="mortarea"/> </attack> <attack name="physical" interval="1000" chance="35" range="7" min="-200" max="-800"> <attribute key="shootEffect" value="energy"/> </attack> </attacks> <defenses armor="26" defense="23"/> <elements> <element energyPercent="10"/> <element earthPercent="80"/> <element icePercent="15"/> <element firePercent="-10"/> <element holyPercent="-25"/> </elements> <immunities> <immunity death="1"/> <immunity invisible="1"/> </immunities> <voices interval="4000" chance="100"> <voice sentence="I AM BOSSING OF FLOREST"/> <voice sentence="NAO PEGUE MINHA BANDEIRA."/> <voice sentence="MUAHAHAHAHA."/> <voice sentence="Absolute on TibiaKing."/> </voices> <loot> <item id="2160" countmax="1" chance="2000"/><!-- gold coin --> </item> </loot> </monster> E para finalizar crie um arquivo com o nome de florestaabsolute.lua em data/libs e dentro adicione:
configExf = { teleportPos = {x = 32341,y = 32213, z = 7}, -- aonde aparecerá o teleport teleportPla = {x=32622, y=31699, z=7}, -- para onde o teleport levará stats = 201201180701, timetostart = 300, -- tempo para iniciar topleftPos = {x = 32589, y = 31662, z = 7}, -- canto esquerdo superior botrightPos = {x = 32631, y = 31693, z = 7}, -- canto direito inferior prize = 6571, -- recompensa templepos = {x=32369, y=32241, z=7}, -- posição do templo randpos = {{x=32625,y=31692,z=7},{x=32621,y=31692,z=7},{x=32617,y=31692,z=7},{x=32619,y=31687,z=7},{x=32624,y=31681,z=7},{x=32630,y=31668,z=7},{x=32627,y=31668,z=7},{x=32617,y=31672,z=7},{x=32613,y=31677,z=7},{x=32608,y=31665,z=7},{x=32610,y=31688,z=7},{x=32598,y=31684,z=7},{x=32596,y=31684,z=7},{x=32597,y=31668,z=7}} } -- O PAPAI ABSOLUTE EXPLICARÁ NAS IMAGENS ESSAS POSIÇÕES function doStartExf() doCreateTeleport(1387, configExf.teleportPla, configExf.teleportPos) setGlobalStorageValue(configExf.stats, 0) doBroadcastMessage("The Exchanted Forest event will open in " .. configExf.timetostart .. " seconds.") addEvent(doInitExf, configExf.timetostart*1000) end function doInitExf() if getGlobalStorageValue(configExf.stats) == 0 then doBroadcastMessage("The Exchanted Forest event is starting...") setGlobalStorageValue(configExf.stats, 1) end end function doCloseExf() setGlobalStorageValue(configExf.stats, -1) local item = getTileItemById(configExf.teleportPos, 1387) if(item.uid ~= 0) then doRemoveItem(item.uid) end doRemovePlayersFromArea(configExf.topleftPos, configExf.botrightPos, configExf.templepos) end Configurando a LIB:
teleportPos = {x = 32341,y = 32213, z = 7}, -- LUGAR DO SEU OT QUE IRÁ NASCER O TP
teleportPla = {x=32622, y=31699, z=7}, -- LUGAR ONDE OS PLAYERS IRÃO SER TELEPORTADOS, COMO NA IMAGEM SERÁ AQUI:
timetostart = 300, -- TEMPO EM SEGUNDOS PRA COMEÇAR O EVENTO
topleftPos = {x = 32589, y = 31662, z = 7}, -- canto esquerdo superior = NO CASO SERIA ASSIM, ONDE CIRCULEI:
botrightPos = {x = 32631, y = 31693, z = 7}, -- canto direito inferior (ONDE CIRCULEI):
prize = 6571, -- ID DA RECOMPENSA PRO GANHADOR
templepos = {x=32369, y=32241, z=7}, -- posição do templo do seu ot
randpos = {{x=32625,y=31692,z=7},{x=32621,y=31692,z=7},{x=32617,y=31692,z=7},{x=32619,y=31687,z=7},{x=32624,y=31681,z=7},{x=32630,y=31668,z=7},{x=32627,y=31668,z=7},{x=32617,y=31672,z=7},{x=32613,y=31677,z=7},{x=32608,y=31665,z=7},{x=32610,y=31688,z=7},{x=32598,y=31684,z=7},{x=32596,y=31684,z=7},{x=32592,y=31672,z=7},{x=32594,y=31672,z=7},{x=32597,y=31668,z=7}} -- Como na imagem irá mostrar, são os SQMS CINZAS, os responsáveis pelos atalhos, portanto coloque a configuração de cada um certo (IMPORTANTE):
-- END --
E por fim:
Download do mapa: https://www.sendspace.com/file/ilhba3
Scan do mapa:
Screen do mapa:
TO END:
SQM QUE VOCÊ COLOCARÁ O BOSS QUE CRIOU (FUCKING FLOREST):
Observação: Os monstros vocês colocarão no mapa no caminho da floresta, podem variar de acordo com o servidor, apenas não esqueçam rs.
Créditos:
Absolute
GlobalWAR
Qualquer dúvida por favor poste aqui no tópico que irei ajudar a resolver
Não tenha vergonha de perguntar, ninguém nasceu sabendo!
Espero ajudar e ver esse evento em vários servidores.
EXCLUUUUUUUUUSSIVO PRA VOCÊS
Em breve mais eventos/sistemas
Absolute.
-
elinardo12 deu reputação a Absolute em [Proibir Palavras] Anti DivulgaçãoFala galerinha do TK, hoje trago a vocês um sistema de bloquear algumas palavras no servidor!
Sabe aqueles players chatos que entram em seu otserver divulgando o servidor dele dias e dias, leva ban, volta e tudo mais? Poisé, chega disso né.
Primeiro vai o script depois explicação/config:
Em data/talkactions/scripts crie um arquivo com o nome de tibiakingproibiu.lua
function getFixedText(cid, text, replace) local wrongWords = {"#####", "ots-list.pl", "google.br", ".ddns.net", "hopto.org", "no-ip.org", "servegame.com"} local lowerText = string.lower(text) local noSpaceText = string.gsub(string.gsub(string.gsub(lowerText, "%s", ""), "%p", ""),"-", "") for w = 1, #wrongWords do wordLen = string.len(wrongWords[w]) for p = 1, string.len(text) do if(string.sub(lowerText, p, p+wordLen-1) == wrongWords[w]) then text = string.sub(text, 1, p-1) .. string.rep(replace, wordLen) .. string.sub(text, p+wordLen) end end end if(string.lower(text) == lowerText) then for c = 1, #wrongWords do if(string.find(noSpaceText, string.gsub(string.gsub(wrongWords[c], "%p", ""),"-", "")) ~= nil) then return "I want to post forbidden links.." end end end return text end --[[Channels which are not added to block: 1 - Party Channel 2 - Channel for Staff members 3 - Rule Violation Channel 4 - Channel for Counselors/Tutors 65536 - Private Chat Channel <-- Private Chat cannot be blocked with this script ]]-- local blocked_channels = {5,8,9} --Game-Chat, Real Chat, Help Channel local trade_channels = {6,7} --All trade channels <- These are also blocked local replace = "°" --Symbols which are shown instead of forbidden links -> ° local delay = {16246,10} -- {empty_storage, lenght of muted} function onSay(cid, words, param, channel) local fixedWords = getFixedText(cid, words, replace) if words ~= fixedWords and getPlayerAccess(cid) == 0 then if getPlayerStorageValue(cid,delay[1]) > os.time() then return doPlayerSendCancel(cid,"Voce foi mutado por ".. getPlayerStorageValue(cid,delay[1])-os.time() .." segundos, aqui e proibido divulgar.") end setPlayerStorageValue(cid,delay[1],os.time()+delay[2]) if channel == CHANNEL_DEFAULT then doCreatureSay(cid, fixedWords, TALKTYPE_SAY) doPlayerPopupFYI(cid, "Link: "..words.." e proibido, mal educado!.") return true elseif isInArray(trade_channels, channel) then doPlayerPopupFYI(cid, "Link: "..words.." e proibido neste canal.") return true elseif isInArray(blocked_channels, channel) then doPlayerPopupFYI(cid, "Link: "..words.." e proibido, mal educado!.") doPlayerSendChannelMessage(cid, getCreatureName(cid), fixedWords, TALKTYPE_CHANNEL_Y, channel) return true end end return false end Logo em seguida em em talkactions.xml adicione a seguinte linha:
<talkaction words="illegalWords" event="script" value="tibiakingproibiu.lua"/> Fim da instalação.
Explicação/Config:
local wrongWords = {"#####", "ots-list.pl", "google.br", ".ddns.net", "hopto.org", "no-ip.org", "servegame.com"} = Nas aspas ".." você colocará as palavras que deseja proibir, palavrões, divulgações e companhia...
local noSpaceText = string.gsub(string.gsub(string.gsub(lowerText, "%s", ""), "%p", ""),"-", "") = Aqui aconselho não mexer. É para evitar divulgações acompanhadas das Words (palavras) ou seja lá está proibido .servegame.com, então quando o player falar baiakfulunao.servegame.com irá proibir.
local delay = {16246,10} -- {empty_storage, lenght of muted} = no 16246 é a storage que irá salvar, não mexa. em 10 é o tempo em segundos que o player será mutado ao falar as palavras proibidas.
doPlayerPopupFYI(cid, "Link: "..words.." e proibido, mal educado!.") = Este doPlayerPopup é que vai aparecer naquelas janelas que aparece para clicar em ok (caixa de mensagens) caso queira alterar para mensagem de console substitua:
doPlayerPopupFYI(cid, "Link: "..words.." e proibido, mal educado!.")
por
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Link: "..words.." e proibido, mal educado!.")
É isso ae lindões do TK, caso haja alguma dúvida peço que perguntem!
Créditos:
Absolute
OTLAND
Até o próximo!
Absolute
-
elinardo12 deu reputação a Qwizer em VIP SYSTEM (TFS 1.0 e 0.4) Funcional.Na falta de coisa melhor fiz essa gambiarra que poderá ajudar muita gente
Crie em actions/script/other um arquivo vip.lua function onUse(cid, item) if getPlayerStorageValue(cid, 55489) - os.time() < 0 then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"Agora voce e um player VIP.") setPlayerStorageValue(cid, 55489, os.time() + (30*24*60*60)) doRemoveItem(item.uid, 1) else doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR,"Voce ja e VIP so poderá renovar daqui 30 dias.") end return TRUE end Nessa´parte 30*24*60*60 onde esta 30 coloca os dias que quer adicionar
em actions.xml adicione <action itemid="16101" script="other/vip.lua"/> e pronto um sistema vip funcional, na falta de outra opção.
Piso para passar somente que for VIP
Crie em data/movements/scripts um arquivo entradavip.lua
function onStepIn(cid, item, position, fromPosition) local config = { msgDenied = "Você não e vip ,Compre =D.", msgWelcome = "Seja Bem Vindo a Area vip." } if getPlayerStorageValue(cid, 55489) - os.time() <= 0 then doTeleportThing(cid, fromPosition, true) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgDenied) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return TRUE end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgWelcome) return TRUE end TAG 0.4
<movevent type="StepIn" uniqueid="13500" event="script" value="entradavip.lua"/> TAG 1.0
<movevent event="StepIn" uniqueid="13500" script="entradavip.lua"/> -
elinardo12 deu reputação a ViitinG em [talkaction] Mandar mensagem para pasta do servidorPara quem não sabe como funciona o script : É um comando que o player poderá usar para reportar bug's direto para o ADM do servidor com um intervalo de 60 minutos(configurável)
O bug será enviado para um log(bloco de notas) que será criado na pasta do servidor !
• Adicionando o script •
Em "data/talkactions/scripts/reportbugs.lua" :
function onSay(cid, words, param, channel) if os.time() > getPlayerStorageValue(cid, 14001) then setPlayerStorageValue(cid, 14001, os.time()+3600) local file = io.open('log.txt','a') file:write(getCreatureName(cid)..": "..tostring(param).."\n") file:close() doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING,'Mensagem enviada com sucesso.') else doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING,'Você não pode mandar outra mensagem ainda. Falta(m) '..(math.ceil((getPlayerStorageValue(cid, 14001)-os.time())/60)+1)..' minuto(s) para você poder mandar uma nova mensagem.') end return TRUE end Em "data/talkactions/talkactions.xml" :
<talkaction words="/reportbug" event="script" value="reportbugs.lua"/> • Imagens •
Quando utilizar o comando :
Quando utilizar o comando sem esperar o tempo :
Dentro da pasta do servidor é criado um txt chamado "log" e dentro dele ficará as mensagens :
• Configurando •
-
elinardo12 deu reputação a ViitinG em Evento War CastleOlá galera,vou disponibilizar o mapa para o evento War Castle feito pelo Absolute,espero que gostem !
Link para o tópico do script do evento : http://www.tibiaking.com/forum/topic/35731-castle-war-24h-conquiste-o-trono/
Imagens:
Coordenada do mapa : {x = 1000, y = 1000, z = 7}
Download : Link
Scan : https://www.virustotal.com/pt/url/ab5a9f73db53a3cac3b1e624ccf1e7fe95caf378ef374a0fa260a896cba7f9e6/analysis/1403050891/
-
elinardo12 deu reputação a Absolute em [Castle War 24H] Conquiste o trono!Fala galera linduxa do TK; hoje trago a vocês o tão desejado CASTLE WAR 24 HORAS, isto gera disputa intensa entre as guilds de seu servidor, atraindo assim mais jogadores que se interessam por guerras e seus demais sistemas! Modificado e com funções diferentes, no tópico ensinarei como instalar e como funciona.
Como funciona? WOOOOOOOOW!
Há um portal 24h aberto em algum lugar do seu mapa que ficará com o castle disponível 24h (avá).
Quando uma guild qualquer acessar o portal do castelo, irá aparecer para o servidor que a X guild está tentando dominar o castelo, então o líde da guild dominante atual irá dizer !gocastle para teleportar ao castelo e defende-lo.
O Objetivo para conquista do mesmo é invadi-lo derrotar os defensor da guild atual para abrir passagem, digamos assim, e subir ao trono, quando um membro da guild invadir o templo do trono e subir no mesmo a antiga guild dominadora é teleportada para o templo e o castelo fica sob domínio da nova guild.
Você poderá colocar como premiação acesso a áreas exclusivas do castelo, no caso hunts e cia. (Fica a vosso critério)
Evento testado nas versões 8.6; 9.6; 9.83; 9.86!
Observação:
Comando !gocastle faz com que o líder possa teleportar todos os membros da sua guild online para perto dele, desde que ele esteja no castle. Comando pode ser usado a cada 3 horas (exhausted).
Vamos aos scripts do sistema;
Em data/actions/scripts crie um arquivo com o nome de naviocastle.lua e coloque dentro:
function onUse(cid, item, fromPosition, itemEx, toPosition) if(item.actionid == 65500) then if getTopCreature({x=32464,y=32378,z=5}).uid > 0 then doTeleportThing(getTopCreature({x=32464,y=32378,z=5}).uid, {x=32526,y=32421,z=5}) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) else doPlayerSendCancel(cid, "Você precisa estar em cima do tapete.") return true end elseif (item.actionid == 65501) then if getTopCreature({x=32526,y=32421,z=5}).uid > 0 then doTeleportThing(getTopCreature({x=32526,y=32421,z=5}).uid, {x=32464,y=32378,z=5}) doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) else doPlayerSendCancel(cid, "Você precisa estar em cima do tapete.") end end return true end
Em actions.xml adicione a seguinte linha:
<action actionid="65500-65501" event="script" value="naviocastle.lua"/> Pós feito isto, em data/lib crie um arquivo com o nome de 015-COH e adicione dentro dele:
-- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. -- // COH_PUSHTIME = 10800 -- Tempo (em segundos) de exhausted para usar o comando !gocastle - Padrão (3 horas) COH_AREA = {{x = 32458, y = 32332, z = 7}, {x = 32558, y = 32429, z = 7}} -- Canto superior esquerdo / inferior direito do Castle -- // Não mexa daqui para baixo COH_STATUS = 201320111714 COH_PREPARE1 = 201320111715 COH_PUSHSTOR = 201320111716 COH_PREPARE2 = 201320111717 function doCastleRemoveEnemies() for index, creature in ipairs(getPlayersOnline()) do if isInArea(getThingPos(creature), COH_AREA[1], COH_AREA[2]) then if getPlayerGuildName(creature) ~= getGlobalStorageValue(COH_STATUS) then doTeleportThing(creature, getTownTemplePosition(getPlayerTown(creature))) end end end return true end Proximo passo, em data/monster.xml adicione a seguinte linha:
<monster name="Castle Guardian" file="Castle Guardian.xml"/> Em data/monsters crie um arquivo com o nome de Castle Guardian.xml e adicione o seguinte:
<?xml version="1.0" encoding="UTF-8"?> <monster name="Castle Guardian" nameDescription="a castle guardian" race="blood" experience="0" speed="0" manacost="0"> <health now="800000" max="800000"/> <look type="131" head="57" body="19" legs="57" feet="95" addons="1" corpse="6080"/> <targetchange interval="5000" chance="30"/> <strategy attack="100" defense="0"/> <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="4"/> <flag staticattack="90"/> <flag runonhealth="800"/> </flags> <attacks> <attack name="melee" interval="2000" min="-60" max="-180"/> <attack name="physical" interval="1000" chance="35" range="7" min="-205" max="-385"> <attribute key="shootEffect" value="energy"/> </attack> <attack name="manadrain" interval="1000" chance="17" range="7" min="-205" max="-560"/> <attack name="speed" interval="1000" chance="12" range="7" speedchange="-600" duration="40000"> <attribute key="areaEffect" value="redshimmer"/> </attack> <attack name="fire" interval="2000" chance="45" range="7" radius="3" target="1" min="-250" max="-420"> <attribute key="shootEffect" value="burstarrow"/> <attribute key="areaEffect" value="firearea"/> </attack> <attack name="firefield" interval="1000" chance="20" range="7" radius="2" target="1"> <attribute key="shootEffect" value="fire"/> </attack> <attack name="energy" interval="2000" chance="25" length="8" spread="0" min="-265" max="-445"> <attribute key="areaEffect" value="energy"/> </attack> <attack name="speed" interval="6000" chance="10" range="5" speedchange="-600" duration="20000"> <attribute key="areaEffect" value="redshimmer"/> </attack> </attacks> <defenses armor="1" defense="1"/> <elements> <element firePercent="100"/> <element energyPercent="100"/> <element icePercent="100"/> <element earthPercent="90"/> <element holyPercent="-25"/> <element physicalPercent="-33"/> </elements> <immunities> <immunity paralyze="1"/> <immunity invisible="1"/> </immunities> <summons maxSummons="2"> <summon name="deathspawn" interval="1500" chance="0" max="0"/> </summons> <loot> <item id="2148" countmax="20" chance1="100000" chancemax="0"/> </loot> </monster> Pós isto;
Em data/movements/scripts crie um arquivo com o nome de COH.lua e adicione o seguinte:
-- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. -- // function onStepIn(cid, item, pos, fromPosition) local pos = getThingPos(cid) if item.actionid == 16203 then if not isPlayer(cid) then return true end if getGlobalStorageValue(COH_STATUS) == getPlayerGuildName(cid) then doSendMagicEffect(getThingPos(cid), 14) doSendAnimatedText(pos, "CoH", math.random(1, 255)) else doSendMagicEffect(getThingPos(cid), 2) doTeleportThing(cid, fromPosition, false) doPlayerSendCancel(cid, "[CoH] Você não pertence á guild "..getGlobalStorageValue(COH_STATUS)..".") end return true end if item.actionid == 16202 then if not isPlayer(cid) then return true end if getPlayerGuildId(cid) > 0 then if (getGlobalStorageValue(COH_STATUS) ~= getPlayerGuildName(cid)) then doPlayerSendTextMessage(cid, 20, "[Castle of Honor] Você e sua guild estão no comando, os antigos donos ["..tostring(getGlobalStorageValue(COH_STATUS)).."] podem se vingar!") setGlobalStorageValue(COH_PREPARE1, -1) setGlobalStorageValue(COH_PREPARE2, -1) setGlobalStorageValue(COH_STATUS, getPlayerGuildName(cid)) doCastleRemoveEnemies() doBroadcastMessage("[Castle of Honor] O jogador ["..getCreatureName(cid).."] e sua guild ["..getPlayerGuildName(cid).."] estão no comando do castelo, vá dominar e impedir isso!") end else doSendMagicEffect(pos, 2) doTeleportThing(cid, fromPosition, false) doPlayerSendCancel(cid, "[CoH] Você não possui uma guild.") end return true end if item.actionid == 16200 then if not isPlayer(cid) then return true end if getPlayerGuildId(cid) > 0 then doSendAnimatedText(pos, "CoH", math.random(1, 255)) if (getGlobalStorageValue(COH_PREPARE1) ~= getPlayerGuildName(cid)) and ((getGlobalStorageValue(COH_PREPARE2) ~= getPlayerGuildName(cid))) then setGlobalStorageValue(COH_PREPARE1, getPlayerGuildName(cid)) doBroadcastMessage("[Castle of Honor] Atenção! A guild "..getPlayerGuildName(cid).." está tentando dominar o castelo, preparem-se!") end else doSendMagicEffect(pos, 2) doTeleportThing(cid, fromPosition, false) doPlayerSendCancel(cid, "[CoH] Você não possui uma guild.") return true end end if item.actionid == 16201 then if not isPlayer(cid) then return true end doSendAnimatedText(pos, "CoH", math.random(1, 255)) if (getGlobalStorageValue(COH_PREPARE2) ~= getPlayerGuildName(cid)) then setGlobalStorageValue(COH_PREPARE2, getPlayerGuildName(cid)) doBroadcastMessage("[Castle of Honor] Atenção! A guild "..getPlayerGuildName(cid).." está muito próxima do domínio, ataquem!") end end return true end Em data/movements/movements.xml adicione a seguinte linha:
<movevent type="StepIn" actionid="16200-16203" event="script" value="COH.lua"/> Próximo passo:
Em data/talkactions/scripts crie um arquivo com o nome de COHABSOLUTE.lua e adicione o seguinte:
-- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. -- // function onSay(cid, words, param) if getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER then if getPlayerStorageValue(cid, COH_PUSHSTOR) < os.time() then if getGlobalStorageValue(COH_STATUS) == getPlayerGuildName(cid) then if isInArea(getThingPos(cid), COH_AREA[1], COH_AREA[2]) then if #getMembersOnline(getPlayerGuildId(cid)) > 0 then for index, creature in ipairs(getMembersOnline(getPlayerGuildId(cid))) do if (getTileInfo(getThingPos(creature)).protection ~= true) then return doPlayerSendCancel(cid, "[CoH] Os membros devem estar em área PZ.") end doTeleportThing(creature, getThingPos(cid)) end setPlayerStorageValue(cid, COH_PUSHSTOR, os.time() + COH_PUSHTIME) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "[Castle of Honor] Você teleportou seus membros, comando pode ser usado a cada "..tostring(COH_PUSHTIME / 60).." minuto(s).") else doPlayerSendCancel(cid, "[CoH] Para executar isso, sua guild deve ter 2 ou mais membros online.") end else doPlayerSendCancel(cid, "[CoH] Você deve estar no castelo.") end else doPlayerSendCancel(cid, "[CoH] Sua guild não é dona do castelo.") end else doPlayerSendCancel(cid, "[CoH] Você deve aguardar "..tostring(math.ceil((getPlayerStorageValue(cid, COH_PUSHSTOR) - os.time()) / 60)).." minuto(s) para usar este comando.") end else doPlayerSendCancel(cid, "[CoH] Você deve ser líder de uma guild para executar este comando.") end return true end function getMembersOnline(id) local mbr = {} for index, creature in ipairs(getPlayersOnline()) do if getPlayerGuildId(creature) == id then if getCreatureSkullType(creature) < 3 then table.insert(mbr, creature) end end end return mbr or #mbr end Em data/talkactions/talkactions.xml adicione a seguinte linha:
<talkaction words="!castlepush;!pushmembers;!gocastle" event="script" value="COHABSOLUTE.lua"/> Quem disponibiliza o mapa do castelo a vocês é nosso amigo ViitinG, segue o link do tópico para download do mesmo já adaptado para este Castle:
http://www.tibiaking.com/forum/topic/35730-mapa-evento-war-castle/
Explicação das actions e demais (caso não use o mapa disponibilizado pelo Viiting lembre de adicionar ao castelo);
ActionID 16200 - No meio do caminho para o castelo, ActionID 16201 - Perto do castelo, ActionID 16202 - No piso, trono que faz com que domine, e ActionID 16203 - Para a passagem de acesso ás hunts / city exclusivas da guild vencedora. Importante: Para colocar uma passagem para as hunts ou o que for a premiação da guild vencedora, coloque um caminho único com os actionIDS 16203, assim só a guild dominante do castelo poderá passar neste local. É importante lembrar que este script é de autoria do Roksas Nunez, ex scripter da empresa chaitosoft, fiz simples modificações de otimização.
Qualquer dúvida peço que entre em contato comigo e poste aqui no tópico.
Créditos:
Absolute
Roksas
ViitinG
Espero que gostem, afinal raro alguém disponibilizar algo tão desejado e útil assim!
Até o próximo sistema.
Absolute on tibiaking =p
-
elinardo12 deu reputação a Victor Fasano Raful em [2015] Gesior 1.0 - VictorWEBMasterSalve TK!
Após a morte subta de um ... bom vocês estão aparte do acontecido... Bom, resolvi disponibilizar minhas versões dos meus websites compatível com o mais novo e complexo TFS 1.0 (The Forgotten Server 10.20 ~10.3x).
Bom, este website está em uma versão BETA, ou seja. Há erros, não há falhas de invasão e algo relacionado a intervenções in game ou no site. NÃO tem a possibilidade de clonar points, não garanto itens pois isto é um processo ingame... Não há possibilidade de fazer falsos pagamentos e ter pontos sendo creditados.
Bom, esta versão estava sendo disponibilizada por minha pessoa por um preço de R$200, resolvi postar pois estou sem mais cabeça de ficar fazendo negociações com iniciantes. Então resolvi postar aqui e deixar com que vocês quebrem as suas próprias cabeças.
Com certeza esta não é minha melhor versão do site, pois tenho que lucrar algo com isto né..
Bom, apreciem com moderação!
Website foi testado com uma base desconhecida do TFS 1.0 na versão 10.37. Obteve funcionabilidade de 97% de sucesso.
Download Website VictorWEBMaster 1.0 Scan Website VictorWEBMaster 1.0
>> Quais quer que sejam os bugs, por favor reportem no tópico ou eventualmente na sessão correta de dúvidas de websites. <<
-
elinardo12 deu reputação a Absolute em [Battlefield Event New!] Exclusivo e mais legal ;pFala galerinha linda do TK, vejo muita gente reclamando do battlefield do nosso amigo Vodkart, mas aqui funciona 100%, creio que seja rejeição nos TFS, mas então resolvi trazer a vocês um battlefield que venho customizando a algum tempo, o mesmo possui em alguns servidores poloneses, globalwar e cia.
O Evento é um pouco modificado do que o tradicional battlefield, porém acho que ficou mais legal, é de pegar a bandeira do time inimigo, para dar um pouco mais de emoção que tal? rs.
Preste atenção nos arquivos e como configurar, estarei explicando tudo passo a passo.
Atenção, o comando para abrir o evento é: /battlefield 20 (o 20 é o número de participantes, no caso 10 no time vermelho e 10 no preto, coloque sempre números pares para balancear corretamente o evento)
Vamos ao que interessa:
Primeiramente, em data/libs crie um arquivo com o nome de battlefield.lua e adicione o seguinte dentro:
battlefield = { storage = 201206300801, storage2 = 201206300802, tpPos = {x=32342, y=32213, z=7}, -- aonde aparecerá o teleport pos_team_1 = {x=31621,y=31860,z=7}, -- posição do team 1 (do lado direito) pos_team_2 = {x=31582,y=31860,z=7}, -- posição do team 2 (do lado esquerdo) spectors = {{x=31593,y=31853,z=6},{x=31609,y=31853,z=6},{x=31593,y=31866,z=6},{x=31609,y=31866,z=6}}, -- aonde aparecerá os espectadores (em volta do battlefield) team1Name = "Black Assassins", team2Name = "Red Barbarians", } function doBroadCastBattle(type,msg) for _, cid in pairs(getPlayersOnline()) do if getPlayerStorageValue(cid, battlefield.storage2) ~= -1 then doPlayerSendTextMessage(cid,type,msg) end end return true end function removeTp() local t = getTileItemById(battlefield.tpPos, 1387) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(battlefield.tpPos, CONST_ME_POFF) end end function OpenWallBattle() local x = true local B = { [1] = {1056,{x=31601, y=31858, z=6, stackpos = 1}}, -- posição da barreira [2] = {1056,{x=31601, y=31859, z=6, stackpos = 1}}, -- posição da barreira [3] = {1056,{x=31601, y=31860, z=6, stackpos = 1}}, -- posição da barreira [4] = {1056,{x=31601, y=31861, z=6, stackpos = 1}} -- posição da barreira } for i = 1, #B do if getTileItemById(B[i][2], B[i][1]).uid == 0 then x = false end if x == true then doRemoveItem(getThingfromPos(B[i][2]).uid,1) else doCreateItem(B[i][1], 1, B[i][2]) end end end function getWinnersBattle(storage) local team = storage == 1 and battlefield.team1Name or battlefield.team2Name doBroadcastMessage("Players from team ".. team .." won the event battlefield,they received a Master Surprise Bag!") setGlobalStorageValue(battlefield.storage, -1) removeTp() OpenWallBattle() for _, cid in pairs(getPlayersOnline()) do if getPlayerStorageValue(cid, battlefield.storage2) ~= -1 then doRemoveCondition(cid, CONDITION_OUTFIT) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) if getPlayerStorageValue(cid, battlefield.storage2) == storage then doPlayerAddItem(cid,6571,1) end setPlayerStorageValue(cid, battlefield.storage2, -1) end end end Como configurar este passo;
Pós o primeiro passo, crie um arquivo em actions/scripts com o nome de battlefieldAbsolute.lua e adicione o seguinte dentro:
function onUse(cid, item, fromPosition, itemEx, toPosition) local team = getPlayerStorageValue(cid, battlefield.storage2) if (item.actionid == 45001 and team == 1) or (item.actionid == 45002 and team == 2) then getWinnersBattle(team) end return true end
Em actions.xml, adicione as seguintes linhas:
<action actionid="49901" event="script" value="battlefieldAbsolute.lua"/> <action actionid="45002" event="script" value="battlefieldAbsolute.lua"/> Pós o segundo passo, vá até sua pasta creaturescripts/scripts e crie um arquivo com o nome de combat.lua e adicione o seguinte:
function onLogin(cid) if getGlobalStorageValue(_Lib_Battle_Info.TeamOne.storage) == -1 then setGlobalStorageValue(_Lib_Battle_Info.TeamOne.storage, 0) setGlobalStorageValue(_Lib_Battle_Info.TeamTwo.storage, 0) setGlobalStorageValue(_Lib_Battle_Info.storage_count, 0) end registerCreatureEvent(cid, "BattleTeam") registerCreatureEvent(cid, "BattleDeath") return true end function onCombat(cid, target) if isPlayer(cid) and isPlayer(target) then if getPlayerStorageValue(cid, _Lib_Battle_Info.TeamOne.storage) == 1 and getPlayerStorageValue(target, _Lib_Battle_Info.TeamOne.storage) == 1 then doPlayerSendCancel(cid, "You may not attack your team mates.") return false end if getPlayerStorageValue(cid, _Lib_Battle_Info.TeamTwo.storage) == 1 and getPlayerStorageValue(target, _Lib_Battle_Info.TeamTwo.storage) == 1 then doPlayerSendCancel(cid, "You may not attack your team mates.") return false end return true end return true end function onPrepareDeath(cid, deathList, lastHitKiller, mostDamageKiller) if getPlayerStorageValue(cid, _Lib_Battle_Info.TeamOne.storage) >= 1 then setPlayerStorageValue(cid, _Lib_Battle_Info.TeamOne.storage, -1) setGlobalStorageValue(_Lib_Battle_Info.TeamOne.storage, getGlobalStorageValue(_Lib_Battle_Info.TeamOne.storage)-1) doRemoveCondition(cid, CONDITION_OUTFIT) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "[Battle Field] You Are Dead!") if getGlobalStorageValue(_Lib_Battle_Info.TeamOne.storage) == 0 then getWinnersBattle(_Lib_Battle_Info.TeamTwo.storage) else doBroadCastBattle(23,"[BattleField Information] ".._Lib_Battle_Info.TeamOne.name.." "..getGlobalStorageValue(_Lib_Battle_Info.TeamOne.storage).." VS "..getGlobalStorageValue(_Lib_Battle_Info.TeamTwo.storage).." " .._Lib_Battle_Info.TeamTwo.name) end elseif getPlayerStorageValue(cid, _Lib_Battle_Info.TeamTwo.storage) >= 1 then setPlayerStorageValue(cid, _Lib_Battle_Info.TeamTwo.storage, -1) setGlobalStorageValue(_Lib_Battle_Info.TeamTwo.storage, getGlobalStorageValue(_Lib_Battle_Info.TeamTwo.storage)-1) doRemoveCondition(cid, CONDITION_OUTFIT) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "[Battle Field] You Are Dead!") if getGlobalStorageValue(_Lib_Battle_Info.TeamTwo.storage) == 0 then getWinnersBattle(_Lib_Battle_Info.TeamOne.storage) else doBroadCastBattle(23,"[BattleField Information] ".._Lib_Battle_Info.TeamOne.name.." "..getGlobalStorageValue(_Lib_Battle_Info.TeamOne.storage).." VS "..getGlobalStorageValue(_Lib_Battle_Info.TeamTwo.storage).." " .._Lib_Battle_Info.TeamTwo.name) end end return true end Ainda na mesma pasta crie outro arquivo com o nome de pdeath.lua com o seguinte conteúdo: (ATENÇÃO QUE NA MESMA PASTA SÃO 2 ARQUIVOS)
function onPrepareDeath(cid, corpse, lastHitKiller, mostDamageKiller) if getPlayerStorageValue(cid, config_tvt.green_kills) > 0 then doTeleportThing(cid, config_tvt.green_pos) setGlobalStorageValue(red_kills, getGlobalStorageValue(red_kills) + 1) end if getPlayerStorageValue(cid, config_tvt.red_kills) > 0 then doTeleportThing(cid, config_tvt.red_pos) setGlobalStorageValue(red_kills, getGlobalStorageValue(green_kills) + 1) end doPlayerSendTextMessage(cid, 27, "You dead! by Absolute") return true end Em creaturescripts/creaturescripts.xml adicione as seguintes linhas:
<event type="preparedeath" name="BattlefieldP" event="script" value="pdeath.lua"/> <event type="combat" name="BattlefieldC" event="script" value="combat.lua"/> Pós o terceiro passo, em movements/scripts crie um arquivo com o nome de battlefieldAbsolute.lua e adicione o seguinte:
local conditionBlack = createConditionObject(CONDITION_OUTFIT) setConditionParam(conditionBlack, CONDITION_PARAM_TICKS, -1) addOutfitCondition(conditionBlack, {lookType = 134, lookHead = 114, lookBody = 114, lookLegs = 114, lookFeet = 114}) local conditionRed = createConditionObject(CONDITION_OUTFIT) setConditionParam(conditionRed, CONDITION_PARAM_TICKS, -1) addOutfitCondition(conditionRed, {lookType = 143, lookHead = 94, lookBody = 94, lookLegs = 94, lookFeet = 94}) function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) > 3 then doTeleportThing(cid, battlefield.pos_team_1) return true elseif getGlobalStorageValue(battlefield.storage) == 0 then doTeleportThing(cid, battlefield.spectors[math.random(#battlefield.spectors)]) return true end if getGlobalStorageValue(battlefield.storage) > 0 then if getGlobalStorageValue(battlefield.storage) % 2 == 0 then setPlayerStorageValue(cid, battlefield.storage2, 1) doAddCondition(cid, conditionBlack) doTeleportThing(cid, battlefield.pos_team_1) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You will join the team " .. battlefield.team1Name .. "!") else setPlayerStorageValue(cid, battlefield.storage2, 2) doAddCondition(cid, conditionRed) doTeleportThing(cid, battlefield.pos_team_2) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You will join the team " .. battlefield.team2Name .. "!") end setGlobalStorageValue(battlefield.storage, getGlobalStorageValue(battlefield.storage)-1) if getGlobalStorageValue(battlefield.storage) == 0 then doBroadcastMessage("Battlefield will start in 1 minute, please create your strategy!") addEvent(doBroadcastMessage, 60*1000, "BattleField will begin now!") addEvent(OpenWallBattle, 60*1000) else doBroadcastMessage("We are waiting "..getGlobalStorageValue(battlefield.storage).." players to Battlefield starts.") end end return true end Em movements.xml adicione a seguinte linha:
<movevent type="StepIn" actionid="45000" event="script" value="battlefieldAbsolute.lua"/> Á pedidos fiz o comando para abrir manualmente, então em talkactions/scripts crie um arquivo com o nome de battlefieldopenAbsolute.lua e coloque:
function onSay(cid, words, param) if getGlobalStorageValue(battlefield.storage) ~= -1 then doPlayerSendCancel(cid, "The event is already open.") return true elseif not tonumber(param) or param % 2 ~= 0 then doPlayerSendCancel(cid, "You must choose an even number.") return true end doBroadcastMessage("The event BattleField was opened and We are waiting "..param.." Players! Team divided into "..((param)/2).." VS "..((param)/2)) setGlobalStorageValue(battlefield.storage, tonumber(param)) local tp = doCreateItem(1387, 1, battlefield.tpPos) doItemSetAttribute(tp, "aid", 45000) return true end Em talkactions.xml adicione a linha:
<talkaction words="/battlefield" access="3" event="script" value="battlefieldopenAbsolute.lua"/> Screenshots do mapa do evento; Clique em spoiler para ver.
Download & Scan do mapa;
-
elinardo12 deu reputação a Absolute em [City War Event] Luta pela sobrevivênciaFala galerinha linda do TK, hoje estou trazendo um evento que andei modificando e otimizando, é o evento City WAR, este evento tem no servidor globalwar e outros.
A autoria vem de um membro da otland, portante havia o mesmo aqui em um datapack e decidi otimizar este evento para vocês do TK.
Observação: É um pouco parecido com o evento do meu amigo e scripter DuH, porém com mais funções e regras, mas o objetivo é praticamente o mesmo.
Como funciona:
Vamos lá;
Primeiramente, em sua pasta data/lib crie um arquivo com o nome de city war.lua e dentro do mesmo coloque:
configCW = {timetostart = 500, -- tempo para iniciar o evento em segundos by Absolute telpos = {x=32340, y=32213, z=7}, -- onde aparecerá o teleport stats = 201201201701, kill = 201201201702, death = 201201201703, ostime = 201201201704, evttime = 20, -- quanto tempo irá rolar o evento topleftPos = {x=32722, y=31336, z=6}, -- canto esquerdo superior botrightPos = {x=32791, y=31384, z=6}, -- canto direito inferior templepos = {x=32369, y=32241, z=7}, -- posição do templo principal arenapos = {{x=32722, y=31340, z=6}, {x=32786, y=31336, z=6}, {x=32722, y=31380, z=6}, {x=32783, y=31374, z=6}}, -- posição dos 4 tronos times = 8, -- não precisa mexer finaltime = 300 -- não precisa mexer } function configCW:new() local newevt = {} setmetatable(newevt, self) self.__index = self doBroadcastMessage("The City War will be open in " .. self.timetostart .. " seconds.") setGlobalStorageValue(self.stats, 0) addEvent(function () newevt:start() end, self.timetostart*1000) end function configCW:start() if getGlobalStorageValue(self.stats) == 0 then setGlobalStorageValue(self.ostime, os.time()) local teleport = doCreateItem(1387, self.telpos) doItemSetAttribute(teleport, "aid", 5540) setGlobalStorageValue(self.stats, 1) doBroadcastMessage("The City War is starting...") for _, posi in pairs(self.arenapos) do local item = getTileItemById(posi, 1387) if(item.uid ~= 0) then doRemoveItem(item.uid) end end addEvent(function () self:preclose() end, self.evttime*1000*60) addEvent(function () self:announce(0) end, (self.evttime/self.times)*1000*60) end end function configCW:announce(times) if times < self.times then if #self:getTopFrags(true) >= 1 then doBroadcastMessage("Top City War fraggers: " .. self:getTopFrags()) end addEvent(function () self:announce(times+1) end, (self.evttime/self.times)*1000*60) end end function configCW:preclose() if getGlobalStorageValue(self.stats) == 1 then setGlobalStorageValue(self.stats, 2) doBroadcastMessage("The City War will end in " .. self.finaltime .. " seconds.") addEvent(function () self:close() end, self.finaltime*1000) local item = getTileItemById(self.telpos, 1387) if(item.uid ~= 0) then doRemoveItem(item.uid) end end end function configCW:close() if getGlobalStorageValue(self.stats) == 2 then if #self:getTopFrags(true) >= 1 then doBroadcastMessage("The City War has ended. The winners are: " .. self:getTopFrags()) else doBroadcastMessage("The City War has ended. There were no winners.") end doRemovePlayersFromArea(self.topleftPos, self.botrightPos, self.templepos) for _, posi in pairs(self.arenapos) do doCreateTeleport(1387, self.templepos, posi) end for place, info in ipairs(self:getTopFrags(true)) do if place > 5 then break end local cid = getPlayerByName(info) doPlayerSendTextMessage(cid, 4, "Congratulations, you were the " .. place .. "º place in the City War.") doPlayerAddItem(cid, 6571, 1) end setGlobalStorageValue(self.stats, -1) end end function configCW:isPlayerInEvent(cid) if getPlayerStorageValue(cid, self.stats) == -1 or getPlayerStorageValue(cid, self.stats) - os.time() <= -5 or getGlobalStorageValue(self.stats) < 1 then return false end return true end function configCW:getTopFrags(tab) local frag = {} for _, pid in pairs(getPlayersOnline()) do if (getPlayerStorageValue(pid, self.kill) ~= -1 or getPlayerStorageValue(pid, self.death) ~= -1) and self:isPlayerInEvent(pid) then local kill = getPlayerStorageValue(pid, self.kill)+1 local death = getPlayerStorageValue(pid, self.death)+1 print(getCreatureName(pid), kill-death) table.insert(frag, {getCreatureName(pid), kill-death}) end end print(#frag) local frag, str, n = doOrderTab(frag, 0), nil, 5 print(#frag) if tab then return frag else if #frag < 5 then n = #frag end for i = 1, n do local cid = getPlayerByName(frag[i]) local kill = getPlayerStorageValue(cid, self.kill)+1 local death = getPlayerStorageValue(cid, self.death)+1 str = str and str .. ", " .. frag[i] .. "[" .. kill .. "/" .. death .. "]" or frag[i] .. "[" .. kill .. "/" .. death .. "]" end end return str end function doOrderTab(tabela, value) local max, index = {}, nil for i = 1, #tabela do valor = value for a, b in ipairs(tabela) do if b[2] > valor then valor = b[2] valor2 = b[1] index = a end end table.remove(tabela, index) if valor ~= value then table.insert(max, valor2) end end return max end Configuração do arquivo:
telpos = {x=32340, y=32213, z=7}, -- POSIÇÃO ONDE NASCE O TP DO EVENTO!
topleftPos = {x=32722, y=31336, z=6}, -- AQUI COLOQUE A POSIÇÃO DO CANTO ESQUERDO LA EM CIMA DO MAPA botrightPos = {x=32791, y=31384, z=6}, -- AQUI A POSIÇÃO DO CANTO DIREITO EM BAIXO DO MAPA templepos = {x=32369, y=32241, z=7}, -- POSIÇÃO DO TEMPLO ONDE OS JOGADORES NASCERAM PÓS A MORTE arenapos = {{x=32722, y=31340, z=6}, {x=32786, y=31336, z=6}, {x=32722, y=31380, z=6}, {x=32783, y=31374, z=6}}, -- ATENÇÃO, NO MAPA QUE ESTAREI DISPONIBILIZANDO VISIVELMENTE TERÁ 4 BASES, VOCÊ TERA QUE COLOCAR A POSIÇÃO DAS BASES AÍ NESSES 3 LUGARES. doPlayerAddItem(cid, 6571, 1) -- AQUI VOCÊ COLOCARÁ O PRÊMIO DO GANHADOR, NO CASO QUEIRA ADICIONAR POR EXEMPLO 1kk, COLOQUE 2160,1 - Primeiro ID depois quantia. Segundo passo, crie um arquivo com o nome de citywarCreature.lua e coloque dentro da pasta creaturescripts/scripts com o seguinte conteúdo: function onPrepareDeath(cid, lastHitKiller, mostDamageKiller) if isInRange(getCreaturePosition(cid), configCW.topleftPos, configCW.botrightPos) then setPlayerStorageValue(cid, configCW.death, getPlayerStorageValue(cid, configCW.death) +1) setPlayerStorageValue(lastHitKiller[1], configCW.kill, getPlayerStorageValue(lastHitKiller[1], configCW.kill) +1) end return true end E adicione em creaturescripts.xml a seguinte tag
<event type="preparedeath" name="CityWar" event="script" value="citywarCreature.lua"/> Terceiro passo, crie um arquivo em movements/scripts com o nome de citywarMovements.lua com o seguinte conteúdo: function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition) if isPlayer(cid) and getGlobalStorageValue(configCW.stats) == 1 then doTeleportThing(cid, configCW.arenapos[math.random(1, #configCW.arenapos)]) doSendMagicEffect(getPlayerPosition(cid), 28) if not(configCW:isPlayerInEvent(cid)) then setPlayerStorageValue(cid, configCW.stats, getGlobalStorageValue(configCW.ostime) + configCW.evttime*60 + configCW.finaltime) setPlayerStorageValue(cid, configCW.kill, -1) setPlayerStorageValue(cid, configCW.death, -1) end else doTeleportThing(cid, fromPosition) end return true end Em Movements.xml adicione a seguinte linha: <movevent type="StepIn" actionid="5540" event="script" value="citywarMovements.lua"/> Quarto e último passo, em talkactions/scripts crie um arquivo com o nome de citywarTalkactions.lua e coloque o seguinte conteúdo:
function onSay(cid, words, param) if getGlobalStorageValue(configCW.stats) == -1 then configCW:new() else doPlayerSendCancel(cid, "The event is already running.") end return true end Em talkactions/talkactions.xml adicione a seguinte linha:
<talkaction log="yes" words="/citywar" access="3" event="script" value="citywarTalkactions.lua"/> E por fim, estou disponibilizando o world do evento, vocês usam se quiser, tentei adapta-lo para 8.6 mas ficou meio slá, o Viiting estava ocupado e não pode me ajudar, enfim segue a imagem e download do world.otbm:
Lembrando que ninguém além do Collocorpusek da otland tem direito de pedir remoção do script, pois a base é dele.
Créditos:
Absolute
Collocor Gringo Lindo.
-
elinardo12 deu reputação a Absolute em [Eject System] Expulsar Player Inativo da HouseSalve galerinha do TK.
Hoje vim trazer um script muito útil e buscado hoje em dia nos otservers, é o sistema de !eject.
Como funciona ?
Caso o player fica X dias sem logar (configurável) qualquer outro jogador pode chegar na porta da house dizendo o comando !eject, então a house ficará sem dono e em seugida o player poderá compra-la normalmente, dizendo !buyhouse.
É um sript simples e que poderá dar lugar e novas houses a jogadores novos, expulsando os jogadores que não logam mais no seu servidor.
Nota: o script é vendido em uma "empresa" de open tibia onde estou colocando os créditos , disponibilizando aqui minha adaptação e o scrpit para vocês, achou errado? não gostou? ENTÃO COMPRA LÁ =p
Vamos ao que interessa;
Abra sua pasta talkactions/scripts e dentro dela crie um arquivo .lua com o nome de: expulse_house.lua e dentro coloque:
function onSay(cid, words, param) local position = getPlayerPosition(cid) if getPlayerLookDir(cid) == 0 then positions = {x=position.x, y=position.y-1, z=position.z} elseif getPlayerLookDir(cid) == 1 then positions = {x=position.x+1, y=position.y, z=position.z} elseif getPlayerLookDir(cid) == 2 then positions = {x=position.x, y=position.y+1, z=position.z} elseif getPlayerLookDir(cid) == 3 then positions = {x=position.x-1, y=position.y, z=position.z} end if getHouseFromPos(positions) == false then doPlayerSendTextMessage(cid, 27, "Voce precisa estar na frente a porta da casa para usar o comando.") return true end local days = 5*24*60*60 local own = getHouseOwner(getHouseFromPos(positions)) local qry = db.getResult("SELECT `lastlogin` FROM `players` WHERE `id` = "..own) if(qry:getID() ~= -1) then last = tonumber(qry:getDataInt("lastlogin")) if last < os.time() - days then setHouseOwner(getHouseFromPos(positions), NO_OWNER_PHRASE,true) doPlayerSendTextMessage(cid, 27, "A Casa agora esta sem dono, você ou outro jogador pode compra-la") end if last > os.time() - days then doPlayerSendTextMessage(cid, 27, "O proprierário desta casa ainda está ativo no servidor, tente outra casa.") end end return true end Pós ter feito isto, abra o seu arquivo talkactions.xml e coloque debaixo de uma linha qualquer a seguinte linha:
<talkaction words="!eject" event="script" value="expulse_house.lua"/> Pronto. basta o player chegar na porta da casa e dizer !eject, caso o jogador esteja a 5 dias sem logar, os items do antigo dono irão para o DEPOT e a casa ficará sem dono.
@Configuração do script:
local days = 5*24*60*60 Onde está o número 5 é o tanto de dias que o player tem que ficar sem logar para outro jogador executar o comando.
Para alterar para 3 dias, ficaria como exemplo:
local days = 3*24*60*60 E assim sucessivamente.
Qualquer dúvida não deixe de me comunicar, estarei disposto a ajuda-lo.
Créditos:
Keilost
-
elinardo12 deu reputação a Absolute em [FireStorm Event] Chuva de fogos! Desespero [ON]Hello nação TK, de um tempo pra cá eu e o membro ViitinG resolvemos trabalhar em cima de um novo evento para vocês, é o FireStorm event!
Eu vim trabalhando no script do evento em MODS e o Victor no mapa do mesmo.
WTF DE FAIRIEISTORMIII IS IT?
Pois é galera, o nome já diz tudo "Chuva de Fogos".
Algum membro da equipe executará o comando !startfire para dar início ao evento, então irá aparecer uma mensagem para todos os jogadores do servidor que o evento Fire Storm foi aberto.
Então os jogadores irão dizer: !joinfire para entrar no evento, os jogadores ficarão imóveis até que o evento comece, o jogador não poderá usar o comando quando estiver com battle fight.
Pós dar o tempo para inciar o evento (configurável no script) os jogadores serão teleportados para a área específica do mesmo onde em 1 minuto começará a cair FOGOS do céu, onde os jogadores contaram com a habilidade e a sorte para fugir dos fogos.
A regra é clara Casa Grande, foi atingido é teleportado para o templo com a mensagem "You loss" VOCÊ PERDEU BABY!
O Último sobrevivente da arena é recompensado com X item automáticamente (configurável).
Sem mimimi vamos ao que interessa:
Na pasta incial do seu servidor há uma pasta com o nome de MODS, então crie um arquivo com o nome de w-fire.xml dentro dela com o conteúdo abaixo:
<?xml version="1.0" encoding="UTF-8"?> <mod name="Fire_Storm_Event" version="0.1" author="Absolute Version" contact="lu.lukinha" enabled="yes"> <config name="config_fire_storm_event"> <![CDATA[ configFireStormEvent = { storages = { main = 'fireStormEventMain', -- set free storage player = 'fireStormEventPlayer', -- set free storage joining = 'fireStormEventJoining', -- set free storage exhaust = 'fireStormEventExhaust', -- set free storage countEvent = 'fireStormEventCountEvent' -- set free storage }, position = {x=890 ,y=993,z=7}, -- posiotion to which player is teleporting room = { from = {x=736,y=933,z=7}, -- left top corner of event room to = {x=781,y=955,z=7} -- right bottom corner of event room }, rewards = {8858, 2346, 2538, 2437}, -- reward id which player can win (reward is random) players = { max = 80, min = 2, minLevel = 100 }, days = { ['Tuesday'] = {'19:59:20'}, ['Thursday'] = {'19:59:20'}, ['Sunday'] = {'19:59:20'} }, fireStormDelay = 1000, -- milisecond delayTime = 5.0, -- time in which players who joined to event are teleporting to teleport position startEvent = 5 -- time from teleport to start event text = '-PL-\nAby wygrac i otrzymac nagrode, utrzymaj sie jak najdluzej na arenie.\n\n-ENG-\nTo win and get a Rewards, to stay as long as possible in the arena.' } y, x = 1, 1 -- don't change it ]]> </config> <lib name="lib_fire_storm_event"> <![CDATA[ function doStartFireStormEvent() doSetStorage(configFireStormEvent.storages.joining, -1) if configFireStormEvent.players.min <= doCountPlayersFireStormEvent() then for _, cid in ipairs(getPlayersOnline()) do if getCreatureStorage(cid, configFireStormEvent.storages.player) > 0 then doCreatureSetNoMove(cid, false) doRemoveCondition(cid, CONDITION_INFIGHT) doTeleportThing(cid, configFireStormEvent.position) doCreatureSetStorage(cid, configFireStormEvent.storages.player, -1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Get ready. Fire Storm Event start in '..configFireStormEvent.startEvent..' seconds.') end end addEvent(doSetStorage, configFireStormEvent.startEvent * 1000, configFireStormEvent.storages.main, 1) addEvent(doRepeatCheckFireStorm, configFireStormEvent.startEvent * 1000 + 2000) doBroadcastMessage('Fire Storm Event has started. LET\'S GO!') else for _, cid in ipairs(getPlayersOnline()) do if getCreatureStorage(cid, configFireStormEvent.storages.player) > 0 then doCreatureSetNoMove(cid, false) doRemoveCondition(cid, CONDITION_INFIGHT) end end doBroadcastMessage('Fire Storm hasn\'t started beacuse there were not enough players.') end end function doRepeatCheckFireStorm() if getStorage(configFireStormEvent.storages.main) > 0 then local xTable, yTable, playerTable = {}, {}, {} for x = configFireStormEvent.room.from.x, configFireStormEvent.room.to.x do for y = configFireStormEvent.room.from.y, configFireStormEvent.room.to.y do table.insert(xTable, x) table.insert(yTable, y) local n, i = getTileInfo({x=x, y=y, z=configFireStormEvent.room.to.z}).creatures, 1 if n ~= 0 then local v = getThingfromPos({x=x, y=y, z=configFireStormEvent.room.to.z, stackpos=i}).uid while v ~= 0 do if isPlayer(v) then table.insert(playerTable, v) if n == #playerTable then break end end i = i + 1 v = getThingfromPos({x=x, y=y, z=configFireStormEvent.room.to.z, stackpos=i}).uid end end end end if #playerTable == 1 then local prize = math.random(#configFireStormEvent.rewards) doCreatureAddHealth(playerTable[1], getCreatureMaxHealth(playerTable[1]) - getCreatureHealth(playerTable[1])) doCreatureAddMana(playerTable[1], getCreatureMaxMana(playerTable[1]) - getCreatureMana(playerTable[1])) doTeleportThing(playerTable[1], getTownTemplePosition(getPlayerTown(playerTable[1])), true) doPlayerAddItem(playerTable[1], configFireStormEvent.rewards[prize], 1) doPlayerSendTextMessage(playerTable[1], MESSAGE_EVENT_ADVANCE, 'You win! You have received ' .. getItemNameById(configFireStormEvent.rewards[prize]) .. ' as reward.') doBroadcastMessage('Fire Storm Event has finished. The winner is ' .. getCreatureName(playerTable[1]) .. '. Congratulations.') doSetStorage(configFireStormEvent.storages.main, -1) db.query("INSERT INTO `events` (`event_name`, `winner_name`, `won_item`, `time_win`) VALUES (\"Fire\", \"" .. getCreatureName(playerTable[1]) .. "\", \"" .. getItemNameById(configFireStormEvent.rewards[prize]) .. "\", " .. getStorage(configFireStormEvent.storages.countEvent) ..");") doSetStorage(configFireStormEvent.storages.countEvent, getStorage(configFireStormEvent.storages.countEvent) + 1) x, y = 1, 1 elseif #playerTable > 1 then for a = 1, y do addEvent( function() local pos = {x=xTable[math.random(#xTable)], y=yTable[math.random(#yTable)], z=7} for _, player in ipairs(playerTable) do local pPos = getThingPos(player) if pPos.x == pos.x and pPos.y == pos.y and pPos.z == pos.z then doCreatureAddHealth(player, - getCreatureMaxHealth(player)) end end doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE) addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA) end, math.random(100,1000) ) end if x == 5 * y then y = y + 1 end x = x + 1 else doBroadcastMessage('No one have won in Fire Storm Event.') doSetStorage(configFireStormEvent.storages.main, -1) doSetStorage(configFireStormEvent.storages.countEvent, getStorage(configFireStormEvent.storages.countEvent) + 1) x, y = 1, 1 end addEvent(doRepeatCheckFireStorm, configFireStormEvent.fireStormDelay) end end function doCountPlayersFireStormEvent() local x = 0 for _, cid in ipairs(getPlayersOnline()) do if getCreatureStorage(cid, configFireStormEvent.storages.player) > 0 then x = x + 1 end end return x end function doStartCountingFireStormEvent(x) if configFireStormEvent.delayTime-x > 0 then doBroadcastMessage('Fire Storm Event will start in '..configFireStormEvent.delayTime-x..' minutes. You can join to the event by say "!fire join".') addEvent(doStartCountingFireStormEvent, 60*1000, x+1) end end ]]> </lib> <talkaction words="!fire" event="script"> <![CDATA[ domodlib("config_fire_storm_event") function onSay(cid, words, param) if getStorage(configFireStormEvent.storages.joining) ~= 1 then return doPlayerSendCancel(cid, 'Fire Storm Event hasn\'t started yet.') elseif param == '' then return doPlayerSendCancel(cid, 'Command param required (say: "!fire join" or "!fire leave.").') elseif getPlayerLevel(cid) < configFireStormEvent.players.minLevel then return doPlayerSendCancel(cid, 'You can\'t join to the event if you don\'t have a require '..configFireStormEvent.players.minLevel..' level.') elseif getTileInfo(getThingPos(cid)).protection ~= true then return doPlayerSendCancel(cid, 'You can\'t join to the event if you aren\'t in protection zone.') elseif exhaustion.check(cid, configFireStormEvent.storages.exhaust) ~= false then return doPlayerSendCancel(cid, 'You must wait '..exhaustion.get(cid, configFireStormEvent.storages.exhaust)..' seconds to use this command again.') end if param == 'join' then if getCreatureStorage(cid, configFireStormEvent.storages.player) > 0 then return doPlayerSendCancel(cid, 'You have arleady joined to event. Wait patiently for start.') elseif doCountPlayersFireStormEvent() == configFireStormEvent.players.max then return doPlayerSendCancel(cid, 'Max players in the event have been reached.') end doCreatureSetNoMove(cid, true) doPlayerPopupFYI(cid, configFireStormEvent.text) doCreatureSetStorage(cid, configFireStormEvent.storages.player, 1) doAddCondition(cid, createConditionObject(CONDITION_INFIGHT, -1)) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'You have joined to Fire Storm Event. You can\'t move until event don\'t start. Wait patiently for the event start.') doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You have joined to Fire Storm Event.') elseif param == 'leave' then if getCreatureStorage(cid, configFireStormEvent.storages.player) <= 0 then return doPlayerSendCancel(cid, 'You can\'t leave from the event if you don\'t join.') end doCreatureSetNoMove(cid, false) doRemoveCondition(cid, CONDITION_INFIGHT) doCreatureSetStorage(cid, configFireStormEvent.storages.player, -1) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You have left from the Fire Storm Event.') end exhaustion.set(cid, configFireStormEvent.storages.exhaust, 5) return true end ]]> </talkaction> <talkaction words="!startfire" access="4" event="script"> <![CDATA[ domodlib("config_fire_storm_event") domodlib("lib_fire_storm_event") function onSay(cid, words, param) if getStorage(configFireStormEvent.storages.main) > 0 then return doPlayerSendCancel(cid, 'Fire Storm Event is already running.') end doStartCountingFireStormEvent(0) for _, pid in ipairs(getPlayersOnline()) do if getCreatureStorage(pid, configFireStormEvent.storages.player) > 0 then doCreatureSetStorage(pid, configFireStormEvent.storages.player, -1) doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true) end end doSetStorage(configFireStormEvent.storages.joining, 1) addEvent(doStartFireStormEvent, configFireStormEvent.delayTime * 60 * 1000) return true end ]]> </talkaction> <globalevent name="Fire_Storm_Event_Days" interval="1000" event="script"> <![CDATA[ domodlib("config_fire_storm_event") domodlib("lib_fire_storm_event") local daysOpen = {} for k, v in pairs(configFireStormEvent.days) do table.insert(daysOpen, k) end function onThink(interval) if isInArray(daysOpen, os.date('%A')) then if isInArray(configFireStormEvent.days[os.date('%A')], os.date('%X', os.time())) then if getStorage(configFireStormEvent.storages.joining) ~= 1 then doStartCountingFireStormEvent(0) for _, pid in ipairs(getPlayersOnline()) do if getCreatureStorage(pid, configFireStormEvent.storages.player) > 0 then doCreatureSetStorage(pid, configFireStormEvent.storages.player, -1) doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true) end end doSetStorage(configFireStormEvent.storages.joining, 1) addEvent(doStartFireStormEvent, configFireStormEvent.delayTime * 60 * 1000) end end end return true end ]]> </globalevent> <event type="statschange" name="Fire_Storm_Event_Dead" event="script"> <![CDATA[ domodlib("config_fire_storm_event") function onStatsChange(cid, attacker, type, combat, value) if type == 1 and getCreatureHealth(cid) <= value then if isInRange(getThingPos(cid), configFireStormEvent.room.from, configFireStormEvent.room.to) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid)) doCreatureAddMana(cid, getCreatureMaxMana(cid) - getCreatureMana(cid)) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You loss.') return false end end return true end ]]> </event> <event type="login" name="Fire_Storm_Event_Login" event="script"> <![CDATA[ domodlib("config_fire_storm_event") function onLogin(cid) if getCreatureStorage(cid, configFireStormEvent.storages.player) > 0 then doCreatureSetStorage(cid, configFireStormEvent.storages.player, -1) doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), true) doCreatureSetNoMove(cid, false) doRemoveCondition(cid, CONDITION_INFIGHT) end registerCreatureEvent(cid, 'Fire_Storm_Event_Dead') return true end ]]> </event> <globalevent name="Fire_Storm_Event_Start" type="startup" event="script"> <![CDATA[ domodlib("config_fire_storm_event") function onStartup() doSetStorage(configFireStormEvent.storages.main, -1) doSetStorage(configFireStormEvent.storages.joining, -1) return true end ]]> </globalevent> </mod> Como configurar:
position = {x=890 ,y=993,z=7}, -- posiotion to which player is teleporting - Aqui você deve colocar o centro da posição do mapa que o linduxo do meu querido amigo e parceiro vosso disponibiliza AQUI
from = {x=736,y=933,z=7}, -- left top corner of event room - Aqui você deve colocar a posição superior esquerda da área do evento, como exemplo na imagem:
to = {x=781,y=955,z=7} -- right bottom corner of event room - Aqui você deve colocar a posição inferior direita da área do evento, como exemplo na imagem:
Configurar prêmio:
rewards = {8858, 2346, 2538, 2437}, -- reward id which player can win (reward is random) - onde está os números de exemplo 8858, 2346, 2538, 2437 são os IDS dos items que você colocará como premiação, o player ganhará apenas UM item que pode ser um dos 4 (sorteio).
Caso você queira colocar apenas 1 item específico altere para:
rewards = {8858}, -- reward id which player can win (reward is random)
Permissão para abrir o evento:
<talkaction words="!startfire" access="4" event="script"> - em acess="4" você poderá alterar o membro da staff que poderá abrir, o número 4 indica que CM e ADMS poderão abrir, caso troque para 3, GM'S, CM'S E ADM'S poderão executar o comando !startfire para abrir o evento quando quiser.
Configuração automática:
days = {
['Tuesday'] = {'19:59:20'},
['Thursday'] = {'19:59:20'},
['Sunday'] = {'19:59:20'}
Simples, os dias são colocados em inglês, então basta ajustar, por exemplo, você quer que o evento ocorra na segunda-feira ás 19:00, segue um exemplo:
['Monday'] = {'19:00:00'},
Lembrando que o dia e horário deve corresponder com o horário atual da máquina onde roda o servidor.
É isso meus queridos, na próxima versão do evento colocarei para entrar no mesmo por teleport.
Não esqueçam de baixar e usar o mapa que recomendo do Victor aqui. É ideal para o evento =)
Qualquer dúvida não deixe de me perguntar.
Créditos:
CollocorpuseK base do evento
Absolute (adaptação, funções e abertura por comando)
VitiinG (mapa)
Nós vemos na próxima versão!
Enjoy.
-
elinardo12 deu reputação a Absolute em [Pagseguro Automático] 100% e com Double Points OPCIONALFala linduxos do TK, hoje vim trazer para vocês um sistema que venho modificando a algum tempo.
O Sistema de pagseguro automático, ao longo do script ensinarei perfeitamente como instalar/configurar.
Lembrando que uso esse sistema em um servidor meu e está 100% entregando os pontos no mesmo instante, adicionei a opção de entregar pontos dobrados, para promoção double points acima de X valor.
Vá em sua pasta www ou htocs/config abra o arquivo config.php e procure por: $config['site']['layout'] = ... embaixo disto adicione o seguinte:
// Pagseguro Automático by Absolute on Luminera // Seu email cadastrado no PagSeguro $config['pagseguro']['email'] = 'SEU E-MAIL DO PAGSEGURO'; // Nome do produto $config['pagseguro']['produtoNome'] = 'Premium Points'; // Valor de cada ponto // Exemplo de valores: // 100 = R$ 1,00 // 250 = R$ 2,50 $config['pagseguro']['produtoValor'] = '100'; Simples explicação sobre este passo: em SEU E-MAIL DO PAGSEGURO basta colocar o seu e-mail do pagseguro, ficando como exemplo:
$config['pagseguro']['email'] = '[email protected]'; (não mexa em mais nada)
Próximo passo:
Agora vá na sua pasta www ou htocs e crie um arquivo chamado pagseguro_retorno.php (Extensão PHP formato de página PHP), dentro do pagseguro_retorno.php adicione:
<?PHP $host = "localhost"; /* HOST */ $user = "root"; /* USER */ $passwd = "SENHADOPHPMYADMIN"; /* PASSWORD */ $db = "NOMEDADATABASE"; /* DB */ ############################################################## # CONFIGURAÇÕES ############################################################## $retorno_token = 'SEUTOKENPAGSEGURO'; // Token gerado pelo PagSeguro if (empty($_POST['Referencia'])) { header("Location http://pagseguro.com.br"); } list($accname, $world) = explode('-', $_POST['Referencia']); if ($world=='sv') { $retorno_host = "$host"; // Local da base de dados MySql $retorno_database = "$db"; // Nome da base de dados MySql $retorno_usuario = "$user"; // Usuario com acesso a base de dados MySql $retorno_senha = "$passwd"; // Senha de acesso a base de dados MySql } ############################################################### # ATENÇÃO TIBIAKING NÃO ALTERE DESTA LINHA PARA BAIXO OK? Absolute Agradeçe hihi # $lnk = mysql_connect("$host", "$user", "$passwd") or die ('Nao foi possível conectar ao MySql: ' . mysql_error()); mysql_select_db("$db", $lnk) or die ('Nao foi possível ao banco de dados selecionado no MySql: ' . mysql_error()); // Validando dados no PagSeguro $PagSeguro = 'Comando=validar'; $PagSeguro .= '&Token=' . $retorno_token; $Cabecalho = "Retorno PagSeguro"; foreach ($_POST as $key => $value) { $value = urlencode(stripslashes($value)); $PagSeguro .= "&$key=$value"; } if (function_exists('curl_exec')) { $curl = true; } elseif ( (PHP_VERSION >= 4.3) && ($fp = @fsockopen ('ssl://pagseguro.uol.com.br', 443, $errno, $errstr, 30)) ) { $fsocket = true; } elseif ($fp = @fsockopen('pagseguro.uol.com.br', 80, $errno, $errstr, 30)) { $fsocket = true; } if ($curl == true) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $PagSeguro); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_URL, 'https://pagseguro.uol.com.br/Security/NPI/Default.aspx'); $resp = curl_exec($ch); curl_close($ch); $confirma = (strcmp ($resp, "VERIFICADO") == 0); } elseif ($fsocket == true) { $Cabecalho = "POST /Security/NPI/Default.aspx HTTP/1.0\r\n"; $Cabecalho .= "Content-Type: application/x-www-form-urlencoded\r\n"; $Cabecalho .= "Content-Length: " . strlen($PagSeguro) . "\r\n\r\n"; if ($fp || $errno>0) { fputs ($fp, $Cabecalho . $PagSeguro); $confirma = false; $resp = ''; while (!feof($fp)) { $res = @fgets ($fp, 1024); $resp .= $res; if (strcmp ($res, "VERIFICADO") == 0) { $confirma=true; break; } } fclose ($fp); } else { echo "$errstr ($errno)<br />\n"; } } if ($confirma) { ## Recebendo Dados ## $TransacaoID = $_POST['TransacaoID']; $VendedorEmail = $_POST['VendedorEmail']; $Referencia = $_POST['Referencia']; $TipoFrete = $_POST['TipoFrete']; $ValorFrete = $_POST['ValorFrete']; $Extras = $_POST['Extras']; $Anotacao = $_POST['Anotacao']; $TipoPagamento = $_POST['TipoPagamento']; $StatusTransacao = $_POST['StatusTransacao']; $CliNome = $_POST['CliNome']; $CliEmail = $_POST['CliEmail']; $CliEndereco = $_POST['CliEndereco']; $CliNumero = $_POST['CliNumero']; $CliComplemento = $_POST['CliComplemento']; $CliBairro = $_POST['CliBairro']; $CliCidade = $_POST['CliCidade']; $CliEstado = $_POST['CliEstado']; $CliCEP = $_POST['CliCEP']; $CliTelefone = $_POST['CliTelefone']; $NumItens = $_POST['ProdValor_1']; $ProdQuantidade_x = $POST['ProdQuantidade_1']; # GRAVA OS DADOS NO BANCO DE DADOS # mysql_query("INSERT into pagsegurotransacoes SET TransacaoID='$TransacaoID', VendedorEmail='$VendedorEmail', Referencia='$Referencia', TipoFrete='$TipoFrete', ValorFrete='$ValorFrete', Extras='$Extras', Anotacao='$accname', TipoPagamento='$TipoPagamento', StatusTransacao='$StatusTransacao', CliNome='$CliNome', CliEmail='$CliEmail', CliEndereco='$CliEndereco', CliNumero='$CliNumero', CliComplemento='$CliComplemento', CliBairro='$CliBairro', CliCidade='$CliCidade', CliEstado='$CliEstado', CliCEP='$CliCEP', CliTelefone='$CliTelefone', NumItens='$NumItens', Data=now(), ProdQuantidade_x='$ProdQuantidade_x';"); if ($NumItens >= 5) { $pontosadd = $NumItens * 2; } else { $pontosadd = $NumItens; } if ($StatusTransacao == "Aprovado") { mysql_query("UPDATE accounts SET premium_points = premium_points + '$pontosadd' WHERE name = '".htmlspecialchars($accname)."'"); mysql_query("UPDATE pagsegurotransacoes SET StatusTransacao = 'Entregue' WHERE CONVERT( `pagsegurotransacoes`.`TransacaoID` USING utf8 ) = '$TransacaoID' AND CONVERT( `PagSeguroTransacoes`.`StatusTransacao` USING utf8 ) = 'Aprovado' LIMIT 1 ;"); mysql_query('OPTIMIZE TABLE `pagsegurotransacoes`'); } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Donate Server</title> <style type="text/css"> body { font-family: Tahoma, Geneva, sans-serif; font-size: 16px; width: 900px; margin: 0px auto; margin-top: 30px; } b { font-size: 18px; font-weight: bold; } </style> </head> <body> <table width="100%" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td width="11%" align="center" valign="middle"><img src="images/true.png" height="auto" width="64" /></td> <td width="89%"><p><b>S</b>ua compra está sendo processada por nossos sistemas de apuração, dentro de no máximo <u>1 hora seus pontos serão creditados</u>, caso o pagamento não for efetuado, ficará em aberto 1 ou mais pagamentos pendentes em sua conta. Caso você tenha mais de 3 pagamentos pendentes por falta de pagamento, sua conta será bloqueada temporariamente para efetuar pagamentos.</p></td> </tr> </table> <p><b>ID de Transação:</b> <?php echo $_POST['TransacaoID']; ?></p> </body> </html> Explicação de configuração deste passo:
Coloque a senha que você usa para entrar no phpmyadmin aqui: $passwd = "SENHADOPHPMYADMIN"; /* PASSWORD */
Exemplo de como ficaria: $passwd = "absolute123"; /* PASSWORD */
Coloque aqui o nome que está seu banco de dados (o mesmo que vai no config.lua, onde salva os characters, contas e cia):
$db = "NOMEDADATABASE"; /* DB */ ;
Exemplo de como ficaria:
$db = "otserver"; /* DB */
IMPORTANTE, TOKEN Pagseguro!
Você irá entrar neste link, aparecerá uma página pedindo para colocar a url de retorno, no entanto você colocará o seu site terminado em /pagseguro_retorno.php, exemplo de link para colocar: http://otglobal.com/pagseguro_retorno.php (LEMBRANDO QUE É APENAS UM EXEMPLO, SERÁ SEUSITE.COM/pagseguro_retorno.php, como na imagem a seguir:
Pós verificar a seleção do "Ativar" e o link correto clique em Salvar.
Agora descendo um pouco esta página onde terá a opção a cima terá uma opção como a imagem a seguir:
Clique em GERAR, você receberá o seu código token e coloque no script que estará na sua pasta www ou htocs, mude na linha:
$retorno_token = 'SEUTOKENPAGSEGURO'; // Token gerado pelo PagSeguro
EM SEUTOKENPAGSEGURO coloque o TOKEN que você acabou de pegar, será vários números e letras, exemplo de como ficaria:
$retorno_token = 'AE89464AE8145487484PAEA978E91'; // Token gerado pelo PagSeguro
DOUBLE POINTS EXPLICAÇÃO:
Neste mesmo script há algumas linhas com a seuginte função:
if ($NumItens >= 5) {
$pontosadd = $NumItens * 2;
Isto quer dizer, > 5 (A cima de 5 pontos, receba: NumItens * 2, receba em 2x PONTOS EM DOBRO!)
Para alterar o valor a cima que a pessoa receberá em dobro: NumItens >= 5) 5 pontos ou mais a pessoa receberá em dobro, caso seja para qualquer valor, troque o 5 pelo 1.
Caso não deseje DOUBLE POINTS e sim 50% do valor em pontos, exemplo: 10R$ = 15 Pontos, altere para:
$pontosadd = $NumItens * 1.5;
Caso não deseje promoção e queira que seja 1 Real = 1 Ponto:
$pontosadd = $NumItens * 1;
Próximo passo:
Calma gente, está quase acabando eu prometo, então abra o seu PHPMYADMIN, localhost/phpmyadmin ou seusite.com/phpmyadmin, exemplo: www.absolutewar.com/phpmyadmin ; absoluteot.servegame.com/phpmyadmin, clique na opção SQL do phpmyadmin (como mostrarei na imagem e de executar.
Código a inserir no "espaço":
CREATE TABLE `pagsegurotransacoes` ( `TransacaoID` varchar(36) NOT NULL, `VendedorEmail` varchar(200) NOT NULL, `Referencia` varchar(200) default NULL, `TipoFrete` char(2) default NULL, `ValorFrete` decimal(10,2) default NULL, `Extras` decimal(10,2) default NULL, `Anotacao` text, `TipoPagamento` varchar(50) NOT NULL, `StatusTransacao` varchar(50) NOT NULL, `CliNome` varchar(200) NOT NULL, `CliEmail` varchar(200) NOT NULL, `CliEndereco` varchar(200) NOT NULL, `CliNumero` varchar(10) default NULL, `CliComplemento` varchar(100) default NULL, `CliBairro` varchar(100) NOT NULL, `CliCidade` varchar(100) NOT NULL, `CliEstado` char(2) NOT NULL, `CliCEP` varchar(9) NOT NULL, `CliTelefone` varchar(14) default NULL, `NumItens` int(11) NOT NULL, `Data` datetime NOT NULL, `status` tinyint(1) unsigned NOT NULL default '0', UNIQUE KEY `TransacaoID` (`TransacaoID`,`StatusTransacao`), KEY `Referencia` (`Referencia`), KEY `status` (`status`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; Pós executar irá aparecer uma mensagem que o código foi aceito e uma tabela nova foi criada, como na imagem a seguir:
Agora por fim o ÚLTIMO PASSO
Novamente na pasta www ou htdocs substitua o seu arquivo donate.php por este:
<?php if(!$logged) if($action == "logout") $main_content .= '<div class="TableContainer" > <table class="Table1" cellpadding="0" cellspacing="0" > <div class="CaptionContainer" > <div class="CaptionInnerContainer" > <span class="CaptionEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionBorderTop" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <div class="Text" >Logout Successful</div> <span class="CaptionVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <span class="CaptionBorderBottom" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> </div> </div> <tr> <td> <div class="InnerTableContainer" > <table style="width:100%;" ><tr><td>You have logged out of your '.$config['server']['serverName'].' account. In order to view your account you need to <a href="?subtopic=accountmanagement" >log in</a> again.</td></tr> </table> </div> </table></div></td></tr>'; else $main_content .= 'Please enter your account name and your password.<br/><a href="?subtopic=createaccount" >Create an account</a> if you do not have one yet.<br/><br/><form action="?subtopic=accountmanagement" method="post" ><div class="TableContainer" > <table class="Table1" cellpadding="0" cellspacing="0" > <div class="CaptionContainer" > <div class="CaptionInnerContainer" > <span class="CaptionEdgeLeftTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightTop" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionBorderTop" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionVerticalLeft" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <div class="Text" >Account Login</div> <span class="CaptionVerticalRight" style="background-image:url('.$layout_name.'/images/content/box-frame-vertical.gif);" /></span> <span class="CaptionBorderBottom" style="background-image:url('.$layout_name.'/images/content/table-headline-border.gif);" ></span> <span class="CaptionEdgeLeftBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> <span class="CaptionEdgeRightBottom" style="background-image:url('.$layout_name.'/images/content/box-frame-edge.gif);" /></span> </div> </div> <tr> <td> <div class="InnerTableContainer" > <table style="width:100%;" ><tr><td class="LabelV" ><span >Account Name:</span></td><td style="width:100%;" ><input type="password" name="account_login" SIZE="10" maxlength="10" ></td></tr><tr><td class="LabelV" ><span >Password:</span></td><td><input type="password" name="password_login" size="30" maxlength="29" ></td></tr> </table> </div> </table></div></td></tr><br/><table width="100%" ><tr align="center" ><td><table border="0" cellspacing="0" cellpadding="0" ><tr><td style="border:0px;" ><div class="BigButton" style="background-image:url('.$layout_name.'/images/buttons/sbutton.gif)" ><div onmouseover="MouseOverBigButton(this);" onmouseout="MouseOutBigButton(this);" ><div class="BigButtonOver" style="background-image:url('.$layout_name.'/images/buttons/sbutton_over.gif);" ></div><input class="ButtonText" type="image" name="Submit" alt="Submit" src="'.$layout_name.'/images/buttons/_sbutton_submit.gif" ></div></div></td><tr></form></table></td><td><table border="0" cellspacing="0" cellpadding="0" ><form action="?subtopic=lostaccount" method="post" ><tr><td style="border:0px;" ><div class="BigButton" style="background-image:url('.$layout_name.'/images/buttons/sbutton.gif)" ><div onmouseover="MouseOverBigButton(this);" onmouseout="MouseOutBigButton(this);" ><div class="BigButtonOver" style="background-image:url('.$layout_name.'/images/buttons/sbutton_over.gif);" ></div><input class="ButtonText" type="image" name="Account lost?" alt="Account lost?" src="'.$layout_name.'/images/buttons/_sbutton_accountlost.gif" ></div></div></td></tr></form></table></td></tr></table>'; else { $main_content .= '<br><br><b>Valores:</b><br> 1 Point = R$ 1,00<br> 10 Points = R$ 10,00<br> 20 Points = R$ 20,00<br> E assim por diante...<br><br> '; $main_content .= ' <form target="pagseguro" method="post" action="https://pagseguro.uol.com.br/checkout/checkout.jhtml"> <input type="hidden" name="email_cobranca" value="'. $config['pagseguro']['email']. '"> <input type="hidden" name="tipo" value="CP"> <input type="hidden" name="moeda" value="BRL"> <input type="hidden" name="item_id_1" value="1"> <input type="hidden" name="item_descr_1" value="Pontos na account de nome: '.$account_logged->getCustomField("name").'"> <input type="hidden" name="item_valor_1" value="'. $config['pagseguro']['produtoValor'] .'"> <input type="hidden" name="item_frete_1" value="0"> <input type="hidden" name="item_peso_1" value="0"> <input type="hidden" name="ref_transacao" value="'.$account_logged->getCustomField("name").'"> <table border="0" cellpadding="4" cellspacing="1" width="100%" id="#estilo"><tbody> <tr bgcolor="#505050" class="white"> <th colspan="2"><strong>Escolha a quantidade de pontos que deseja comprar</strong></th> </tr> <tr> <td width="10%">Sua conta</td> <td><strong>'.$account_logged->getCustomField("name").'</strong></td> </tr> <tr> <td width="10%">Pontos</td> <td> <input name="item_quant_1" type="text" value="10" size="5" maxlength="5"> </td> </tr> <tr> <td colspan="2"> <input type="image" src="https://p.simg.uol.com.br/out/pagseguro/i/botoes/carrinhoproprio/btnFinalizar.jpg" name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!" /> </td> </tr> </tbody></table></form> <b><span style="color:#ff0000;">OBS¹:</span></b> Os pontos são entregues <b>automáticamente</b> logo após a <u>aprovação</u> do seu pagamento pelo PagSeguro, ou seja, pagou e foi aprovado pontos depositados. Você pdoerá acessar o shop offer e desfrutar dos melhores items do servidor! <?php } ?>'; } ?> Pronto galera tão fácil né? agora vocês poderão pegar seu guarda sol, sua água de coco e sentar na sua cadeira de praia enquanto o script entregará os pontos automáticamente em menos de 1 minuto.
Espero ter ajudado, quaisquer dúvidas podem solicitar no tópico ou até mesmo me mandar uma mensagem privado que estarei disposto a ajuda-los.
Créditos:
Absolute (EU)
Matheus Sesso pela página donate.php
Nos vemos na próxima!
Enjoy.
-
elinardo12 deu reputação a alissonfgp em [LINK OFF]Global Map 9.83Poucas e tem diferenças qnd se adiciona tempo da 0.2, qnd seta storage d tempo
-
elinardo12 deu reputação a alissonfgp em [LINK OFF]Global Map 9.83Global Server não é 100% full pq praticamente nao existe é raro achar sao poucos os que tem.
Credits:
Denner altero até a versao 8.6 o resto eu que alterei...
O distro esta junto e as Sources eu nao vou poder postar por enquanto. =/
Pedido nao copiem e postem em outro forum, pq eu ja vo fazer isso .
Link: http://www.4shared.com/rar/sJ-VeQJQ/Global_98.html
Scan: https://www.virustotal.com/pt-br/url/941b32a96c00eeaa445df6c31d1becfb5435da0a6fd506698a2980683b75aa3f/analysis/1369167122/
Sources + DB: http://www.4shared.com/rar/Z5mZuL5C/03r_983.html
TFS Roda em win 32 bits e 64 bits, Usando LaaTiDoo com windows 64bits ele abre mapa de até 115 mb que pelo- eu pude testar, agr se abre com mais eu nao sei.
Bom galera aqui nao deu para min remover esse bug pq ja tinha feito upload e minha net ja é meio lenta entao refazer iria demorar + ainda é só deleta um pizo na area vermelha tem uma borda trapando passagen dos player nesse canto.
Disse que iria postar sources e RME mas nao vou postar mais, depois que praticamente copiaram meu topico nao vou postar mais nada no forum, esse é meu ultimo post...
ADICIONADO AS SOURCES....
Qualquer bug me avisa que arrumo.
UPDATE FEITO ADICIONADOS ALGUMAS NOVAS AREAS 9.8X+ E REMOVIDOS OS BUGS ENCONTRADOS....