Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 07/28/12 em todas áreas
-
[Pokemon] PDA By Slicer Pokemon dash advanced editado por slicer, vários bugs retidos. Projeto encerrado! Espero que todos tenham gostado desse 1 ano de trabalho duro! Todas as atualizações: * Leiam e sigam as instruções do Change Log dentro da pasta do patch! Downlaods: PDA By Slicer With Level System v2.9 Full -> http://www.mediafire...z2afuu75zblvmvq PDA By Slicer Without Level System v1.9 Full -> http://www.mediafire...td0l0ip9ajprrbf OTClient editado 2.8/1.8 => http://www.mediafire...1lcbs1fktpm676w Atualizações: EH OBRIGATORIO O USO DESSE CLIENT ABAIXO E USEM O .PIC TB!!!!!!!!! Client v1.9/2.9 => http://www.mediafire...77i414v1hy187fj Patch v1.9 => http://www.mediafire...da4umj3ip18jrf1 Patch v2.9 => http://www.mediafire...7nt275td9afl1fy Patch v1.9.1 => http://www.mediafire.com/?i3flwa3lrd016zl Patch v2.9.1 => http://www.mediafire.com/?m4zhjgn62uow1sp Obs: Atualizaçoes mais antigas estao dentro do spoiler acima!! OTAL.DLL: OBS: caso n esteja aparecendo a barra de moves no client normal do tibia, baixem essa .dll e coloquem na pasta onde fica o Pokemon_nibe.exe ... Otal.rar Patch Correçao! Todos olhem! Bugs na nova atualizaçao? Olhe o spoiler e veja se arruma o problema! Atualizado: 08/02/13 Créditos: Otal.rar2 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
-
[Gta Tibia] Grand Thef Auto Machine
MasterSorcererF3 reagiu a DangerSoft por um tópico no fórum
Má sorte á vc, que seu servidor vire um lixo DOUBLE POST UHUUUUUUUUUU1 ponto -
[Encerrado] [Pokemon] Dúvidas? - Pda
JulynaMiiy reagiu a StyloMaldoso por um tópico no fórum
@All.. Só para ajudar o povo ai.. criei golden arena (70% Igual do PxG, Eu acho) e irei postar .-. link. Se ajudei? rep + '-'1 ponto -
@ZerefShirou @Yaldabaoth aki ta aumentado o atk e def dos pokes lutador/normal n mexese em nd n? @Maguito clan da def sim heim... ;x roar - arrumado! @PkNfan troquei a bagaça dessa function toda --' tinha varias brechas kkk mas achu q agora ta tudo certo.. ;x ACHU @ZeSy script arrumado e "otimizado" @Pokemonultimatetwo podes fazer +/- assim se quiser.. e dai fazer outro npc pra cada clan com as missoes.. sei la.. ;p @bizao030188 q bug de parar emcima da parede?1 ponto
-
function onUse(cid, item, pos) local days = 1 vip.addVipByAccount(getPlayerAccount(cid) ,vip.getDays(days)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Foram adicionados "..tonumber(days).." dias de vip na sua account.") doRemoveItem(item.uid, 1) return true end1 ponto
-
tenho q ver as imagens os sistemas tals como vai ser1 ponto
-
http:// forums. ot serv. com. br/showthread.php?135009-Wanted-Dead-or-Alive!(V3) retira os espaços /\1 ponto
-
http://www.mediafire.com/?a5zade5h38me710 vai nesse link +facil baixa1 ponto
-
Preciso De Um Script Teleporte Automatico
Pedrinhowi reagiu a Vodkart por uma questão
aqui o script funciona perfeitamente, não some em segundos como você disse. Acabei de testar. local config = { days = {{"Thursday","19:00"},{"Saturday","19:20"}}, Tp = {{x=158, y=57, z=7},{x = 160, y = 54, z = 7}} , TpTime = 2 -- em minutos } function removeTp(config) local t = getTileItemById(config.Tp[1], 1387) if t then doRemoveItem(t.uid, 1) doSendMagicEffect(config.Tp[1], CONST_ME_POFF) broadcastMessage("O teleporte se fechou.",22) end end function onThink(interval, lastExecution) for i = 1, #config.days do if isInArray(config.days[i][1], os.date("%A")) and isInArray(config.days[i][2], tostring(os.date("%X")):sub(1, 5)) then doCreateTeleport(1387, config.Tp[2], config.Tp[1]) broadcastMessage("O evento foi aberto, você tem "..config.TpTime.." minutos para entrar no teleport.",22) addEvent(removeTp, config.TpTime*60*1000, config) break end end return true end1 ponto -
Pokemon Galaxy - Official Topic
Wendellpk reagiu a Jakewilliams por um tópico no fórum
New client mirror: http://speedy.sh/DAnNy/PGalaxy-Installer.exe1 ponto -
Editar Sistema De Cassino
Monsterot2 reagiu a 20cm por uma questão
local config = { storageGlobal = 12312, premioID = 2160, -- ID DO ITEM quant = 10, -- QUANTIDADE DE PREMIO valorAposta = 15000, pos = {{x = 35,y = 81,z = 7,stackpos = 253},{x = 36,y = 81,z = 7,stackpos = 253},{x = 37,y = 81,z = 7,stackpos = 253}}, criaturas ={"Rabbit","Black Sheep","Dog","Cat"}, verificador = {}, } function onUse(cid, item, fromPosition, itemEx, toPosition) if(getStorage(config.storageGlobal) == 1) then doPlayerSendCancel(cid,"Aguade esta rodada acabar.") return true end if(getPlayerMoney(cid) < config.valorAposta) then doPlayerSendCancel(cid,"Consiga " .. config.valorAposta .. " gold coins antes.") return true end doPlayerRemoveMoney(cid, config.valorAposta) sumonarVerificar(cid,1) doSetStorage(config.storageGlobal, 1) -- adiciona o verificador para não clicar 100 veses e bugar addEvent(doSetStorage,4000,config.storageGlobal,-1) -- retira o verificador para poder clicar novamente return false end function sumonarVerificar(cid,i) if(not isPlayer(cid)) then -- evita erros for k = 1,3 do if(isMonster(getTopCreature(config.pos[k]).uid)) then doRemoveCreature(getTopCreature(config.pos[k]).uid) end end return false else if(i == 4)then if(config.verificador[1] == config.verificador[2] and config.verificador[2] == config.verificador[3]) then for k = 1,3 do doSendMagicEffect(config.pos[k], 29) end doSendMagicEffect(getCreaturePosition(cid), 29) doSendAnimatedText(getCreaturePosition(cid), "Congratz!", math.random(1,255)) doPlayerAddItem(cid, config.premioID,config.quant) else for k = 1,3 do doSendMagicEffect(config.pos[k], 2) end doSendMagicEffect(getCreaturePosition(cid), 2) end for k = 1,3 do if(isMonster(getTopCreature(config.pos[k]).uid)) then doRemoveCreature(getTopCreature(config.pos[k]).uid) end end for k,v in pairs(config.verificador) do config.verificador[k]=nil end -- limpa tabela else rand = math.random(1,#config.criaturas) monstro = doCreateMonster(config.criaturas[rand],config.pos[i]) doSendMagicEffect(config.pos[i],2) table.insert(config.verificador, config.criaturas[rand]) -- adiciona a criatura na tabela para futura verificação doChangeSpeed(monstro, -getCreatureBaseSpeed(monstro)) -- fará com que ele não se mexa addEvent(sumonarVerificar,1000,cid,i + 1) end end end1 ponto -
Olha n ta muito show pq ainda to iniciante mas ai esta1 ponto
-
pronto fiz pra vc ! local config = { storageGlobal = 12312, -- esta storage é global e armazenará um valor para verificar se alguem usou o sistema antes dele finalizar premioQuantidade = 10503, -- como por em item? valorAposta = 15000, -- preço, em GPS, de cada chance pos = {{x = 35,y = 81,z = 7,stackpos = 253},{x = 36,y = 81,z = 7,stackpos = 253},{x = 37,y = 81,z = 7,stackpos = 253}}, -- configure as 3 posições criaturas ={"Rabbit","Black Sheep","Dog","Cat"}, -- monstros que irão aparecer verificador = {}, -- não mecher } function onUse(cid, item, fromPosition, itemEx, toPosition) if(getStorage(config.storageGlobal) == 1) then doPlayerSendCancel(cid,"Aguade esta rodada acabar.") return true end if(getPlayerMoney(cid) < config.valorAposta) then doPlayerSendCancel(cid,"Consiga " .. config.valorAposta .. " gold coins antes.") return true end doPlayerRemoveMoney(cid, config.valorAposta) sumonarVerificar(cid,1) doSetStorage(config.storageGlobal, 1) -- adiciona o verificador para não clicar 100 veses e bugar addEvent(doSetStorage,4000,config.storageGlobal,-1) -- retira o verificador para poder clicar novamente return false end function sumonarVerificar(cid,i) if(not isPlayer(cid)) then -- evita erros for k = 1,3 do if(isMonster(getTopCreature(config.pos[k]).uid)) then doRemoveCreature(getTopCreature(config.pos[k]).uid) end end return false else if(i == 4)then if(config.verificador[1] == config.verificador[2] and config.verificador[2] == config.verificador[3]) then for k = 1,3 do doSendMagicEffect(config.pos[k], 29) end doSendMagicEffect(getCreaturePosition(cid), 29) doSendAnimatedText(getCreaturePosition(cid), "Congratz!", math.random(1,255)) doPlayerAddItem(cid,premioQuantidade) else for k = 1,3 do doSendMagicEffect(config.pos[k], 2) end doSendMagicEffect(getCreaturePosition(cid), 2) end for k = 1,3 do if(isMonster(getTopCreature(config.pos[k]).uid)) then doRemoveCreature(getTopCreature(config.pos[k]).uid) end end for k,v in pairs(config.verificador) do config.verificador[k]=nil end -- limpa tabela else rand = math.random(1,#config.criaturas) monstro = doCreateMonster(config.criaturas[rand],config.pos[i]) doSendMagicEffect(config.pos[i],2) table.insert(config.verificador, config.criaturas[rand]) -- adiciona a criatura na tabela para futura verificação doChangeSpeed(monstro, -getCreatureBaseSpeed(monstro)) -- fará com que ele não se mexa addEvent(sumonarVerificar,1000,cid,i + 1) end end end1 ponto
-
O Erro e pq as versoes do mapa esta diferente !1 ponto
-
Vá no menu de atualizações (Ferramentas -> Atualizações...) e baixe a biblioteca OpenSSL. Select devpak server: devpaks.org Community Devpaks1 ponto
-
1 ponto
-
Sistemas Interessantes -
kynhuu reagiu a pbottrinks por uma questão
Upar a cada HIT: ExpHit. NPC que venda por item, eu nao sei. Até estive atrás dele já, mas nao vem ao caso. Aconselho colocar uma porta, cuja somente quem tem o X item. Se quiser posto para você, Abraços.1 ponto -
Ai Servidor Mapa Infintity Sky Nesse Topico Em Baixo http://www.xtibia.com/forum/topic/164366-baiak-riot-860-30042012-melhor-ot/ Ajudei??Da Rep+ E Agradeça!!! Server:baiakbr.servegame.com1 ponto
-
[Gesior] Problema Com Lost Account
ShockZz reagiu a coyotestark por um tópico no fórum
tenta usar esse smtp. smtp.mail.yahoo.com.br port: 587 e crie uma conta yahoo.1 ponto -
De nada velho , sempre estarei disponível ate a morte pra ajudar1 ponto
-
Alavanca Que Sumona
Demonbholder reagiu a Leoxtibia por uma questão
Em data/actions/scripts crie um arquivo.lua e cole isto dentro: local t = { storage = 6234, -- n mexa time = 5, -- tempo em minutos monster = "Demon", -- monstro pos = {x=1,y=1,z=1} -- posição } function onUse(cid, item, fromPosition, itemEx, toPosition) if getPlayerStorageValue(cid, t.storage) < os.time() then doSummonCreature(t.monster, t.pos) doPlayerSendTextMessage(cid, 22, "Você sumonou um ".. t.monster ..".") setPlayerStorageValue(cid, t.storage, os.time() + t.time*60) else doPlayerSendCancel(cid, "Você deve esperar ".. t.time .." minutos.") end return true end Em actions.xml cole a tag: <action actionid="AID_DA_ALAVANCA" script="NOMEDOSEUARQUIVO.lua"/> Espero ter ajudado. À propósito, veja aquele tópico dos addons.1 ponto -
Duvida Alavanca De Stamina
Demonbholder reagiu a Leoxtibia por uma questão
Ok, tópico reportado para moverem.1 ponto -
[Pedido]
Gmmasterkyo reagiu a SkySeven por uma questão
Se for para Protocolo 8.54,eu te passo o meu aki embaixo: Va em talkactions/scripts e adicione um arquivo chamado transform.lua. apague tudo la,e ponha isso: OBS:Nesta,linha: Voce pode editar oq quiser mais sempre de acordo no q mostra encima oq e cada parte. Depois,em talkactions.xml Adicione isto: salve e fexe,e teste.Se nao funcionar poste aqui. Se ajudei rep++.1 ponto -
Wodbo By Crazzymaster
LookMe reagiu a gustavo3754 por um tópico no fórum
LookMe a soucer desses server de wodbo 8.0 n tem sqlite ai nem da pra ligar mais rapido, tem que ser um 8.541 ponto -
Erro Ao Abrir Remere's Map Editor 2.2
Napolitano reagiu a PostadorHunter por uma questão
tem q exclui duas dll la da pasta do remeree n abrir no atalho abrir com o remeres q ta na pasta dele se eu lembra q dll é eu edito ake edit WSOCK32.dll e RPCRT4.dll exclua essas duas dlls e n abra o remere pelo atalho se n essas duas dlls vao ser criadas novamente ajudei ?? rep+1 ponto -
Comando !fly Para Vip's
Demonbholder reagiu a lfelipebsilva05 por um tópico no fórum
galera hoje vou ensinar um comando que teleporta player vip's para locais diferentes. vamos la entao. Primeiro vai em data>talkactions>scripts. crie 1 arquivo com nome fly.lua e cole isso dentro. --[[script By Vodkart And Lfelipebsilva05]]-- function onSay(cid, words, param) local config = { pz = true, -- players precisam estar em protection zone para usar? (true or false) battle = false, -- players deve estar sem battle (true or false) custo = false, -- se os teleport irão custa (true or false) need_level = false, -- se os teleport irão precisar de level (true or false) vip = true, -- somente vip players poderam usar o comando? ("yes" or "no") storage = 13500 -- Storage Id da sua vip account caso for usar somente vips } --[[ Config lugares]]-- local lugar = { ["depot"] = { -- nome do lugar pos = {x=1016, y=1045, z=7},level = 8,price = 0}, ["temple"] = { -- nome do lugar pos = {x=1032, y=1016, z=7},level = 8, price = 0}, ["arena"] = { -- nome do lugar pos = {x=1016, y=1052, z=8},level = 8,price = 0}, ["viparea"] ={ -- nome do lugar pos = {x=701, y=1015, z=7},level = 8,price = 0}, ["trainer"] ={ -- nome do lugar pos = {x=965, y=1057, z=7},level = 8,price = 0} } --[[ Lista de Viagem (Não mexa) ]]-- if (param == "lista") then local str = "" str = str .. "lista de viagem :\n\n" for name, pos in pairs(lugar) do str = str..name.."\n" end str = str .. "" doShowTextDialog(cid, 6579, str) return TRUE end local a = lugar[param] if not(a) then doPlayerSendTextMessage(cid, 25, "desculpe,este lugar não existe") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return TRUE elseif config.pz == true and getTilePzInfo(getCreaturePosition(cid)) == FALSE then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT,"você precisa estar em protection zone pra poder teleportar.") return TRUE elseif config.premium == true and not isPremium(cid) then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Apenas players com premium account podem teleportar.") return TRUE elseif config.battle == true and getCreatureCondition(cid, CONDITION_INFIGHT) == TRUE then doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você precisa estar sem battler pra poder teleportar.") return TRUE elseif config.need_level == true and getPlayerLevel(cid) < a.level then doPlayerSendTextMessage(cid, 25, "Desculpe,Voce não tem level. voce precisa "..a.level.." level ou mais para ser teleportado.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return TRUE elseif config.custo == true and doPlayerRemoveMoney(cid, a.price) == FALSE then doPlayerSendTextMessage(cid, 25, "Desculpe,voce nao tem dinheiro suficiente. Voce precisa "..a.price.." gp para ser teleportado.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return TRUE elseif config.vip == true and getPlayerStorageValue(cid, tonumber(config.storage)) - os.time() <= 0 then doPlayerSendTextMessage(cid, 25, "Desculpe,voce nao e Player vip Para Usar o !fly!.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return TRUE end doTeleportThing(cid, a.pos) doSendMagicEffect(a.pos, CONST_ME_TELEPORT) doBroadcastMessage("" .. getPlayerName(cid) .. " has flown to " .. param .. " using !fly." ,MESSAGE_INFO_DESCR) return TRUE end agora em talkactions.xml cole isso <talkaction words="!fly" script="fly.lua"/> GOSTOU ? REP+1 ponto -
[ Resolvido ]Temple Position Is Wrong. Contact With The Administration.
Twint reagiu a chrystianscracho por um tópico no fórum
seguinte abra seu \htdocs\accountmanagement.php e procure por $player->setPosX $player->setPosY $player->setPosZ so colocar as cordenadas x ,y, z e depois voce vai em \htdocs\config\config.php $config['site']['newchar_towns'][1] muda a id para sua. //$config['site']['newchar_towns'] = array(1); muda para id da sua town $towns_list[0] = array(0 => 'Venore', 1 => 'Edron', 2 => 'Thais', 3 => 'Carlin'); muda o Edron para o nome da sua cidade. se te ajudei REP+ =)1 ponto -
[Encerrado] Como Mudar O Acc Manager?
murilo351 reagiu a ereveworld1 por um tópico no fórum
É só ir no arquivo LUA do seu servidor e lá vai ter: Ou algo parecido, é só colocar "no" Ajudei ? Rep +1 ponto