Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 10/21/11 em todas áreas

  1. Olá, vou ensinar a vocês a fazer quests no RME estilo annihilation. Sistema: TFS Primeiro: Coloque 2 ou mais baus aonde será o lugar da recompensa da quest. Segundo: Vá nas propiedades do bau e coloque o seguinte: ActionID: 2000 UniqueID: 10001 ( Aqui é a storage da quest. ) No espaço preto dê dois clics e escolha o item. Vamos a logica agora, se 10001 é a storage, você pode colcoar a mesma uniqueID nos outros baus, sendo assim quando o player escolher por exemplo a demon armor, ele não vai poder pegar outra por que a storage já está no character.
    4 pontos
  2. Neto009

    [Release] Dbko Arena!

    Bem CoMo prometido venho aki postas o servidor de dbko. Primeiramente: A database Fica no Servidor So use ela nao precisa da do site so ela ja basta!! O Que tem Nele ?? -Systema de Enchant Exclusivo dkbo 8.0. -Todas as Armas Com Seus Respectivos Attackes. -Armaduras Healando normal igual dbko. -Mapa Full Dbko Sem Nenhuma Alteraçao. -Item De Desbugar Lvl. -Todas as Vocaçoes com transform Level 400 e seus respectivos poderes, E tem Todas as Vocations de kuririn a Pan. -comandos para transformar, todos a palavra Transform ate level 400. -Vocaçoes Balanceadas poder e hit. -Skill Subindo de acordo Dbko. -Vida e Mana Igual Dbko. -Client Proprio Com algumas Alteraçoes, pode ser que alguma sprit esteja trocada por isso o cliente vai ir aberto. -Reborn Quest Totalmente Igual Dbko Original, ate no bug das caixas na buu Saga. -Monstros Com Nomes e Attack Certos. -Site Com Imagem dos poderes para os player pesquizarem, com um layer diferenciado. Comandos: bol bug bc !xpremium nick, days OBS: O Distro Do servidor pode acusar algum virus rlx e inofencivo:] SS: Download: Server: [download]http://www.4shared.com/file/Fzt64zos/DBKO_By_Smallvile.html[/download] Scan: http://www.virustotal.com/file-scan/report.html?id=b803eb68f1d1c7868121f108d3bb6444e4aef43c67e66f87e6bf1dba626412c4-1317136853 Cliente: [download]http://www.4shared.com/file/QZhnFcZB/Cliente_By_Smallvile.html[/download] Site: [download]http://www.4shared.com/file/LfZxiUfw/htdocssdbkoarena.html[/download] Scan: http://www.virustotal.com/file-scan/report.html?id=e321afa271ee8c57647fa3bd27aa56efbb6f9bae7ed155f7e916ceb01ae1de4f-1317137307 Fiz Somente o Scan Do Servidor e do site, Pois Meu Pc Esta Lerdo Depois Farei do Cliente!!!! Creditos: Neto009 (Configuraçoes E Desbugar Algumas coisas). Nao Poste Sem Minha Autorizaçao!!!
    2 pontos
  3. Fala galera estou aqui para apresentar o novo Baiak Speed Versao 1, eu e meu primo estamos trabalhando a muito tempo neste servidor e muitas novidades surgirão, este servidor é baseado no mapa Baiak Darlan.Então, tá esperando o que? º6 Cidades -Baiak Speed -Vip City -Hydraland -Baiak City -Desert City -GOD City ºCONTA DO GOD ^ACCOUNT: god ^SENHA: god PARA MUDAR A SENHA DO GOD USE :sql: Ok, vamos logo para as atualizações! do Baiak Speed V.1 Baiak Speed - Modificações no Templo principal com nova city e eventos -Modificações no mapa, bugs foram removidos! -Novos npc na nova city -Dois novos npc de addon que nao tinha no mapa adicionado na nova city [GOD]CITY. -Muitas Novas hunt adicionadas -Tambem muitas novas quests -Novos set e armas -Novos comando adicionados nao tinha como\/ !buyvip !notice !spells !changesex !second entre outros -Novo npc de bless,de comprar itens editados,e dos addon warmaster 1 e 2 -4 novas Magias de attack adicionadas -2 magias de healar adiciondas (uma de healar mana e outra de vida e so falar !spells para druid e sorc) -Duas novas runas para kina e pala de healar mana e vida -TEMPLO PRINCIPAL COM NOVO VISUAL NUNCA VI EM OT ALGUM (VERDE COM GELO E FOGO EU ACHO QUE FICO MUITO MASSA SE N GOSTAR SO DO TEMPLO PODE MUDAR PARA SEU OTSERV -Terminando uma quest da nova city abra o bau e ganhe [VIP] no nome -Entre no tp PROMOTION e compre vip promotion com o npc,a seguir pegue 5kk lvl 1k e fale !second ...vc vai vira EPIC promotion -Entre várias outras mudanças! • Algumas Imagens: TEMPLO PRINCIPAL NOVA CITY Hunts e Quest Quests :forward: Dowload Do Baiak Speed 8.60 4shared :forward: Scan do Baiak Speed 8.60 OUTRO SCAN \/ de imagem • Créditos: Achou bugs? Reportem para melhoras DUVIDAS ADICIONA MEU MSN AI :greenperson: admspeed1@hotmail.com GOSTOU? DA UM REP AI :button_ok: NAO GOSTOU? CRITIQUE PARA MELHORAS OBRIGADO DE SEU VOTO e como prometido aki esta a versao do baiak speed versao 2 Baiak Speed versao 2
    2 pontos
  4. . baiak Vip Revolution Yurots 8.60 0.1.3 .. Quem Não Gosta do Bom e Editado Baiak Yurots.. Bom Ai Está Mapa Yurots Super Rox Editado Por baiak vip... Mapa Yurots Super Rox Editado Por baiak Vip... Baiak Vip Revolution Yurots v0.0.5 Oque Mudou ? UPDATE 0.1.2 Novos Comandos. !notice /guild -> Permite que você mande msg em vermelho para membros da sua guild !afk on ->Auto mensagem Ausente! !afk off ->Fica Normal Para Compra House:!buyhouse Para Se Desfazer da House:!leave TEMPLE COM NOVO DESIGN ! Novo Update Baiak Vip Revolution Yurots v0.1.3 Adicionada a vip4 Removidos Bugs Na Baiak City e Desert City Download Scan http://imageshack.us/photo/my-images/835/screenshot201110219311.png/ http://www.xtibia.com/forum/uploads/post-322493-0-26042100-1319192810_thumb.png http://imageshack.us/photo/my-images/155/screenshot2011102110729.png/ MAIS NOVIDADES DENTRO DO JOGO! COMENTEM
    2 pontos
  5. angeldoido

    [Pedido] Egg System

    cara olha meu topico http://www.xtibia.com/forum/topic/168492-actionsnovo-sistema-de-pet/ -'
    2 pontos
  6. Kydrai

    Vip System By Account V1.0

    Vip System by Account 1.0 By Kydrai Este é um vip system por account, ou seja, um sistema de vip válido para todos os characters de uma determinada conta. O script foi testado no TFS 0.3.6 - 8.54. E no site Gesior 0.3.4 beta4. Em caso de erros ou dúvidas é só postar. Funções do Script Função necessária para começar a usar o script: installVip() -> Cria a coluna no banco de dados para usar o sistema de vip (testei somente em sqlite, mas acredito que funcione em mysql) Funções que utilizam o account id: doTeleportPlayersByAccount(acc, topos) -> Teleporta todos os players da account getVipTimeByAccount(acc) -> Pega o tempo de vip setVipTimeByAccount(acc, time) -> Edita o tempo de vip getVipDaysByAccount(acc) -> Pega o tempo de vip em dias isVipAccount(acc) -> Verifica se é vip addVipDaysByAccount(acc, days) -> Adiciona dias de vip doRemoveVipDaysByAccount(acc, days) -> Remove dias de vip getVipDateByAccount(acc) -> Pega a data e hora que irá terminar a vip Funções que utilizam o creature id (cid): doTeleportPlayers(cid, topos) -> Teleporta todos os players da account getVipTime(cid) -> Pega o tempo de vip setVipTime(cid, time) -> Edita o tempo de vip getVipDays(cid) -> Pega o tempo de vip em dias isVip(cid) -> Verifica se é vip addVipDays(cid, days) -> Adiciona dias de vip doRemoveVipDays(cid, days) -> Remove dias de vip getVipDate(cid) -> Pega a data e hora que irá terminar a vip Inserindo as funções Abra a pasta data/lib, crie um arquivo lua e coloque: vipAccount.lua --[[ Name: Vip System by Account Version: 1.0 Author: Kydrai Forum: http://www.xtibia.com/forum/topic/136543-vip-system-by-account-v10/ [Functions] -- Install installVip() -- By Account doTeleportPlayersByAccount(acc, topos) getVipTimeByAccount(acc) setVipTimeByAccount(acc, time) getVipDaysByAccount(acc) isVipAccount(acc) addVipDaysByAccount(acc, days) doRemoveVipDaysByAccount(acc, days) getVipDateByAccount(acc) -- By Player doTeleportPlayers(cid, topos) getVipTime(cid) setVipTime(cid, time) getVipDays(cid) isVip(cid) addVipDays(cid, days) doRemoveVipDays(cid, days) getVipDate(cid) ]]-- -- Install function installVip() if db.executeQuery("ALTER TABLE `accounts` ADD viptime INT(15) NOT NULL DEFAULT 0;") then print("[Vip System] Vip System instalado com sucesso!") return TRUE end print("[Vip System] Não foi possível instalar o Vip System!") return FALSE end -- By Account function doTeleportPlayersByAccount(acc, topos) if db.executeQuery("UPDATE `players` SET `posx` = "..topos.x..", `posy` = "..topos.y..", `posz` = "..topos.z.." WHERE `account_id` = "..acc..";") then return TRUE end return FALSE end function getVipTimeByAccount(acc) local vip = db.getResult("SELECT `viptime` FROM `accounts` WHERE `id` = "..acc..";") if vip:getID() == -1 then print("[Vip System] Account not found!") return FALSE end return vip:getDataInt("viptime") end function setVipTimeByAccount(acc, time) if db.executeQuery("UPDATE `accounts` SET `viptime` = "..time.." WHERE `id` = "..acc..";") then return TRUE end return FALSE end function getVipDaysByAccount(acc) local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60)) return days <= 0 and 0 or days end function isVipAccount(acc) return getVipDaysByAccount(acc) > 0 and TRUE or FALSE end function addVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local time = getVipDaysByAccount(acc) == 0 and (timeNow + daysValue) or (vipTime + daysValue) setVipTimeByAccount(acc, time) return TRUE end return FALSE end function doRemoveVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local time = vipTime - daysValue setVipTimeByAccount(acc, (time <= 0 and 1 or time)) return TRUE end return FALSE end function getVipDateByAccount(acc) if isVipAccount(acc) then local vipTime = getVipTimeByAccount(acc) return os.date("%d/%m/%y %X", vipTime) end return FALSE end -- By Player function doTeleportPlayers(cid, topos) doTeleportPlayersByAccount(getPlayerAccountId(cid), topos) end function getVipTime(cid) return getVipTimeByAccount(getPlayerAccountId(cid)) end function setVipTime(cid, time) return setVipTimeByAccount(getPlayerAccountId(cid), time) end function getVipDays(cid) return getVipDaysByAccount(getPlayerAccountId(cid)) end function isVip(cid) return isVipAccount(getPlayerAccountId(cid)) end function addVipDays(cid, days) return addVipDaysByAccount(getPlayerAccountId(cid), days) end function doRemoveVipDays(cid, days) return doRemoveVipDaysByAccount(getPlayerAccountId(cid), days) end function getVipDate(cid) return getVipDateByAccount(getPlayerAccountId(cid)) end Exemplos de uso Talkaction GOD: /installvip /addvip name, days /removevip name, days /checkvip name Player: /buyvip /vipdays talkactions.xml: <talkaction log="yes" access="5" words="/installvip;/addvip;/removevip;/checkvip" event="script" value="vipaccgod.lua"/> <talkaction words="/buyvip;/vipdays" event="script" value="vipaccplayer.lua"/> vipaccgod.lua: function onSay(cid, words, param, channel) local t = param:explode(",") local name, days = t[1], tonumber(t[2]) if words == "/installvip" then if installVip() then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Vip System instalado com sucesso!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não foi possível instalar o Vip System!") end elseif words == "/addvip" then if name then if days then local acc = getAccountIdByName(name) if acc ~= 0 then addVipDaysByAccount(acc, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip ao "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar essa quantidade de dia(s) de vip.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar dia(s) de vip a este player.") end elseif words == "/removevip" then if name then if days then local acc = getAccountIdByName(name) if acc ~= 0 then doRemoveVipDaysByAccount(acc, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você retirou "..days.." dia(s) de vip do "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar essa quantidade de dia(s) de vip.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar dia(s) de vip a este player.") end elseif words == "/checkvip" then if name then local acc = getAccountIdByName(name) if acc ~= 0 then local duration = getVipDateByAccount(acc) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O "..name.." possui "..getVipDaysByAccount(acc).." dias de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode visualizar os dias de vip a este player.") end end return TRUE end vipaccplayer.lua: function onSay(cid, words, param, channel) if words == "/buyvip" then local price = 1000000 local days = 30 if doPlayerRemoveMoney(cid, price) then addVipDays(cid, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de "..price.." para adicionar "..days.." dia(s) de vip.") end elseif words == "/vipdays" then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUE end Movement (Tile) Coloque actionid 15000 em um tile onde somente os vips poderão passar. movements.xml: <movevent type="StepIn" actionid="15000" event="script" value="viptile.lua"/> viptile.lua: function onStepIn(cid, item, position, fromPosition) if isVip(cid) == FALSE then doTeleportThing(cid, fromPosition, false) doSendMagicEffect(position, CONST_ME_MAGIC_BLUE) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Somente players vip podem passar.") end return TRUE end Creaturescript (Login) Quando player logar irá verificar se a vip do player acabou, se sim então irá teleportar todos os players da account para o templo, se não irá mostrar o tempo da vip. creaturescripts.xml: <event type="login" name="viplogin" script="viplogin.lua"/> viplogin.lua: function onLogin(cid) local vip = isVip(cid) if getVipTime(cid) > 0 and vip == FALSE then local townid = 1 doPlayerSetTown(cid, townid) local templePos = getTownTemplePosition(getPlayerTown(cid)) doTeleportThing(cid, templePos, false) setVipTime(cid, 0) doTeleportPlayers(cid, templePos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua Vip acabou!") elseif vip == TRUE then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUE end Action (Door) Coloque actionid 15001 na door onde somente os vips poderão passar. Use a porta gate of expertise (id: 1227) actions.xml: <action actionid="15001" script="vipdoor.lua"/> vipdoor.lua: function onUse(cid, item, fromPosition, itemEx, toPosition) if isVip(cid) == FALSE then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Somente players vip podem passar.") elseif item.itemid == 1227 then doTransformItem(item.uid, item.itemid + 1) doTeleportThing(cid, toPosition) end return TRUE end NPC (Vendedor de VIP) vipnpc.xml: <?xml version="1.0" encoding="UTF-8"?> <npc name="Vendedor de VIP" script="vipnpc.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|, I sell {vip} days."/> </parameters> </npc> vipnpc.lua: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function buyVip(cid, message, keywords, parameters, node) if(not npcHandler:isFocused(cid)) then return false end if doPlayerRemoveMoney(cid, parameters.price) then addVipDays(cid, parameters.days) npcHandler:say('Thanks, you buy '..parameters.days..' vip days. You have '..getVipDays(cid)..' vip days.', cid) else npcHandler:say('Sorry, you don\'t have enough money.', cid) end npcHandler:resetNpc() return true end local node1 = keywordHandler:addKeyword({'vip'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Do you want buy 30 vip days for 1000000 gp\'s?'}) node1:addChildKeyword({'yes'}, buyVip, {price = 1000000, days = 30}) node1:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Ok, then.', reset = true}) npcHandler:addModule(FocusModule:new()) Erros e Soluções Configurando o Gesior Com essa configuração irá aparecer o vip status do player no site e será possível vender vip pelo site. Se eu esqueci de alguma coisa é só avisar. accountmanagement.php Depois de: if(!$account_logged->isPremium()) $account_status = '<b><font color="red">Free Account</font></b>'; else $account_status = '<b><font color="green">Premium Account, '.$account_logged->getPremDays().' days left</font></b>'; Adicione: if(!$account_logged->isVip()) $account_vip_status = '<b><font color="red">Not Vip Account</font></b>'; else $account_vip_status = '<b><font color="green">Vip Account, '.$account_logged->getVipDays().' days left</font></b>'; Depois de: <td class="LabelV" >Account Status:</td><td>'.$account_status.'</td></tr><tr style="background-color:'.$config['site']['darkborder'].';" > Adicione: <td class="LabelV" >Account Vip Status:</td><td>'.$account_vip_status.'</td></tr><tr style="background-color:'.$config['site']['darkborder'].';" > pot/OTS_Account.php Substitua: private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0); Por: private $data = array('email' => '', 'blocked' => false, 'rlname' => '','location' => '','page_access' => 0,'lastday' => 0,'premdays' => 0, 'created' => 0, 'viptime' => 0); Substitua: $this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch(); Por: $this->data = $this->db->query('SELECT ' . $this->db->fieldName('id') . ', ' . $this->db->fieldName('name') . ', ' . $this->db->fieldName('password') . ', ' . $this->db->fieldName('email') . ', ' . $this->db->fieldName('blocked') . ', ' . $this->db->fieldName('rlname') . ', ' . $this->db->fieldName('location') . ', ' . $this->db->fieldName('page_access') . ', ' . $this->db->fieldName('premdays') . ', ' . $this->db->fieldName('viptime') . ', ' . $this->db->fieldName('lastday') . ', ' . $this->db->fieldName('created') . ' FROM ' . $this->db->tableName('accounts') . ' WHERE ' . $this->db->fieldName('id') . ' = ' . (int) $id)->fetch(); Substitua: $this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']); Por: $this->db->query('UPDATE ' . $this->db->tableName('accounts') . ' SET ' . $this->db->fieldName('password') . ' = ' . $this->db->quote($this->data['password']) . ', ' . $this->db->fieldName('email') . ' = ' . $this->db->quote($this->data['email']) . ', ' . $this->db->fieldName('blocked') . ' = ' . (int) $this->data['blocked'] . ', ' . $this->db->fieldName('rlname') . ' = ' . $this->db->quote($this->data['rlname']) . ', ' . $this->db->fieldName('location') . ' = ' . $this->db->quote($this->data['location']) . ', ' . $this->db->fieldName('page_access') . ' = ' . (int) $this->data['page_access'] . ', ' . $this->db->fieldName('premdays') . ' = ' . (int) $this->data['premdays'] . ', ' . $this->db->fieldName('viptime') . ' = ' . (int) $this->data['viptime'] . ', ' . $this->db->fieldName('lastday') . ' = ' . (int) $this->data['lastday'] . ' WHERE ' . $this->db->fieldName('id') . ' = ' . $this->data['id']); Depois de: public function getPremDays() { if( !isset($this->data['premdays']) || !isset($this->data['lastday']) ) { throw new E_OTS_NotLoaded(); } return $this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])); } Adicione: public function getVipDays() { if( !isset($this->data['viptime']) || !isset($this->data['lastday']) ) { throw new E_OTS_NotLoaded(); } return ceil(($this->data['viptime'] - time()) / (24*60*60)); } Depois de: public function isPremium() { return ($this->data['premdays'] - (date("z", time()) + (365 * (date("Y", time()) - date("Y", $this->data['lastday']))) - date("z", $this->data['lastday'])) > 0); } Adicione: public function isVip() { return ceil(($this->data['viptime'] - time()) / (24*60*60)) > 0; } characters.php Substitua: if($config['site']['show_vip_status']) { $id = $player->getCustomField("id"); if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Vip Status:</TD>'; $vip = $SQL->query('SELECT * FROM player_storage WHERE player_id = '.$id.' AND `key` = '.$config['site']['show_vip_storage'].';')->fetch(); if($vip == false) { $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>'; } else { $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>'; } $comment = $player->getComment(); $newlines = array("\r\n", "\n", "\r"); $comment_with_lines = str_replace($newlines, '<br />', $comment, $count); if($count < 50) $comment = $comment_with_lines; if(!empty($comment)) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>'; } } Por: if($config['site']['show_vip_status']) { $id = $player->getCustomField("id"); if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD WIDTH=10%>Account Vip Status:</TD>'; if(!$account->isVip()) { $main_content .= '<TD><span class="red"><B>NOT VIP</B></TD></TR>'; } else { $main_content .= '<TD><span class="green"><B>VIP</B></TD></TR>'; } $comment = $player->getComment(); $newlines = array("\r\n", "\n", "\r"); $comment_with_lines = str_replace($newlines, '<br />', $comment, $count); if($count < 50) $comment = $comment_with_lines; if(!empty($comment)) { if(is_int($number_of_rows / 2)) { $bgcolor = $config['site']['darkborder']; } else { $bgcolor = $config['site']['lightborder']; } $number_of_rows++; $main_content .= '<TR BGCOLOR="'.$bgcolor.'"><TD VALIGN=top>Comment:</TD><TD>'.$comment.'</TD></TR>'; } } shopsystem.php (+Créditos ao GM Bekman) Substitua: if($buy_offer['type'] == 'pacc') { $player_premdays = $buy_player_account->getCustomField('premdays'); $player_lastlogin = $buy_player_account->getCustomField('lastday'); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).', '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');'; $SQL->query($save_transaction); $buy_player_account->setCustomField('premdays', $player_premdays+$buy_offer['days']); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; if($player_premdays == 0) { $buy_player_account->setCustomField('lastday', time()); } $main_content .= '<h2>PACC added!</h2><b>'.$buy_offer['days'].' days</b> of Premium Account added to account of player <b>'.$buy_player->getName().'</b> for <b>'.$buy_offer['points'].' premium points</b> from your account.<br />Now you have <b>'.$user_premium_points.' premium points</b>.<br /><a href="index.php?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; } Por: if($buy_offer['type'] == 'pacc') { $player_viptime = $buy_player_account->getCustomField('viptime'); $player_lastlogin = $buy_player_account->getCustomField('lastday'); $save_transaction = 'INSERT INTO '.$SQL->tableName('z_shop_history_pacc').' (id, to_name, to_account, from_nick, from_account, price, pacc_days, trans_state, trans_start, trans_real) VALUES (NULL, '.$SQL->quote($buy_player->getName()).', '.$SQL->quote($buy_player_account->getId()).', '.$SQL->quote($buy_from).', '.$SQL->quote($account_logged->getId()).', '.$SQL->quote($buy_offer['points']).', '.$SQL->quote($buy_offer['days']).', \'realized\', '.$SQL->quote(time()).', '.$SQL->quote(time()).');'; $SQL->query($save_transaction); if($player_viptime > 0) $buy_player_account->setCustomField('viptime', $player_viptime + ($buy_offer['days'] * 24 * 60 * 60)); else $buy_player_account->setCustomField('viptime', time() + ($buy_offer['days'] * 24 * 60 * 60)); $account_logged->setCustomField('premium_points', $user_premium_points-$buy_offer['points']); $user_premium_points = $user_premium_points - $buy_offer['points']; if($player_viptime == 0) { $buy_player_account->setCustomField('lastday', time()); } $main_content .= '<h2>VIP Days added!</h2><b>'.$buy_offer['days'].' days</b> of Vip Account added to account of player <b>'.$buy_player->getName().'</b> for <b>'.$buy_offer['points'].' premium points</b> from your account.<br />Now you have <b>'.$user_premium_points.' premium points</b>.<br /><a href="index.php?subtopic=shopsystem">GO TO MAIN SHOP SITE</a>'; } Links Úteis 01- [Gesior Acc] Vendedo Vip Pelo Pacc Créditos: GM Bekman 02- Double Exp Para Vip Créditos: Vodkart 03- Outfits Só Para Jogadores Vips Créditos: Vodkart
    1 ponto
  7. Leoprotons

    Guild War System Com Escudos

    Bom vamos começar pelo site : Vá em Xampp/Htdocs e crie e um arquivo chamado wars.php,dentro add isto: <?php $main_content = "<h1 align=\"center\">Guild Wars</h1> <script type=\"text/javascript\"><!-- function show_hide(flip) { var tmp = document.getElementById(flip); if(tmp) tmp.style.display = tmp.style.display == 'none' ? '' : 'none'; } --></script> <a onclick=\"show_hide('information'); return false;\" style=\"cursor: pointer;\"><h1><center>» Click to se the commands «<center></h1></a> <table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\" id=\"information\" style=\"display: none;\";> <tr align=\"center\"><b>You must send this commands in GUILD CHAT.</tr> <tr style=\"background: #512e0b;\"><td align=\"center\" class=\"white\"><b>Command</b></td><td colspan=\"2\" align=\"center\" class=\"white\"><b>Description</b></td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/war invite, guild name, fraglimit</b></td><td>Sends an invitation to start the war. Example: <font color=red><BR>/war invite, Chickens, 150<BR></font><B>(Invite a guild to war with 150 frags count.)</B></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/war invite, guild name, fraglimit, money</b></td><td>Send the invitation to start the war. Example: <font color=red><BR>/war invite, Chickens, 150, 10000</font><br><B> (Invite a guild to war with 150 frags count and payment of 10000 gold coins <- you need donate to guild to use it.)<B></td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/war accept, guild name</b></td><td>Accepts the invitation to start a war. Example: <font color=red><BR>/war accept, Chickens</font><BR><B>(Accept the war against guild \"Chickens\".)</b></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/war reject, guild name</b></td><td>Rejects the invitation to start a war. Example: <font color=red><BR>/war reject, Chickens</font><BR><B>(Reject a invitation to war from Chickens.)</B></td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/war cancel, guild name</b></td><td>Cancels the invitation. Example: <font color=red><BR>/war cancel, Chickens</font><br><b>(Cancel my guild invitation to war with Chickens.)</b></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/balance</b></td><td>See the guild balance - balance of money.</td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/balance donate value</b></td><td>Deposits money on the guild's bank account. All players can donate. Example: <font color=red><BR>/balance donate 100000 </font><BR><B>(You will donate 100k to your guild balance.)</B></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/balance pick value</b></td><td>Withdraws money from the guild's bank account. Can be used only by the guild leader. Example: <font color=red><BR>/balance pick 100000 </font><BR><B>(You will withdraw 100k from your guild balance.)</B></td></tr> </table> <table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\"> <tr> <td style=\"background: #512e0b\" class=\"white\" width=\"150\"><b>Aggressor</b></td> <td style=\"background: #512e0b\" class=\"white\"><b>Information</b></td> <td style=\"background: #512e0b\" class=\"white\" width=\"150\"><b>Enemy</b></td> </tr><tr style=\"background: #F1E0C6;\">"; $count = 0; foreach($SQL->query('SELECT * FROM `guild_wars` WHERE `status` IN (1,4) OR ((`end` >= (UNIX_TIMESTAMP() - 604800) OR `end` = 0) AND `status` IN (0,5));') as $war) { $a = $ots->createObject('Guild'); $a->load($war['guild_id']); if(!$a->isLoaded()) continue; $e = $ots->createObject('Guild'); $e->load($war['enemy_id']); if(!$e->isLoaded()) continue; $alogo = $a->getCustomField('logo_gfx_name'); if(empty($alogo) || !file_exists('guilds/' . $alogo)) $alogo = 'default_logo.gif'; $elogo = $e->getCustomField('logo_gfx_name'); if(empty($elogo) || !file_exists('guilds/' . $elogo)) $elogo = 'default_logo.gif'; $count++; $main_content .= "<tr style=\"background: " . (is_int($count / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . ";\"> <td align=\"center\"><a href=\"?subtopic=guilds&action=show&guild=".$a->getId()."\"><img src=\"guilds/".$alogo."\" width=\"64\" height=\"64\" border=\"0\"/><br />".$a->getName()."</a></td> <td align=\"center\">"; switch($war['status']) { case 0: { $main_content .= "<b>Pending acceptation</b><br />Invited on " . date("M d Y, H:i:s", $war['begin']) . " for " . ($war['end'] > 0 ? (($war['end'] - $war['begin']) / 86400) : "unspecified") . " days. The frag limit is set to " . $war['frags'] . " frags, " . ($war['payment'] > 0 ? "with payment of " . $war['payment'] . " bronze coins." : "without any payment.")."<br />Will expire in three days."; break; } case 3: { $main_content .= "<s>Canceled invitation</s><br />Sent invite on " . date("M d Y, H:i:s", $war['begin']) . ", canceled on " . date("M d Y, H:i:s", $war['end']) . "."; break; } case 2: { $main_content .= "Rejected invitation<br />Invited on " . date("M d Y, H:i:s", $war['begin']) . ", rejected on " . date("M d Y, H:i:s", $war['end']) . "."; break; } case 1: { $main_content .= "<font size=\"6\"><span style=\"color: red;\">" . $war['guild_kills'] . "</span> : <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span></font><br /><br /><span style=\"color: darkred; font-weight: bold;\">On a brutal war</span><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ($war['end'] > 0 ? ", will end up at " . date("M d Y, H:i:s", $war['end']) : "") . ".<br />The frag limit is set to " . $war['frags'] . " frags, " . ($war['payment'] > 0 ? "with payment of " . $war['payment'] . " bronze coins." : "without any payment."); break; } case 4: { $main_content .= "<font size=\"6\"><span style=\"color: red;\">" . $war['guild_kills'] . "</span> : <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span></font><br /><br /><span style=\"color: darkred;\">Pending end</span><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ", signed armstice on " . date("M d Y, H:i:s", $war['end']) . ".<br />Will expire after reaching " . $war['frags'] . " frags. ".($war['payment'] > 0 ? "The payment is set to " . $war['payment'] . " bronze coins." : "There's no payment set."); break; } case 5: { $main_content .= "<i>Ended</i><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ", ended on " . date("M d Y, H:i:s", $war['end']) . ". Frag statistics: <span style=\"color: red;\">" . $war['guild_kills'] . "</span> to <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span>."; break; } default: { $main_content .= "Unknown, please contact with gamemaster."; break; } } $main_content .= "<br /><br /><a onclick=\"show_hide('war-details:" . $war['id'] . "'); return false;\" style=\"cursor: pointer;\">» Details «</a></td> <td align=\"center\"><a href=\"?subtopic=guilds&action=show&guild=".$e->getId()."\"><img src=\"guilds/".$elogo."\" width=\"64\" height=\"64\" border=\"0\"/><br />".$e->getName()."</a></td> </tr> <tr id=\"war-details:" . $war['id'] . "\" style=\"display: none; background: " . (is_int($count / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . ";\"> <td colspan=\"3\">"; if(in_array($war['status'], array(1,4,5))) { $deaths = $SQL->query('SELECT `pd`.`id`, `pd`.`date`, `gk`.`guild_id` AS `enemy`, `p`.`name`, `pd`.`level` FROM `guild_kills` gk LEFT JOIN `player_deaths` pd ON `gk`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `gk`.`war_id` = ' . $war['id'] . ' AND `p`.`deleted` = 0 ORDER BY `pd`.`date` DESC')->fetchAll(); if(!empty($deaths)) { foreach($deaths as $death) { $killers = $SQL->query('SELECT `p`.`name` AS `player_name`, `p`.`deleted` AS `player_exists`, `k`.`war` AS `is_war` FROM `killers` k LEFT JOIN `player_killers` pk ON `k`.`id` = `pk`.`kill_id` LEFT JOIN `players` p ON `p`.`id` = `pk`.`player_id` WHERE `k`.`death_id` = ' . $death['id'] . ' ORDER BY `k`.`final_hit` DESC, `k`.`id` ASC')->fetchAll(); $count = count($killers); $i = 0; $others = false; $main_content .= date("j M Y, H:i", $death['date']) . " <span style=\"font-weight: bold; color: " . ($death['enemy'] == $war['guild_id'] ? "red" : "lime") . ";\">+</span> <a href=\"index.php?subtopic=characters&name=" . urlencode($death['name']) . "\"><b>".$death['name']."</b></a> "; foreach($killers as $killer) { $i++; if($killer['is_war'] != 0) { if($i == 1) $main_content .= "killed at level <b>".$death['level']."</b> by "; else if($i == $count && $others == false) $main_content .= " and by "; else $main_content .= ", "; if($killer['player_exists'] == 0) $main_content .= "<a href=\"index.php?subtopic=characters&name=".urlencode($killer['player_name'])."\">"; $main_content .= $killer['player_name']; if($killer['player_exists'] == 0) $main_content .= "</a>"; } else $others = true; if($i == $count) { if($others == true) $main_content .= " and few others"; $main_content .= ".<br />"; } } } } else $main_content .= "<center>There were no frags on this war so far.</center>"; } else $main_content .= "<center>This war did not began yet.</center>"; $main_content .= "</td> </tr>"; } if($count == 0) $main_content .= "<tr style=\"background: ".$config['site']['darkborder'].";\"> <td colspan=\"3\">Currently there are no active wars.</td> </tr>"; $main_content .= "</table>"; $main_content .= '<div align="right"><small><b>Customized by: <a href="http://www.xtibia.com/forum/user/240289-walef-xavier">Walef Xavier</a></b></small></div><br />'; ?> Agora vá em Xampp/Htdocs/index.php e add o seguinte: case "wars"; $subtopic = "wars"; $topic = "Guild Wars"; include("wars.php"); break; Agora para finalizar a parte do site vá em Xampp/Htdocs/Layout/Tibiacom/layout.php e add o seguinte: <a href='?subtopic=wars'> <div id='submenu_wars' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_polls' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'><font color=red>Guild Wars</font></div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> Agora vamos para seu Ot: Va em GlobalEvents/scripts/start.lua e add o seguinte: executeQuery("DELETE FROM `guild_wars` WHERE `status` = 0 AND `begin` < " .. (os.time() - 2 * 86400) .. ";") db.executeQuery("UPDATE `guild_wars` SET `status` = 5, `end` = " .. os.time() .. " WHERE `status` = 1 AND `end` > 0 AND `end` < " .. os.time() .. ";") Agora vá em Lib e crie um arquivo .lua chamado 101-war,dentro add o seguinte: WAR_GUILD = 0 WAR_ENEMY = 1 Agora para finalizar vamos colocar os comandos em Talkactions ! Vá em Talkactions/scripts e crie dois arquivos chamados war.lua e balance.lua,dentro add o seguinte: War.lua function onSay(cid, words, param, channel) local guild = getPlayerGuildId(cid) if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0) return true end local t = string.explode(param, ",") if(not t[2]) then doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0) return true end local enemy = getGuildId(t[2]) if(not enemy) then doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0) return true end if(enemy == guild) then doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0) return true end local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy) if(tmp:getID() ~= -1) then enemyName = tmp:getDataString("name") tmp:free() end if(isInArray({"accept", "reject", "cancel"}, t[1])) then local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild if(t[1] == "cancel") then query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy end tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0") if(tmp:getID() == -1) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end if(t[1] == "accept") then local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment") _tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0) return true end db.query("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild) end query = "UPDATE `guild_wars` SET " local msg = "accepted " .. enemyName .. " invitation to war." if(t[1] == "reject") then query = query .. "`end` = " .. os.time() .. ", `status` = 2" msg = "rejected " .. enemyName .. " invitation to war." elseif(t[1] == "cancel") then query = query .. "`end` = " .. os.time() .. ", `status` = 3" msg = "canceled invitation to a war with " .. enemyName .. "." else query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1" end query = query .. " WHERE `id` = " .. tmp:getDataInt("id") if(t[1] == "accept") then doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD) doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY) end tmp:free() db.query(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE) return true end if(t[1] == "invite") then local str = "" tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)") if(tmp:getID() ~= -1) then if(tmp:getDataInt("status") == 0) then if(tmp:getDataInt("guild_id") == guild) then str = "You have already invited " .. enemyName .. " to war." else str = enemyName .. " have already invited you to war." end else str = "You are already on a war with " .. enemyName .. "." end tmp:free() end if(str ~= "") then doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0) return true end local frags = tonumber(t[3]) if(frags ~= nil) then frags = math.max(10, math.min(1000, frags)) else frags = 100 end local payment = tonumber(t[4]) if(payment ~= nil) then payment = math.max(100000, math.min(1000000000, payment)) tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0) return true end db.query("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild) else payment = 0 end local begining, ending = os.time(), tonumber(t[5]) if(ending ~= nil and ending ~= 0) then ending = begining + (ending * 86400) else ending = 0 end db.query("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");") doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE) return true end if(not isInArray({"end", "finish"}, t[1])) then return false end local status = (t[1] == "end" and 1 or 4) tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status) if(tmp:getID() ~= -1) then local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id") tmp:free() doGuildRemoveEnemy(guild, enemy) doGuildRemoveEnemy(enemy, guild) db.query(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end if(status == 4) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1") if(tmp:getID() ~= -1) then if(tmp:getDataInt("end") > 0) then tmp:free() doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id") tmp:free() db.query(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true balance.lua local function isValidMoney(value) if(value == nil) then return false end return (value > 0 and value <= 99999999999999) end function onSay(cid, words, param, channel) local guild = getPlayerGuildId(cid) if(guild == 0) then return false end local t = string.explode(param, ' ', 1) if(getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER and isInArray({ 'pick' }, t[1])) then if(t[1] == 'pick') then local money = { tonumber(t[2]) } if(not isValidMoney(money[1])) then doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0) return true end local result = db.getResult('SELECT `balance` FROM `guilds` WHERE `id` = ' .. guild) if(result:getID() == -1) then return false end money[2] = result:getDataLong('balance') result:free() if(money[1] > money[2]) then doPlayerSendChannelMessage(cid, '', 'The balance is too low for such amount.', TALKTYPE_CHANNEL_W, 0) return true end if(not db.query('UPDATE `guilds` SET `balance` = `balance` - ' .. money[1] .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;')) then return false end doPlayerAddMoney(cid, money[1]) doPlayerSendChannelMessage(cid, '', 'You have just picked ' .. money[1] .. ' money from your guild balance.', TALKTYPE_CHANNEL_W, 0) else doPlayerSendChannelMessage(cid, '', 'Invalid sub-command.', TALKTYPE_CHANNEL_W, 0) end elseif(t[1] == 'donate') then local money = tonumber(t[2]) if(not isValidMoney(money)) then doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0) return true end if(getPlayerMoney(cid) < money) then doPlayerSendChannelMessage(cid, '', 'You don\'t have enough money.', TALKTYPE_CHANNEL_W, 0) return true end if(not doPlayerRemoveMoney(cid, money)) then return false end db.query('UPDATE `guilds` SET `balance` = `balance` + ' .. money .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;') doPlayerSendChannelMessage(cid, '', 'You have transfered ' .. money .. ' money to your guild balance.', TALKTYPE_CHANNEL_W, 0) else local result = db.getResult('SELECT `name`, `balance` FROM `guilds` WHERE `id` = ' .. guild) if(result:getID() == -1) then return false end doPlayerSendChannelMessage(cid, '', 'Current balance of guild ' .. result:getDataString('name') .. ' is: ' .. result:getDataLong('balance') .. ' bronze coins.', TALKTYPE_CHANNEL_W, 0) result:free() end return true end Agora vá em Talkactions/talkactions.xml e add as duas tags: <talkaction words="/war" channel="0" event="script" value="war.lua" desc="(Guild channel command) War management."/> <talkaction words="/balance" channel="0" event="script" value="balance.lua" desc="(Guild channel command) Balance management."/> Pronto,seu Guild War Systema está instalado...mas para funcionar necessitará das tabelas na sua database e do Tfs 0.4 .Vou posta-los abaixo,respectivamente. . Tabelas . Para quem ainda não sabe add tabelas a sua database,vou ensinar: Acesse seu phpmyadmin,digite sua senha (caso tenha),clique no nome da sua database a esquerda,assim que carregar a sua database clique em SQL lá em cima...Aparecerá um espaço em branco lá voce irá add as seguintes tabelas...e depois clicar em Executar. CREATE TABLE IF NOT EXISTS `guild_wars` ( `id` INT NOT NULL AUTO_INCREMENT, `guild_id` INT NOT NULL, `enemy_id` INT NOT NULL, `begin` BIGINT NOT NULL DEFAULT '0', `end` BIGINT NOT NULL DEFAULT '0', `frags` INT UNSIGNED NOT NULL DEFAULT '0', `payment` BIGINT UNSIGNED NOT NULL DEFAULT '0', `guild_kills` INT UNSIGNED NOT NULL DEFAULT '0', `enemy_kills` INT UNSIGNED NOT NULL DEFAULT '0', `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `status` (`status`), KEY `guild_id` (`guild_id`), KEY `enemy_id` (`enemy_id`) ) ENGINE=InnoDB; ALTER TABLE `guild_wars` ADD CONSTRAINT `guild_wars_ibfk_1` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_wars_ibfk_2` FOREIGN KEY (`enemy_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE; ALTER TABLE `guilds` ADD `balance` BIGINT UNSIGNED NOT NULL AFTER `motd`; CREATE TABLE IF NOT EXISTS `guild_kills` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `guild_id` INT NOT NULL, `war_id` INT NOT NULL, `death_id` INT NOT NULL ) ENGINE = InnoDB; ALTER TABLE `guild_kills` ADD CONSTRAINT `guild_kills_ibfk_1` FOREIGN KEY (`war_id`) REFERENCES `guild_wars` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_kills_ibfk_2` FOREIGN KEY (`death_id`) REFERENCES `player_deaths` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_kills_ibfk_3` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE; ALTER TABLE `killers` ADD `war` INT NOT NULL DEFAULT 0; Para finalizar é necessário que o seu .exe tenha incluído na compilação o parâmetro, -D__WAR_SYSTEM__. Como adiciono? Para adicionar é necessário ter a source do otserver que você utiliza. Abra a source em um dev-cpp aperte alt+p na coluna paraments add -D__WAR_SYSTEM__ da ok e compila. Se você não souber compilar existem tutorias bem explicativas que tornam fácil aprender a compilar, veja abaixo: Compilando no Windows Compilando no Linux ubuntu Pronto o Guild Wars System está totalmente instalado! Para os preguiçosos Ocupados coloquei o download do sistema completo. Download Aqui Link do Scan Creditos: Walef Xavier - War System AgaSsI - Tópico original Gm Beckman - Completou o tópico
    1 ponto
  8. danilo13

    Up Level Thais

    Bem hoje eu trago Thais um servidor de mapas ... Cujo servidor tem o seguinte: Sistema Casino ... Formadores Sistema Sqm ... Sistema Vip .. versão 8.60 Alguns outros .. Aki deixo algumas fotos! Casino: Depot: Hunts: Templo: Link De Descarga: http://www.speedyshare.com/files/26813155/new_server.rar Scan: http://www.virustotal.com/file-scan/report.html?id=4eeb7d5a90877570bd42e6636a6a1728cac67ab4e621b33921fc1fa602a11c50-1297644158 Okei Isso é tudo, se você gosta .. E você fez o download Por favor me dê Rep + + :button_ok:
    1 ponto
  9. Aqui vou ensinar a : LEIA COM ATENÇÃO ATENTAMENTE! Adicionar o comando !aol ADICIONANDO ADDON DOLL Editando wand,staff,rod e editando armas! [/center][/code]
    1 ponto
  10. Olá galerinha do :XTibia_smile: , hoje trouxe aqui para area de pixel art um pacotão com 64 Sprites em formato .idc, nesse pacotao dessa vez e uma coisa que muitos querem, POKEMONS DE HOENN / SINOOH [RUBY/SAPPHIRE/DIAMOND/ETC...], entao vamos ao que intereça! O Que Contém/ Que Pokemons Contém: :button_ok: Não Contém :button_cancel: Downloads & Créditos: Pacotão Novos Pokemons: Clique Aqui! Scan: Clique Aqui! Créditos: OT Pokémon Brunoo Angel
    1 ponto
  11. ATENÇÃO!!!! NÃO SEI SE FUNCIONARÁ MAS PARA EVITAR ATAQUES À DATABASE DELETE A PASTA WEBDAV NA PASTA DO XAMPP! Recomendo usar o xampp 1.7.3 para baixa-lo Clique aqui Olá baixei um gesior e resolvi editar tirar alguns bugs etc... este gesior funciona nas versoes 8.60 pra cima! O que tem de novo? Update 2.0 Screen Shot: characters.php modificado: Download: Gesior Acc 8.60 By [ADM] DaNgeR(2.0).rar Créditos: Gesior GM Beckman Walef Xavier [ADM] DaNger - [ADM] Forever Aqui estão os sistemas que você deve adicionar no seu ot para funcionar no site! http://www.xtibia.co...-trade-offline/ - Trade Offline http://www.xtibia.co...em-com-escudos/ - Guild War Com Escudos http://www.xtibia.co...lottery-system/ - Lottery System http://www.xtibia.co...utomaticamente/ - Shop System(Para o Shop entregar os itens automaticamente)! e Para o Power Gamers Faça isso: execute este comando na database: ALTER TABLE `players` ADD `exphist_lastexp` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist1` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist2` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist3` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist4` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist5` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist6` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `exphist7` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetimetoday` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime1` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime2` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime3` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime4` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime5` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime6` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetime7` BIGINT( 255 ) NOT NULL DEFAULT '0', ADD `onlinetimeall` BIGINT( 255 ) NOT NULL DEFAULT '0'; depois este UPDATE `players` SET `exphist_lastexp`=`players`.`experience` depois vá na pasta do ot/data/globalevents e em globalevents.xml adicione isto: <globalevent name="history" interval="60" event="script" value="history.lua"/> depois vá na pasta do ot/data/globalevents/scripts e crie um arquivo chamado history.lua e adicione isso dentro: function onThink(interval, lastExecution) if (tonumber(os.date("%d")) ~= getGlobalStorageValue(23456)) then setGlobalStorageValue(23456, (tonumber(os.date("%d")))) db.executeQuery("UPDATE `players` SET `onlinetime7`=players.onlinetime6, `onlinetime6`=players.onlinetime5, `onlinetime5`=players.onlinetime4, `onlinetime4`=players.onlinetime3, `onlinetime3`=players.onlinetime2, `onlinetime2`=players.onlinetime1, `onlinetime1`=players.onlinetimetoday, `onlinetimetoday`=0;") db.executeQuery("UPDATE `players` SET `exphist7`=players.exphist6, `exphist6`=players.exphist5, `exphist5`=players.exphist4, `exphist4`=players.exphist3, `exphist3`=players.exphist2, `exphist2`=players.exphist1, `exphist1`=players.experience-players.exphist_lastexp, `exphist_lastexp`=players.experience;") end db.executeQuery("UPDATE `players` SET `onlinetimetoday`=players.onlinetimetoday+60, `onlinetimeall`=players.onlinetimeall+60 WHERE `online` = 1;") return TRUE end
    1 ponto
  12. BaiakZik

    Mapa Baiak Com Vip3

    Templo Free Buero Free City Vip3 City Vip2 City Vip1 Area De Eventos Treiners "Então Meu Primeiro Topico Eu Aceito Erros Se Tiver No Mapa" Então O Mapa Super Editado Com Vip1,vip2,vip3 Então Faza Esse Download Agora Mesmo To Sem Prints Do Mapa Mas Garanto Que Vcs Vao Gostar 2 novos sets add baiakzik e master as defesas e os atks serão surpressos pra qm baixar o mapa !! Comandos Feito Por Mim !backpack : Compra Backpack !aol : Compra aol !bless : Compra Bless !attackguild on !attrackguild off !reparar soft !reparar firewalker !glist !glist (nome da guild) !party (muda outfit da party) !changeoutfit (muda outfit da guild) !online !rank Créditos Bryan Math Baiak Yurots Baiakzik Acc Do GOD god / god A Sql Ja Vem No Mapa Na Pasta Utilidades baiak-zik.servegame.com O MELHOR OT COM ESSE MAPA!! Scan Do Ot: http://www.virustotal.com/file-scan/report.html?id=69b880dbe4fc29b17cf62f639adb78b625b57c9c1eabc30ec5a45fbe41edf6ab-1319215683 Download Do Ot : http://www.4shared.com/file/Mse-rESx/860_Baiak_Edited_By_Baiakzik.html Em Breve Posto O Novo Mapa Com Vip4 Qm Aki Gostaria De Fazer Algum Map Junto Sou Script E Mapper Será Uma Quest Q Vai Ter No Templo Vip3!! Meus Trabalhos http://www.xtibia.com/forum/topic/170732-mapa-baiak-com-vip4/ http://www.xtibia.com/forum/topic/170965-baiak-vip4/ http://www.xtibia.com/forum/topic/171439-baiak-zik-vip4/ http://www.xtibia.com/forum/topic/171823-baiakzik-com-vip5-agr/#entry1128624
    1 ponto
  13. Olá Galera Do Xtibia, hoje vim aqui trazer um pacotao inovador de npcs para seu servidor de pokemon online [poketibia] {LINKS DE DOWNLOAD NO FINAL DO TOPICO} Quais Npcs o Pacotão Contém? Downloads: Pacotão De Npcs By Bruninhoo: Clique Aqui! Scan: Clique Aqui! [u][i]"] Gostou, Te Ajudei ?? REP+ :button_ok:
    1 ponto
  14. hique86

    Teleportes, Saindo Do Basico!

    Ae peassoal, chega de teleportes basicos no seu Ot né. Teleportes basicos, nunca mais!! Sei que talvez tenha muita gente que sabe fazer, mas ainda vemos em muitos Ots com teleportes simples, basicos, então vou mostrar passo a passo a fazer um teleporte bacana. Simboraaa... Eu uso o RME, então os atalhos e itens são correspondentes ao RME. Primeiro: Segundo: Terceiro: Quarto: Quinto e ultimo: Seu teleporte ficara assim: O resultado e outros teleportes está no video: Bom pessoal, é isso ai, espero que gostem e apartir de agora, diga adeus a teleportes basicos e vamos deixar a criatividade fluir. créditos 100% Hique86 Até a proxima...
    1 ponto
  15. Quem Ja jogo digimon battle online sabe que as sprites digimon deles são ótimas e vc penso assim ! Porque eu nao vo la e pego para ussa no tibia ! ate pq as de ds andão apenas nas diagonais ! Ai chega na pasta sprites e vc se depara com os formatos [spr] e pensa com q diaxo vo abrir isso ? Seus problemas acabarão ! Vim ak Posta Um programa q lhe permite ver as sprites ! Bom eu pego elas dando print Se vc tiver o digimon vera que tem efeitos bom para Seu sever como os efeitos de captura evolução magias alem dos digimons Bom Se Eu Ajudei Vai ali em baixo e da um Rep+ Ate pq e Menos de 3 segundos para dar um repzinho ! depois vo posta um topico com um pack de 192 Digimon ! Obs : tem ums sprites na pasta do programa que eu tava ripando Flw
    1 ponto
  16. Demonbholder

    Getstoragerank(Storage, N)

    Faaaaaala galera! Tudo tranquilo? Faz um tempão que eu não posto aqui né? Então, eu fiz essa função esses dias e resolvi divulgar porque todo mundo precisa dessa função eventualmente. Como funciona: No primeiro parâmetro você irá colocar o número de storage, o qual você deseja checar o rank. No segundo parâmetro será posto o número mínimo para o jogador entrar no rank, por exemplo, caso você coloque 0 e há algum jogador com -1 no valor de storage, ele não irá entrar na lista. A função retorna uma tabela com os nomes dos jogadores em ordem do maior valor ao menor. Enfim, vamos a função: function getStorageRank(storage, n) local n = n or 0 local data = tonumber(db.getResult("SELECT `id` FROM `players` ORDER BY `id` DESC;"):getDataString("id")) local val, ret, nome, tabela, max = {}, {}, {}, {}, {} for i = 1, data do if tonumber(db.getResult("SELECT `online` FROM `players` WHERE `id` = "..i..";"):getDataString("online")) == 0 then local data = db.getResult("SELECT `value` FROM `player_storage` WHERE `player_id` = "..i.." AND `key` = "..storage..";") resultado = data:getID() == -1 and -1 or tonumber(data:getDataString("value")) name = db.getResult("SELECT `name` FROM `players` WHERE `id` = "..i..";"):getDataString("name") else for _, pid in pairs(getPlayersOnline()) do if getPlayerGUID(pid) == i then resultado = getPlayerStorageValue(pid, storage) name = getPlayerName(pid) end end end table.insert(val, resultado) table.insert(tabela, resultado) table.insert(nome, name) end for i = 1, table.maxn(tabela) do valor = n for a, b in ipairs(tabela) do if b >= valor then valor = b end end table.remove(tabela, table.find(tabela, valor)) table.insert(max, valor) end for i = 1, #max do local pos = table.find(val, max[i]) table.insert(ret, nome[pos]) table.remove(nome, pos) table.remove(val, pos) end return ret end Vamos a um exemplo de uso: function onSay(cid, words, param) for _, t in pairs(getStorageRank(38000, -1)) do print(t) end end Neste exemplo será impresso no distro os nomes dos jogadores em ordem de maior para menor. É isso ai galera, espero que usem, até.
    1 ponto
  17. CoLoRaDo

    Gesior Website Bugs Erros

    vá no seu index.php e embaixo de: <?PHP adicione: date_default_timezone_set('America/Recife');
    1 ponto
  18. leleeuh

    Error Ao Editar Mapa!

    O nome do arquivo ta incorreto. Vai no data/world e bota o nome do arquivo de acordo com o que está no config.lua PS: 1 reputação não cai o dedo, a não ser que vc tenha lepra.
    1 ponto
  19. @SkyTime Irei começa a trabalhar no cruzamento assim que tiver tempo xD Mesmo tendo gente que disanima noix --" Vo espera pra ver como (vo fase\vai ser feito) o Gender System pra pod fase em cima de uma base neah xD Abrax
    1 ponto
  20. quero que o topico seja aprovado porque existem muitas pessoas que querem esses comandos! valew pelo rep
    1 ponto
  21. Olá Venho até aqui lhes trazer o The Forgotten Server (Crying Damson) - Old School. Depois de muito tempo mexendo com esse servidor e muitas tentativas de coloca-lo para rodar na versão 7.6, eu finalmente consegui. Lembrando que o mapa não é para se usar.... o mapa que acompanha o servidor é só uma base.... o que realmente importa é o distro The Features [ CHANGELOG Project Name The Forgotten Server Version 0.3 Codenamed Crying Damson License GNU GPLv3 Forum http://otland.net/ ] [ Features ME = Tryller, Shynzo, Shenlong SVN = OpenTibia SVN Developers (Version 0.3) Speed up (SVN, TFS) Much less memory used (even 1000 times less for database queries!) (SVN, TFS) Code optimization (SVN, RFS) GCC 4.2 compatibility (SVN) Skull System (SVN, TFS) Party System (SVN, TFS) Bed System (SVN, TFS) Muted System (TFS) Rule Violations Report system [ctrl + r] (SVN, TFS, ME) Violation window system [ctrl + y] (SVN, ME) Walk to item (SVN) Magic effect displayed on air (SVN, TFS) Wildcard~ for spells with params (SVN, TFS) Bursts missing target (SVN, TFS) Drunk and Paralyze System (SVN) Creatures can move diagonally (SVN, TFS, ME) New Lua Interface (Actions, NPCs) (TFS, ME) Big Changes in Spells (TFS, ME) New Decay System (SVN, TFS) Rings and Amulets (SVN, TFS, ME) Players can summon monsters (utevo res) (SVN, TFS) Players can illusion creatures (utevo res ina) (SVN, TFS) Soul Points (SVN, TFS) Last Writer of letters (SVN, TFS, ME) Groups to database (TFS, ME) Configurabe cap system in config.lua (ME) Added new Formula of Armor/Defense (SVN, TFS, ME) Only MySQL support (ME, because sqlite not saving skills) All NPC's are working (ME) Redesigned IO model using asynchronous sockets (SVN, TFS, ME) Guild system (TFS) Weapons (TFS, ME) Players record system (TFS) Save system (TFS) Stages system (TFS) Talkactions interface (TFS, ME) Premium system (TFS) Raid system (TFS) Vocations XML (TFS, ME) AOL system (TFS) Clean system (TFS) Monsters using new AI (TFS, ME) Burst Arrows and Poison Arrows (TFS) Exiva system (TFS) Houses system (TFS) Protection system (TFS) Bug report system [ctrl + z] (TFS) Ghost system (TFS) Critical hit system (TFS) Annimations on skills, level up (TFS) Updates in config.lua (ME) Premim for promotion (TFS) AFK system (TFS) Experience to enforced system (TFS) Set default priority (TFS, only work on windows) Bless system (TFS) Database struct (TFS, ME) Highscores system (TFS, ME) Deathlist system (TFS) GUI and Console executables (TFS) Added most of monsters of protocol 7.6 (ME) Attackspeed for items in items.xml (Talaturen) Basespeed in vocations.xml (Talaturen) onLook(cid, pos) creaturescript event (Talaturen) Replaced party system with the party system from OpenTibias avesta branch (Talaturen) Global Storage values saving in database (Elf, SVN) Configurable amount (0 to disable) of houses per each account (Elf) /send command (/send player, x y z) (Elf) Ingame guild management 'switch' on config.lua (Elf) House buying and selling disabling on config.lua (Elf) Dropped LuaSQL and replaced with LuaDatabase (Elf, OpenLua-Distro) onKill(cid, target) creaturescript event (Elf) onAdvance(cid, skill, oldlevel, newlevel) creaturescript event (Elf) onThink creaturescript event for creatures (Elf) onThink and onLook events aren't fired global anymore (Elf) /squelch command to disable private messages receiving (Elf) Dropped account types and replaced it with access levels (Elf, Talaturen) Custom flags system (Elf, Talaturen) Possibility to move items from far, push not pushable items and throw items anywhere (nfries88, Elf) Configurable commands and talkactions logging (Elf) Ghost Mode [with disabled effects] (Pedro B, Elf) Cascading actions (Elf, SVN) Rewritten ban class (Elf, Talaturen, SVN) Bank system (SVN, Elf) Moved players record and motd to database (Elf) Moved CTRL + Z bug reports to database, written /reports command (Elf) OTBv3 (SVN, Talaturen, Elf) Monsters with elemental weaknesses (Marcinek Paladinek, Lithium) Marriage 'system' (Elf) Construction kits (Elf) Global events (Elf) Thing attribute changing (Kiper) onAttack creaturescript (Elf) Multiworld system (Elf) Promotion levels (Kiper, Talaturen, Elf) Larn spells (TFS) In game Highscores (ME) Spellbook working (TFS) Stairs are working (TFS, SVN, ME) All fields are working (TFS, ME) ] [ Removed Databasemanager Account Manager ] Download http://www.4shared.com/file/2FW-sGU-/server.html
    1 ponto
  22. Fozz

    Criando Labirintos

    Tutorial por: Fozz Começando: Labirintos no tibia são faiclmente encontrados, graças ao Minimap, mas uma bela forma de isso não acontecer é fazendo labirintos de portais. 1º Passo: Faça a área que seu labirinto irá ocupar: 2º Passo: Faça o corpo do seu labirinto: 3º Passo: Faça os portais, lembre-se: uma das opções leva a uma seguinte fase e todas as outras a fase anterior 4ª e última fase: Faça o Baú e configure a quest Aconselho colocar respowns. É isso ai, use a vontade! cya~
    1 ponto
  23. digo1040

    Acc E Char's

    Eai, já fiz um tópico sobre isso: Deletador De Chars Inativos
    1 ponto
  24. 141831

    System Reset

    Vá na pasta do seu OT data / talkactions / scripts , copie e cole um arquivo .lua , apague tudo que tem dentro , renomeie para "resets" , e coloque tudo isso dentro : --[[ <(Advanced Reset System 2.0)> Autor: Juniior Cwb ;*. Contato: (Juniior_Cwb@hotmail.com) Versão: 2.0 Testado em: 8.50 e 8.60 TFS: 0.3.6 and 0.4.0 -=[Características]=- ~( Versão 2.0 )~ - Resets agora Armazenados na DataBase; (Sem Valor de Storage) - Instala o System e cria a Tabela de Resets com o comando "/installreset"; - Resets no Look do jogador ex: 22:10 You see Marcello [Reset 2] (Level 8). He is an elder druid.; - [sTAGES] para "Premium Account" e "Free Account"; ]] --=[Functions]=-- -- installReset()' [instala o Sistema.] -- tableResetInstall()' [Verifica Se o Sistema ja foi instaladao.] -- nowReseting()' [Verifica, retorna o erro ou reseta.] -- getPlayerReset(cid)' [Pega numero de resets do player.] -- checLevelStageReset(cid)' [Verifica o Level para Resetar.] -- newReset(cid)' [Verifica todas as Condições de Reset.] -- addValue(value)' [Adiciona numero de resets.] --=[Comandos de Jogadores]=-- -- "/installreset" -- Só será usado uma vez, para instalar o sistema. -- "!resetar" -- Para Resetar. function onSay(cid, words, param) if words =="!resetar" then --[ Condições de Reset ] -- local coNdConf = { needPz = true, -- Precisa estar em Pz pra resetar? [true, false] needPa = false, -- Precisa ser Premium Account Pra resetar? [true, false] withe = false, -- Players com Pk Withe podem resetar? [true, false] red = true, -- Players com Pk Red pode resetar? [true, false] battle = false, -- Players precisão estar sem battle pra resetar? [true, false] teleport = false, -- Teleportar Player para o templo após resetar? [true, false] look = true, -- Aparecer Resets no Look do Player? [true, false] pid = getPlayerGUID(cid), -- Não Mexer. --[ Configurações do Reset ] -- resetConf = { Level = 350, -- Level Necessário para Resetar. [Valor] backLvl = 8, -- Level que voltará após o Reset. [Valor] time = 5, -- Tempo para o Player deslogar ao resetar, em segundos. [Valor] }, } --[[>> STAGES <<]]-- x=true;X=true -- Não Mexer. local stage = {Abilitar = {x}, Desabilitar = {}, --<< Abilitar Stages?? >>-- [{x};{}] -- [RESETS] | [PREMMY] | [FREE] stage1= {resets= 4, premmy= 330, free= 350}, stage2= {resets= 9, premmy= 340, free= 340}, -- EXPLICANDO e Configurando stages. (Se estiver Abilitado [Abilitar = {x}]) stage3= {resets= 14, premmy= 350, free= 350}, -- resets = Número de resets para o Stage; stage4= {resets= 19, premmy= 360, free= 360}, -- premmy = Level necessário para Premium Accounts; stage5= {resets= 24, premmy= 370, free= 370}, -- free = Level necessário para Free Accounts; stage6= {resets= 29, premmy= 380, free= 380}, -- Coloque em Ordem... stage7= {resets= 34, premmy= 400, free= 400}, -- [OBS: MARQUE UM "X" PARA ABILITAR OU DESABILITAR OS STAGES] stage8= {resets= 39, premmy= 420, free= 420}, -- EX: para desabilitar mude: Abilitar = {}, Desabilitar = {x} stage9= {resets= 44, premmy= 450, free= 450}, stage10={resets= 49, premmy= 500, free= 500}, } --[[>> FIM STAGES <<]]-- --=[Pega Valor de Resets]=-- function getPlayerReset(cid) local qr = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..coNdConf.pid..";") rss = qr:getDataInt("reset", coNdConf.pid) if rss < 0 then rss = 0 end return rss end local success = " ~~ Sucesso! ~~ \nVocê tem agora "..(getPlayerReset(cid)+1).." resets. \nVocê será deslogado em "..coNdConf.resetConf.time.." segundos." ;err = doPlayerSendTextMessage local qrt = db.getResult("SELECT `reset` FROM `players` WHERE `id`= "..coNdConf.pid..";");rss_db = qrt:getDataInt("reset", coNdConf.pid) local lvl_query = "UPDATE `players` SET `level` = "..(coNdConf.resetConf.backLvl)..", `experience` = 0 WHERE `id`= " .. coNdConf.pid .. ";" local reset_query = "UPDATE `players` SET `reset` = "..(getPlayerReset(cid)+(1)).." WHERE `id`= " .. coNdConf.pid .. ";" local nolook_query = "UPDATE `players` SET `description` = '' WHERE `players`.`id`= " .. coNdConf.pid .. ";" local look_query = "UPDATE `players` SET `description` = ' [Reset "..(getPlayerReset(cid)+(1)).."]' WHERE `players`.`id`= " .. coNdConf.pid .. ";" --=[Reseta]=-- function addValue(value) if coNdConf.look == false then doRemoveCreature(cid) db.executeQuery(lvl_query);db.executeQuery(reset_query);db.executeQuery(nolook_query) else doRemoveCreature(cid) db.executeQuery(lvl_query);db.executeQuery(reset_query);db.executeQuery(look_query) return LUA_NO_ERROR end end function nowReseting() if (getPlayerLevel(cid) < coNdConf.resetConf.Level) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "- Level Necessário Para o Reset ["..coNdConf.resetConf.Level.."]. Faltam "..coNdConf.resetConf.Level-getPlayerLevel(cid).." level's para você Resetar. -") return true end if getPlayerLevel(cid) >= coNdConf.resetConf.Level and (coNdConf.teleport == false) then doPlayerPopupFYI(cid, success) addEvent(addValue, coNdConf.resetConf.time*1000, value) else doPlayerPopupFYI(cid, success) addEvent(doTeleportThing, coNdConf.resetConf.time*900, cid, getTownTemplePosition(getPlayerTown(cid))) addEvent(addValue, coNdConf.resetConf.time*1000, value) return true end end --[sTAGES Nao mexer em nada.]-- function checkLevelStageReset(cid) local stages = { {resets= stage.stage1.resets, premmy= stage.stage1.premmy, free= stage.stage1.free}, {resets= stage.stage2.resets, premmy= stage.stage2.premmy, free= stage.stage2.free}, {resets= stage.stage3.resets, premmy= stage.stage3.premmy, free= stage.stage3.free}, {resets= stage.stage4.resets, premmy= stage.stage4.premmy, free= stage.stage4.free}, {resets= stage.stage5.resets, premmy= stage.stage5.premmy, free= stage.stage5.free}, {resets= stage.stage6.resets, premmy= stage.stage6.premmy, free= stage.stage6.free}, {resets= stage.stage7.resets, premmy= stage.stage7.premmy, free= stage.stage7.free}, {resets= stage.stage8.resets, premmy= stage.stage8.premmy, free= stage.stage8.free}, {resets= stage.stage9.resets, premmy= stage.stage9.premmy, free= stage.stage9.free}, {resets=stage.stage10.resets, premmy=stage.stage10.premmy, free=stage.stage10.free}, } local resets = getPlayerReset(cid) for i, tab in ipairs(stages) do if resets <= tab.resets then coNdConf.resetConf.Level = isPremium(cid) and tab.premmy or tab.free break end end if (getPlayerLevel(cid) < coNdConf.resetConf.Level) then err(cid, MESSAGE_STATUS_CONSOLE_BLUE, "- Level Necessário Para o Reset ["..coNdConf.resetConf.Level.."]. Faltam "..coNdConf.resetConf.Level-getPlayerLevel(cid).." level's para você Resetar. -") return TRUE end if getPlayerLevel(cid) >= coNdConf.resetConf.Level and (coNdConf.teleport == false) then doPlayerPopupFYI(cid, success) addEvent(addValue, coNdConf.resetConf.time*1000, value) else doPlayerPopupFYI(cid, success) addEvent(addValue, coNdConf.resetConf.time*1000, value) addEvent(doTeleportThing, coNdConf.resetConf.time*900, cid, getTownTemplePosition(getPlayerTown(cid))) return true end end function newReset(cid) if(coNdConf.needPz == true) and (getTilePzInfo(getCreaturePosition(cid)) == LUA_ERROR) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa estar em Protection Zone Para Resetar. -") return TRUE end if(coNdConf.needPa == true) and not isPremium(cid) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa ser Premium Account para Resetar. -") return TRUE end if(coNdConf.withe == false) and (getCreatureSkullType(cid) == 3) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você não pode resetar em condições de PK Withe. -") return TRUE end if(coNdConf.red == false) and (getCreatureSkullType(cid) == 4) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você não pode resetar em condições de PK Red. -") return TRUE end if(coNdConf.battle == true) and (getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE) then err(cid,MESSAGE_STATUS_CONSOLE_BLUE,"- Você Precisa estar sem Battle para Resetar. -") return TRUE end local xy = {true,false} table.insert(stage.Abilitar, false) table.insert(stage.Desabilitar, false) if stage.Abilitar[1] == xy[1] and stage.Desabilitar[1] == xy[2] then checkLevelStageReset(cid) elseif stage.Abilitar[1] == xy[2] and stage.Desabilitar[1] == xy[1] then nowReseting() else doPlayerPopupFYI(cid, "LUA_ERROR; Configure corretamente o Sistema de STAGES!") end return true end function tableResetInstall() print(not rss_db and LUA_ERROR or "Tabela de Resets: Instalada ... [success] ") addEvent(newReset, 1000, cid) return false end if tableResetInstall() then end end --=[install System]=-- function installReset() if db.executeQuery("ALTER TABLE `players` ADD reset INT(11) NOT NULL DEFAULT 0;") then print("[MarcelloMkez] -= Advanced Reset System 2.0 por DataBase =- Instalado com sucesso!") return TRUE end print('[Advanced Reset System/MarcelloMkez] Não foi possível instalar o Sistema.') return FALSE end local tt = { "Preparando Instalação...", "Instalando: TableReset Db...", "Instalando: getPlayerReset()...", "Instalando: addValue()...", "Instalando: checkLevelStageReset()...", "Instalando: newReset() and nowReseting()...", "Finalizando Instalação...", "...", success = { "Iniciando...", "function: TableReset Db... [success]", "function: getPlayerReset()... [success]", "function: addValue(value)... [success]", "function: checkLevelStageReset()... [success]", "function: newReset() and nowReseting()... [success]", "Fim da Instalação. ", "by: ~~ MarcelloMkez ~~ \nContato: marcello_dirt@hotmail.com", inst = {"MarcelloMkez","Advanced Reset System 2.0 por DataBase" }, }, } if words == "/installreset" and getPlayerAccess(cid) >= 3 then function install() if installReset() then print(""..tt.success[7].."") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,""..tt.success[8].."") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "["..tt.success.inst[1].."] -="..tt.success.inst[2].."=- Instalado com sucesso!") else print("["..tt.success.inst[1].."] FALHA NA INSTALAÇÃO! [O sistema ja foi instalado].") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "["..tt.success.inst[1].."] FALHA NA INSTALAÇÃO! [O sistema ja foi instalado].") end return 1 end function concl(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[7].."") print(""..tt[8].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[7].."") doPlayerSendTextMessage(cid, typetx,""..tt[8].."") addEvent(install, 1000,cid) end function finall(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[6].."") print(""..tt[7].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[6].."") doPlayerSendTextMessage(cid, typetx,""..tt[7].."") addEvent(concl, 3000,cid) end function installDd(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[5].."") print(""..tt[6].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[5].."") doPlayerSendTextMessage(cid, typetx,""..tt[6].."") addEvent(finall, 1000,cid) end function installCc(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[4].."") print(""..tt[5].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[4].."") doPlayerSendTextMessage(cid, typetx,""..tt[5].."") addEvent(installDd, 1000,cid) end function installBb(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[3].."") print(""..tt[4].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[3].."") doPlayerSendTextMessage(cid, typetx,""..tt[4].."") addEvent(installCc, 1000,cid) end function installAa(cid) local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[2].."") print(""..tt[3].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[2].."") doPlayerSendTextMessage(cid, typetx,""..tt[3].."") addEvent(installBb, 1000,cid) end function toInstall() local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt.success[1].."") print(""..tt[2].."") doPlayerSendTextMessage(cid, typetx,""..tt.success[1].."") doPlayerSendTextMessage(cid, typetx,""..tt[2].."") addEvent(installAa, 1000,cid) end function preparation() local typetx = MESSAGE_STATUS_CONSOLE_BLUE print(""..tt[1].."") doPlayerSendTextMessage(cid, typetx,""..tt[1].."") addEvent(toInstall, 3000,cid) end if preparation() then end end return 1 end --=[by: Juniior Cwb ;* ]=-- Agora vá em talkactions.xml e adicione a seguinte linha em players : <talkaction words="!resetar" event="script" value="resets.lua"/> <talkaction words="/installreset" event="script" value="resets.lua"/> E para instalar o sistema é só falar IN-GAME : /installreset . Flws .
    1 ponto
  25. rrobinho

    Spiderhunt

    I ae , blz ? então mais um map meu ae espero que gostem quem gostar dá +rep ae . SS: ------ DOWNLOAD SCAN
    1 ponto
  26. fagundes14

    Ajuda Plis

    Queria Que O Script De Bless Feito Por " fireelement " Foce Compativel Com O Meu WoDBO Ele É 8.0 O Script e Esse ++ Rep Pra Quem Me Ajudar =D
    1 ponto
  27. 5672683

    Minha Primeira City

    Estou Trabalhando nisso! mas é que eu gosto muito de depot no templo,por isso fiz,maa os npc's ja estou dando uma melhorada! vlw galera :smile_positivo:
    1 ponto
  28. Leonard02

    Templo Original By Leo

    Fiz meio correndo aqui mas eu acho q ta bom para um inicio
    1 ponto
  29. Obrigado a voces
    1 ponto
  30. Vodkart

    Script = Outfits Por Vocations

    ae achei um jeito mto simples uma storage,vou mostrar. em creaturescript/script Vocation_Outfit.lua --[[ By Vodkart ]]-- local config={ {outfit={138,130,140,132},voc={1,5},storage=40850}, -- sorcerer {outfit={148,144,149,145},voc={2,6},storage=40851}, -- druids {outfit={156,152,150,146},voc={3,7},storage=40852}, -- paladinos {outfit={139,131,137,129},voc={4,8},storage=40853} -- knight } function onLogin(cid) for a =1,#config do if isInArray(config[a].voc, getPlayerVocation(cid)) and getPlayerStorageValue(cid, config[a].storage) == -1 then setPlayerStorageValue(cid, config[a].storage, 1) for i = 1, #config[a].outfit do doPlayerAddOutfit(cid, config[a].outfit[i], 3) end break end end return TRUE end em creraturescript.xml <event type="login" name="Out" script="Vocation_Outfit.lua"/> explicação: outfit={148,144,149,145} 148 Druid addon female 144 Druid addon male 149 Wizard addon female 145 Wizard addon male só ir adicionando o addon male e female que vão ganhar... agora em Outfits.xml sabendo que as storage 40850 é pra sorcerer 40851 é pra druid 40852 é pra paladino 40853 é pra knight vc vai colocar assim nas outfits que vc adicono: quest="NOME DA STORAGE" exemplo do meu script: <outfit id="3" quest="40850"> <list gender="0" lookType="138" name="Mage"/> <list gender="1" lookType="130" name="Mage"/> </outfit> <outfit id="5" premium="yes" quest="40850"> <list gender="0" lookType="140" name="Noblewoman"/> <list gender="1" lookType="132" name="Nobleman"/> </outfit> <outfit id="9" premium="yes" quest="40851"> <list gender="0" lookType="148" name="Druid"/> <list gender="1" lookType="144" name="Druid"/> </outfit> <outfit id="10" premium="yes" quest="40851"> <list gender="0" lookType="149" name="Wizard"/> <list gender="1" lookType="145" name="Wizard"/> </outfit> <outfit id="13" premium="yes" default="0" quest="40852"> <list gender="0" lookType="156" name="Assassin"/> <list gender="1" lookType="152" name="Assassin"/> </outfit> <outfit id="11" premium="yes" quest="40852"> <list gender="0" lookType="150" name="Oriental"/> <list gender="1" lookType="146" name="Oriental"/> </outfit> <outfit id="4" quest="40853"> <list gender="0" lookType="139" name="Knight"/> <list gender="1" lookType="131" name="Knight"/> </outfit> <outfit id="2" quest="40853"> <list gender="0" lookType="137" name="Hunter"/> <list gender="1" lookType="129" name="Hunter"/> </outfit> entenderam?
    1 ponto
  31. -1 pontos
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...