Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 07/24/10 em todas áreas
-
Mudar Versão Do Otserv
Uchiha Itach1 e 2 outros reagiu a luisfe23 por um tópico no fórum
Eae XTibianos, muitas pessoas me perguntam como mudar a versão do OTserv, por exemplo de 8.50 para 8.54, então estou trazendo esse tutorial. • Entendendo as versões Praticamente toda a configuração feita sobre a versão é feita nas source, que quando compilada se transforma em um “.exe” , portanto para mudar a versão devemos mudar o executável “.exe”. Existe algumas “regras” que devemos seguir para que não ocorra erro nesta transição, uam delas é que você deve usar a “evolução” de seu servidor exemplo, Você usa TFS 0.3.4 para mudar deve usar 0.3.6. • Entendendo mudança na pasta data O motivo de usarmos um executável do mesmo modelo do anterior é que cada tipo de servidor interpreta a pasta data de uma maneira ou seja uma pasta data de um TFS 0.2.6 tem diferença de uma pasta data 0.2.7, tanto em scripts quanto nos xmls, para evitar erros usamos a pasta data do servidor mais atualizado e apenas modificamos scripts e configurações necessárias, que o servidor atualizado não tem, um bom exemplo são sistemas exclusivos (forja), ou arquivos de biblioteca (data/lib). • Pasta items Esta é uma pasta importante e merece exclusividade na hora de explicar, a pasta items contem informações sobre os items, ou seja se você quer mesmo atualizar seu servidor usar os novos itens você vai ter de usar a pasta items do servidor atualizado, caso tenha itens editados terá que editar novamente, amenos que queria adicionar os itens novos manualmente na pasta antiga. • Config.lua Peça fundamental para montar um servidor a config.lua não pode ficar de fora, com a ”evolução” do servidor normalmente a config.lua sofre modificações, assim se você quiser ter seu servidor “configurado” você devera utilizar a config.lua do servidor atualizado assim como a pasta items. • Data Base Em alguns servidores, TFS por exemplo, atualizam o database automaticamente caso a versão deste seja diferente da atual, portanto se você esta mudando a versão de um “TFS da vida” não terá problemas com database, caso tenha devera mudar as tabelas e colunas manualmente. • Mão na Massa Agora que você já entendeu alguns itens importantes na hora de mudar a versão, podemos aprender como mudá-la. Primeiro você deve descobrir a versão e o “nome” do seu servidor para isso clicamos com o botão direito do mouse no executável (.exe) , e ir em propriedades. Ira abrir uma janela de propriedades onde você deve ir na aba detalhes. Na linha descrição do arquivo podemos descobrir o nome do distro, na linha Versão do arquivo podemos ver a versão no meu caso 0.3.5. Como eu estou usando um servidor 8.50 (0.3.5) eu vou atualizar meu servidor para 8.54 (0.3.6), para isso devemos fazer o download do executavel: http://www.xtibia.com/forum/topic/125013-854-the-forgotten-server-036pl1-crying-damson/ Agora para facilitar e evitar erros usaremos a pasta atualizada, no meu caso do TFS 0.3.6, como base. • Mapa Para evitar erros de “incompatibilidade” mudaremos a versão do mapa utilizando este tutorial: http://www.xtibia.com/forum/topic/122394-mudar-a-versao-do-mapa/ Perfeito agora com o mapa na versão atualizada do seu ot basta colocá-lo na pasta World, tanto os arquivos xmls quanto o otbm. • Scripts Caso você tenha alguns scripts próprios ou scripts que não existem na pasta data base do ot, você deve mudar apenas esses e adicionar linha a linha no arquivo XML. • NPC Na maioria das vezes não existe modificações de grande nível nos npcs, portanto você não terá nenhum problema em copiar e colar a pasta npcs. • XML Esta pasta não sofre modificações constantes porem algumas pode ser de grande porte e influenciar no andamento do servidor, portanto recomendo reconfigurar o servidor. • Lib Esta é uma pasta de extrema importância nos sistemas do servidor caso tenha algo modificado nela terá que reconfigurar na pasta lib nova. • Itens Como falei posteriormente a pasta itens é importante caso queira um servidor realmente atualizado, portanto se você tem itens editados você vai ter que editá-los novamente. • Config.lua Para evitar erros de configuração recomendo que use a config.lua do novo servidor assim configurando novamente. Assim chegamos ao fim deste tutorial gostaria de lembrar que não é nessesario fazer muitas coisas que falei neste tutorial porem falei para evitar um erro fatal em seu servidor por conta da incompatibilidade. Tutorial feito por : _LG • Créditos • _LG • Henrique Moura • alissow • TFS • luisfe233 pontos -
Desculpe pelo erro, já concertei... http://uploaddeimagens.com.br/imagem/ver/4135anigif.gif Abraços. PS: Fiz o upload no Clique aqui pois o ImagesHack, estava com probleminha...2 pontos
-
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: Vodkart1 ponto
-
[Action] Mount System 1.4 - 100% Inovador!
PamelaCarioka reagiu a Doidin por um tópico no fórum
Mount System - 100% inovador! Fala galerinha, é mais uma vez eu trazendo Scripts para o pessoal do XTibia, dessa vez eu dei uma "inovadinha" no script e fiz um vídeo explicando sobre ele, confira! Vídeo sobre o sistema: http://www.youtube.com/watch?v=xpyI4FtY7dM Bom vamos logo ao script: Primeiramente vamos fazer uma pequena alteração no arquivo items.xml, abra-o e procure por "giant eye", mude esse nome para "mysterious pet", assim: <item id="11191" name="mysterious pet"><attribute key="weight" value="120" /></item> Agora vamos adicionar as actions, vá até a pasta "Actions" e abra o arquivo "Actions.xml" e adicione esta tag: <action itemid="11191" event="script" value="mount.lua"/> Ok, agora volte a pasta "Actions" e abra a pasta "Scripts", faça uma arquivo chamado "mount.lua" e adicione isto: -- [( Mount System 1.4 created by Doidin for XTibia.com )] --function onUse(cid, item)local outfit = {lookType = 342} -- Outfit da montaria!local exhaust = 60 -- Tempo para player poder usar o item novamente! (tempo em segundos)local time = 60 -- Tempo para ficar na montaria! (tempo em segundos)local speed = 300 -- Velocidade adicionada ao player após usar o item! (300 = velocidade, quanto maior mais rapido...)local mana = 1300 -- Quantidade de mana que o player necessita para usar o sistema!local premium = "yes" -- Apenas players premium accounts "yes" or "no"!?local storage = 9393 -- Não mexa aqui!if premium == "yes" and not isPremium(cid) thenreturn doPlayerSendTextMessage(cid, 23, "Sorry, only premium players.")endif(getCreatureMana(cid) < mana) thenreturn doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)endif (getPlayerStorageValue(cid, storage) <= os.time()) thendoCreatureSay(cid, "Yeeeah!!!\nYou went up on his ride.", 19)doSetCreatureOutfit(cid, outfit, time*1000)doChangeSpeed(cid, speed)doSendMagicEffect(getCreaturePosition(cid), 34)setPlayerStorageValue(cid, storage, os.time()+exhaust)doPlayerAddMana(cid, -mana)addEvent(doChangeSpeed, time*1000+40, cid, -speed)addEvent(doPlayerSendTextMessage, time*1000+45, cid, 23, "Mount System is time out!")addEvent(doSendMagicEffect, time*1000+50, getCreaturePosition(cid), 2)doRemoveItem(item.uid, 1)elsedoPlayerSendCancel(cid, "Sorry, you only can again use this item after "..exhaust.." seconds.")endreturn TRUEend Pronto agora configure o script da maneira que você quiser! Caso queira mudar a outfit da sua montaria clique aqui e saiba mais. OBS: A inteção do script é algum NPC te vender um item que no caso é o "mysterious pet" e esse item é super raríssimo, ele tem a função de te dar um "PET" misterioso por um certo tempo para você usar ele como montaria! Aaah só pra constatar eu tive uma pequena ajuda dos meus amigos MatheusMkalo e do Vodkart.. ;] Espero que tenham gostado do script e do vídeo! ;] <* Não poste em outros fórums, exclusivo ao XTibia.com *>1 ponto -
Quick-List Oque é uma quick-list ? R- é uma lista com os melhores tópicos da area em um só. Download OTServers 8.62 The Crystal Server V0.2.0 Sleeper Map 0.6 Download OTServers 8.61 We Do Server 0.1.2 Download OTServers 8.6 Mix Yourots 1.0.0 Alissow Ots 4.11 [11/07/2010] 8.6 Completo! Snowz Thyrania 3.1 The Forgotten Server (Crying Damson) Real Server 3.2 The Subwat® Riot Server Baiak Yurots Download Utilitários 8.6 até 8.62 Tibia Client 8.6 Comedinha IPChanger Tirus Ip-Changer Asprate's Multi Ip Changer atenção: apenas tópicos e ots confiantes estarei postando, NENHUM servidor que eu postar aqui na lista, tera virus, portanto, não adianta vir falando: tem virus em tal ot, porque eu passo scan em todos e revejo. ao longo do tempo. iremos adicionando mais downloads...até!1 ponto
-
[Arquivado]Sumário Dos Tutoriais
Roksas reagiu a Izaiasousa por um tópico no fórum
Sumário Bem, Aqui eu trouxe os Links em ordem para que vocês possam ver parte por parte para um bom aprendizado 1. Funções dos scripts de Lua #1 - Introdução: http://www.xtibia.co...es-de-lua-%231/ Pequeno tutorial de introdução a linguagem, para que vocês não fiquem perdidos quando avançarmos mais. 2. Funções dos scripts de Lua #2 - Estudando mais sobre o onUse e Do : http://www.xtibia.co...funcoes-de-lua/ Dá uma lista com as mais importantes sintaxes usadas com o Do e explicando a função de cada uma. 3. Funções dos scripts de Lua#3 - Estudando mais sobre a funçao do GET : http://www.xtibia.co...73entry894473 Lista com as sintaxes de Get, explicando como e onde usar essas sintaxes. 4. Funções dos scripts de Lua #4 - Conhecendo o IS: http://www.xtibia.co...ts-de-lua-%234/ Aprendendo mais como e onde usar o Is. Entendendo o uso do Is. 5. Funções dos scripts de Lua #5 - Conhecendo o onSay: http://www.xtibia.co...ts-de-lua-%235/ Uma breve introdução a Talkaction e como e onde usar onSay. 6. Funções dos scripts de Lua #6 - Botando em prática o que aprendemos. http://www.xtibia.co...ts-de-lua-%236/ Exemplos de como fazer seu primeiro script. Explicando parte por parte do que aprendemos até agora usando nossas funções -- onUse e onSay. Scripts facéis e úteis. 7. Funções dos scripts de Lua #7 - Entendendo o quê é Storage Value e sua aplicação. http://www.xtibia.com/forum/topic/135586-funcoes-dos-scripts-de-lua-%237/ O que é Storage Value ? 8. Exerícios para que você possa botar no "papel" o seu racíocinio. http://www.xtibia.com/forum/topic/135593-exercicios-sobre-as-funcoes-dos-scripts-de-lua/ Exercicios que precisam das funções que estudamos, vão lhe ajudar a botar sua "lógica de programação" no papel. Para alguns, não estou obrigando ninguém a fazer os exercícios. Serão adicionadas mais ao longo do tempo.1 ponto -
Olá XTibianos, Resolvir criar uma magia para Knights. Agora vamos aos Scripts: Vá na pasta data/spells/attack, copie qualquer arquivo, cole e renomei-o para "redspark" (sem aspas), abra-o e cole isso: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA_RED) setCombatParam(combat, COMBAT_PARAM_USECHARGES, TRUE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 0.6, -200, 1.2, -190) local area = createCombatArea(AREA_SQUARE1X1) setCombatArea(combat, area) local condition = createConditionObject(CONDITION_PHYSICAL) setConditionParam(condition, CONDITION_PARAM_DELAYED, 1) addDamageCondition(condition, 1000, 10, -1000) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Agora abra a pasta data\spells e abra o arquivo "spells.XML", em "instant spells" adicione o seguinte codigo: <instant name="Red Spark" words="exori bleed" lvl="200" mana="460" prem="1" exhaustion="1500" needlearn="0" script="attack/redspark.lua"> <vocation name="knight"/> <vocation name="Elite knight"/> </instant> Pronto, agora você tem aquela magia simples e que todo OT gostaria de ter. Até a próxima, fiquem com Deus. Magia 100% by Miter1 ponto
-
Kreuus Otserv V 1.0 SEM DEBUGS Nova versão ;D Mapa propio Criado por mim! KreuusOT@hotmail.com Meadiciona.com/kreuus Gostou? entre na comunidade! do Sv Canal youtube! Entre e aprenda jogar no mapa Informações Versão V 0.10 19/02/2010 Versão V 0.20 02/03/2010 Versão V 1.00 09/07/2010 Account do ADM 56/56 ScreenShots do Mapa As imagens demoram para caregar pois a qualidade e impecavel Update V 0.20 Mini-mapa Update outifit e potions! Download do Kreuus V 1.0 4 shared ;D Clique ake! Scan Livre de virus! Link akee. Link pra baixa o remeres aqui! -> Aqui! <- Creditos AdminKreuus LeozeraRox Shynzo Fezzin Comedinhasss Anti-nuker • Ele e ativado sempre quando o ot esta online • Não precisa mexe e automatico! • Thanks comedinhas ;D Bom pessoal postem oque acham, e se achar bug reporte para um de meus contatos ou aqui em baixo! Videos! http://www.youtube.com/watch?v=1PzNMstCPek http://www.youtube.com/watch?v=EyFd4-OiGSQ + Pits of Inferno Link. Rep +1 ponto
-
Surgir Teleport Apos Morte De Um Montro Com [Tempo] + Lord Of The Dragons + Magia Exori Water
Vitinhowcq reagiu a ElitePally por um tópico no fórum
Hola xTibianos, venho aqui apresentar 3 scripts, Teleport Monster[Com Tempo para desaparçer tp] + Lord of the Dragons + Exori Water Script: Teleport Monster Eu sei que tinha muitas pessoas com o problema , que o teleport não desaparecia então arrumei! Vamos!!! vá em data\creaturescripts\creaturescripts.xml ADICIONE: Depois disso vá em data\creaturescripts\scripts e crie um arquivo com o nome tpmonster.lua. e adicione isto: Explicação: Quer adicionar mais bosses? Adicione + 1 tag embaixo da tag dos bosses que está aqui Aqui x = 604, y = 586, z = 9 é a cordenada onde o teleporte te levará, edite os números delas. Apos terminar adicione esta tag no seu monstro desejado: Créditos, eu mesmo e Autor do Snowz , mais tirei de um ot Snowz Thyranic 8.6 , mais estava bugado na hora de remover o teleporte, daí arrumei para desapareçer,sei que algumas pessoas estavam com o problema Agora o monstro Lord of The Dragons data\monster\monsters.xml e adicione: depois disso vá em data\monster - e crie um arquivo com o nome lordragon.xml. e coloque dentro: Edite os hits dos ataques, caso não goste, e exp. Créditos: Eu mesmo. Agora a magia "Exori Water" Vá em \data\spells\spells.xml e adicione : para versão 8.52+ não tenho certeza e se a versão for 8.5 agora vá em \data\spells\scripts\attack e crie um arquivo com o nome water strike.lua e adicione: CréditosMeu mesmo Coments !!! até mais TE AJUDEI? REP +++1 ponto -
Saudações XTibianos! Enfim, após um longo período sem novidades e por falta de pedidos, venho hoje trazer duas novas Extensions (extenções) para o seu RME. É o piso bege "Pavement", e aquele "Wooden Floor" mais claro. Lembrando que o autoborder de ambos só fica aparecendo em cima de certos pisos, como o apresentado na figura abaixo. Mesmo com o autoborder desativado, a extension do Pavement é muito útil pois com ela o piso fica aleatório ao configurar, e não é mais preciso colocar piso por piso para diferenciar. [EXT] Beige Pavement / "New" Wooden Floor Começando... Em Meu Computador (no caso o seu), vá em C:\...\Remere's Map Editor\data\(versão). Lá você utilizará três arquivos: "tilesets", "grounds" e "borders", então vamos por partes. OBS: Para facilitar a "abertura" do arquivo clique com o botão direito, vá em "Abrir com", e selecione o programa desejado, o Bloco de Notas, que é o mais simples e o mais comum. Você encontrará algo parecido com isso: tilesets.xml <materials> <!-- TILESETS --> <tileset name="Grounds"> <raw> Pressione Control + F e procure por Town, que é o local onde você verá os dois "tiles" em seu RME. Sugiro completar da seguinte maneira: <tileset name="Town"> <terrain> <brush name="stone floor"/> <brush name="cobblestone"/> <brush name="dark cobblestone"/> <brush name="beige pavement"/> ********** <brush name="ugly cobblestone"/> <brush name="grassy cobblestone"/> <brush name="lawn"/> <brush name="wooden floor"/> <brush name="wooden floor (with border)"/> <brush name="new wooden floor"/> ********** <brush name="pavement"/> ********** Adicionar estas linhas Assim fica próximo aos outros pisos semelhantes, consequentemente mais fácil de se lembrar deles. Após preencher as linhas acima, salve e feche o arquivo tilesets.xml. grounds.xml Abra o arquivo grounds.xml com o Bloco de Notas e, logo no fim, depois de qualquer: </brush> E antes da última linha, que contém: </materials> Adicione as seguintes linhas: <brush name="new wooden floor" type="ground" server_lookid="458" z-order="110"> <item id="458" chance="1"/> <border id="998" align="outer"/> <border id="998" to="none" align="outer"/> </brush> <brush name="beige pavement" type="ground" server_lookid="10398" z-order="1610"> <item id="10398" chance="1000"/> <item id="10399" chance="1000"/> <item id="10400" chance="1000"/> <item id="10401" chance="1000"/> <item id="10402" chance="1000"/> <item id="10403" chance="1000"/> <item id="10404" chance="1000"/> <border align="outer" id="997"/> </brush> Salve o arquivo e feche. borders.xml Para finalizar, adicione após qualquer </border> as seguintes linhas (se preferir, faça no final para ficar mais fácil de alterá-las [e encontrá-las] caso necessário futuramente). <border id="998"> -- new wooden floor (by koddy) -- <borderitem edge="n" item="10406"/> <borderitem edge="w" item="10408"/> <borderitem edge="s" item="10405"/> <borderitem edge="e" item="10407"/> <borderitem edge="cnw" item="10415"/> <borderitem edge="cne" item="10416"/> <borderitem edge="csw" item="10414"/> <borderitem edge="cse" item="10413"/> <borderitem edge="dnw" item="10411"/> <borderitem edge="dne" item="10412"/> <borderitem edge="dsw" item="10410"/> <borderitem edge="dse" item="10409"/> </border> <border id="997"> -- beige pavement (by koddy) -- <borderitem edge="n" item="10418"/> <borderitem edge="e" item="10419"/> <borderitem edge="s" item="10417"/> <borderitem edge="w" item="10420"/> <borderitem edge="cnw" item="10427"/> <borderitem edge="cne" item="10428"/> <borderitem edge="csw" item="10426"/> <borderitem edge="cse" item="10425"/> <borderitem edge="dnw" item="10423"/> <borderitem edge="dne" item="10424"/> <borderitem edge="dsw" item="10422"/> <borderitem edge="dse" item="10421"/> </border> Agora é só salvar, fechar o arquivo e finalmente abrir seu RME para testar. Você poderá encontrar os atalhos em "Terrain Palette", na 'sub-sessão' "Town", assim como ilustra a imagem abaixo. É isso aí, espero que tenham gostado e peço que continue acompanhando os próximos Tutoriais de Mapping. Não esqueça de pedir o seu! Abraços, Koddy EDIT: Créditos adicionados.1 ponto
-
Como o Gean Riot falou acima estou completamente ao lado dele pois tenho certeza que voce nao pediu ele para postar seu trabalho emcima do servidor dele. Gean Riot procure saber de outros forums pois ele pode ter postado tambem em outros forums. Obrigado :biggrin:1 ponto
-
você não foi autorizado a editar meu servidor e depois postar aki. tópico reportado. Sem permissão e alem do mais edição mal feita.1 ponto
-
[Pedido] Spell De Paralize
benibarreto2 reagiu a Foxkbt por um tópico no fórum
criar uma nova classe da um trabalho do cão criar armas criar magias criar itens modificar movements modificar quests ki dão premios por vocations e muita coisa mas... se quiser aprender a fazer vai na pasta xml e abre vocations la vc edita magia!!! esqueci de por o effeito ki vc pedio XD maus o paralyze deve tar fraco local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_WEAPONTYPE) setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_STUN) function onGetFormulaValues(cid, level, skill, attack, factor) local skillTotal, levelTotal = skill + attack ,level/5 return -(skillTotal * 1.0 + levelTotal), -(skillTotal * 2.0 + levelTotal) end setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues") local condition = createConditionObject(CONDITION_PARALYZE) setConditionParam(condition, CONDITION_PARAM_TICKS, 20000) setConditionFormula(condition, -3.0, 0, -3.0, 0) setCombatCondition(combat, condition) function onCastSpell(cid, var) return doCombat(cid, combat, var) end fica paralyze 20 segundos1 ponto -
Magia De Transformação
Nivaldin reagiu a paodequeijobh por um tópico no fórum
Nao consegui ficar longe do XTibia...(nem do tibia)hahaha! E voltei postando essa magia que eu retirei da ideia da runa de Polymorth...e ela eh assim: A pessoa usa a magia e num raio estilo a da exevo gran mas vis atinge os players transformando-os em monstros! Testado em OT 8.1 Na pasta Spells,copie e cole um arquivo qualquer e renomeie para vira monstro.lua No arquivo cole: E depois vá em spells.xml e coloque essa tag OBSERVAÇÃO: addOutfitCondition(condition, 0, 231, 0, 0, 0, 0) onde ta escrito o 231 significa o look type do monstro e os 4 0 representam head,body,legs e feet respectivamente! Espero que tenham gostado dessa magia, que é simples mas divertida! xD1 ponto -
cara tu falo que teu ot , nao tem o Global Functions , nem a pasta Functions né? vai em Data>Lib>Functions.lua ve se tem esta pasta , se nao tiver crie e coloque isto dentro!! Tente Isto! Por acaso Se Der Este Erro ! Adicione Isto na Pasta Functions.lua e isso Depois disso Voce foi em Actions.xml Adiciono Isso! <action itemid="xxxx" script="pokeball.lua" allowfaruse="1" blockwalls="1" /> e em Actions>Scripts crio uma pasta chamada pokeball.lua o .lua é o tipo da pasta e coloco isso tente isso denovo aqui em cima , se der erro poste aqui1 ponto
-
[8.60] War On Rookgaard 2 Team
darkanderson reagiu a Toridox4ever por um tópico no fórum
não está mais com esse erro, pode baixa se tiver dando esse erro é alguma coisa no seu pc...1 ponto -
Qual O Map Mais Jogado
marcelo1025 reagiu a Fodastico1025 por um tópico no fórum
O post ta no local erado mas tudo bem eu crei que seja os Alissow e Global Zao pois os caras quando fazen esse tipo de map e pra joga serio e tem gent que gosta disso e gosto de Yourots e Subwat mas tem gosto p tudo1 ponto -
Não tem os nomes ainda no servidor, só tem por ids.1 ponto
-
[8.60] War On Rookgaard 2 Team
xkrauzer reagiu a HeartBreak por um tópico no fórum
o distro e as dll são essenciais !1 ponto -
Olá Galeria, vou ensinar a vocês como colocar o VIP STATUS, no seu GESIOR . RETIRADO: OTLAND CRÉDITOS: ballack13 Primeiro passo, vá para Charachter.php na primeira linha RETIRE " </TABLE>; " PARA FICAR ASSIM MUDE A STORAGE NUMBER , E FAÇA IGUAL ABAIXO ! $quests = array('VIP Account Status:' => 5009,); Feito isso seu SITE, estará com o VIP STATUS pronto para uso . Atenciosamente Tairone1 ponto
-
O Acc Manager Nao Da Logout
johnnyewert reagiu a tyuahoi por um tópico no fórum
o que aparece quando vai dar logout? verefique c no mapa editor a area nao esta como 'no logout'.1 ponto -
Simplismente perfeito! Muito bom mesmo cara... REP+ abraços.1 ponto