Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 11/17/11 em todas áreas
-
AHUAHAU preguiça anda matando uns e outros ae zuzu mais vlw ae pelo cmt Vou postar mais 3 que eu esqueci2 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
-
Update da versao 2.0 pra 2.1 Order 100%(Dig,Ride,Fly,Cut,RockSmash,Flash,Blink) 1 bug no Rock Smash quando o pokemon usa, ele n pode repetir seguidamente, vc tem que chama-lo de volta e chamar novamente pra ele quebrar de novo. Teleport 100% Surf 100% 36 Pokemons Shinys FALTANDO OS MOVES, catch,goback configurado em alguns já. Control Mind 90% (se você controlar um pokemon shiny ele vira normal) !cd [34/160] NPC que compra pokemon 100% Mapa uns 80-90% Svke Porem com Crash recomendo mudar o mapa pra o mapa do Pokemon Dash. 7 Quest (Pokeballs<Venom<Cerulean<Pewter<RockTunnel<Gengar<Charizard) adicionei a quest da box4 na zard valley, porem se vcs quiserem editar fica a criterio. Gym System BETA(So tem o Brock nao ganha nada depois de derrotar ele e depois que se ganha dele ele não fala mais com você , você pode editar mais e usar eles em evento quem ganhar receber um premio do GM...) 10 Cidades m1-m12(70%) do m10 ao m12 só poucos pokemons tem os moves, e ainda falta MTO como Harden no blastoise etc. Loot,Catch,Corpses(99%) Loot (40%) ainda não tive tempo pra arrumar.. Corpses 50% corpo do Crystal Onyx errado, corpo do elder zard errado. Evolução(100%) Rare Candy 100% Box1-4 100% Max 6 pokemons o resto vai DP 100% Buf do Database só deixando criar 3 characters arrumado, arrumei o database agora está normal. Bug da dex arrumado, agora da pra usar dex, e depois ver os pokes pelo /dex 100% Ja esta editado no items.otb , items.xml , portrait e corpse de 35 shinys em outros lugares vai se so preciso ageitar xml do monstro , moves , o lv necessario , a chance de catch o life e quanto ganha de life por level(cons) Acc do GOD 9909749 / hqbvcj6n desculpem mas essa acc eu criei pra testar com xar normal. Download do Servidor: http://www.mediafire.com/?jqstla6kx0cy7db Cliente que eu usei no Servidor: http://www.mediafire.com/?ygyznsfh5uvttv7 Data/Monsters configurado, arrumei os loots dos pokes, se alguem achar algum bug, me reporte. http://www.mediafire.com/?9cr9ikbc0ddi8ya Créditos ao Scizorgame, no post do EX 2.0 ele n relatou outras pessoas que ajudarão, então acho que é só dele os créditos. V2.1 adicionados todos os shinys menos shiny gengar pois dá debug no servidor. Superpopulação do Mapa eu arrumei porem, falta editar mais coisas. Loot(50%) arrumei alguns loots errados, mas ainda não tive tempo pra revisar os 150. m1/m12(50%) pois estão faltando moves. Blanceamento feito por mim nos pokemons pokemons como Charizard que tinham pouco HP agora com HP mais alto. Bug do database concertado por mim. Bug da dex arrumado por mim. Bugs dos 6 pokes 7 pro cp arrumado tbm. +- foi isso que eu arrumei no servidor. Ainda é um longo trabalho pra deixar esse servidor 100%, mas aos poucos e com ajuda da galera da pra deixar legal.1 ponto
-
[ Ajuda Para Quem Posta ] Modelo De Postagem
ErondinoSite reagiu a Henrique Moura por um tópico no fórum
[ MEU OTSERV ] VERSÃO X ► O que meu OTserv tem » Por que as pessoas deveriam baixar meu OTserv? » O que ele tem de diferente? » Lista das features » Lista das quests » Lista dos sistemas ► Mudanças em relação a versão anterior » Bug Fixes » Features inseridas que os usuários requisitaram » Features que serão inseridas na próxima versão ou revisão » Todas as versões separadas por ordem, assim como suas features.[utilize spoilers] ► Help Desk » Bugs que os jogadores encontraram » Dificuldades eventuais que os usuários possam encontrar na instalação/uso do OTserv. » Como utilizar: Conta do GOD, compatibilidade, recomendações de websites, etc. ► Área ilustrativa » Imagens devidamente recortadas e com legendas » Quests, novas áreas, etc. ► Disponibilização » Scan » Download ► Créditos » Listagem de todas as pessoas envolvidas na criação do OTserv, inclusive sistemas que não são de sua autoria. Exemplo de tópicos bem organizados para serem utilizados como base: Exemplo 1 | Exemplo 2 | Exemplo 3 Utilidades para o criador do tópico (bõtoes, separadores, etc) Atenciosamente, Henrique. Add1: Leia sobre autorização para edição de servidores que não foi criado por você. Add2: Fazendo upload e scan do seu servidor1 ponto -
Tibia Som V. 1.0 (Lua)
Skymagnum reagiu a Demonbholder por um tópico no fórum
Opa galera, tudo bem? Nesses últimos dias eu vim trabalhando em um projeto que eu já tenho em mente faz um tempo: um tibia som usando apenas a linguagem lua e suas bibliotecas auxiliares. Primeiramente gostaria de dizer que lua é um linguagem limitada, mesmo contando com suas bibliotecas auxiliares em C não se compara a própria linguagem C, entre outras. Leia tudo! Como funciona: Tanto o hoster quanto o jogador devem baixar arquivos para que o sistema funcione, porém, cada um irá baixar arquivos diferentes. O jogador irá abrir o programa e depois deve ativar a talkaction no jogo que irá dar inicio a conexão entre as duas redes. Depois, o jogador deve digitar sua conta e senha para confirmar a conexão. A partir deste momento, o programa estará em funcionamento. Informações: O programa ainda está em fase de testes, não tive a oportunidade de testar com Tibia MC ou até mesmo com duas conexões simultâneas, ou seja, duas pessoas usando o sistema. Peço que reportem qualquer bug para que eu o corrija imediatamente. Por enquanto, o máximo são 10 sons. Bibliotecas auxiliares: Foram utilizadas as bibliotecas ProteaAudio para reproduzir os sons e a biblioteca Socket para conectar as duas redes e possibilitar o envio de dados (TCP). Instalação: A instalação é a parte mais difícil do processo, fique muito atento pois qualquer nome de pasta que não esteja igual ao indicado irá debilitar o funcionamento do programa. Instalação para o Jogador Se você estiver jogando um OtServer que possua este sistema, siga os seguintes passos: Baixe o seguinte aquivo: http://www.4shared.c...ibia_Som_P.html Feito isso, para ativar o sistema, abra o arquivo Tibia Som.bat e, no jogo, use as palavras que irão ativar a talkaction para inciar a conexão. Após o inicio da conexão, digite a sua conta e senha e assim o sistema irá funcionar. Instalação para o Hoster Se você estiver hosteando um OtServer e deseja implementar o sistema, siga os seguintes passos: Baixe o seguinte arquivo: http://www.4shared.com/rar/AuijQwyB/Tibia_Som_H.html Agora, selecione as seguintes pastas: lua, mime, socket e os seguintes arquivos: lua.exe, lua5.1.exe, lua5.1.dll, lua51.dll e coloque-os na mesma pasta onde se encontra o interpretador (executável) e as dlls do seu OtServer. Feito isso, vá em data/globalevents/scripts e cole o arquivo gbevt.lua, depois vá em data/globalevents, abra o arquivo globalevents.xml e, entre duas tags, cole esta: <globalevent name="tibiasom" interval="3" event="script" value="gbevt.lua"/> Depois, vá em data/lib e cole o arquivo changer.txt, não se assuste porque ele está vazio, server apenas para trocar informações entre o OtServer e o interpretador avulso. Vá em data/talkactions/scripts e cole os arquivos talk.lua e sender.lua, depois vá em data/talkactions, abra o arquivo talkactions.xml e, entre duas tags, cole esta: <talkaction words="talk" script="talk.lua" /> Edição Jogador Se você seguiu os passos de instalação do jogador, agora poderá editar algumas configurações. Você tem a opção de editar os sons, porém, não a quantidade. Para fazer isto, abra a pasta songs. Para editar cada um dos sons, você deve substitui-los por um arquivo de mesmo nome e formato. Edição Hoster Se você seguiu os passos de instalação do hoster, agora pode e deve editar as configurações. Para editar as posições onde os sons vão ser reproduzidos, você deve editar dois arquivos: vá em data/globalevents/scripts, e abra o arquivo gbevt.lua. Você irá ver isto: tabmatch = { [{{x=130, y=40, z=5}, {x=160, y=60, z=7}}] = "{x=150, y=50, z=7}", [{{x=161, y=40, z=5}, {x=165, y=80, z=7}}] = "{x=170, y=70, z=7}" } Perceba estas duas tabelas: {x=130, y=40, z=5}, {x=160, y=60, z=7} O primeiro x é o número mínimo de posição x que o jogador deve estar para tocar o som referente a posição {x=150, y=50, z=7}. O seguindo x é o número máximo de posição x que ele deve estar para tocar o som. Isso se aplica ao y e o z também. Para adicionar novas posições (até 10), apenas continue seguindo o padrão da tabela, inserindo uma virgula no final de todos index, com exceção do último index. Por exemplo: tabmatch = { [{{x=130, y=40, z=5}, {x=160, y=60, z=7}}] = "{x=150, y=50, z=7}", [{{x=161, y=40, z=5}, {x=165, y=80, z=7}}] = "{x=170, y=70, z=7}", [{{x=166, y=100, z=5}, {x=190, y=190, z=9}}] = "{x=180, y=120, z=7}" } Tenha muito cuidado para que duas posições nunca se encontrem, caso aconteça, o sistema irá ser debilitado. Sempre que você editar o gbevt.lua, você deve, também, editar o sender.lua, que se encontra em data/talkactions/scripts. Nele, você também encontrará uma tabela: tab = { ['{x=150, y=50, z=7}'] = 'songs/song1.ogg', ['{x=170, y=70, z=7}'] = 'songs/song2.ogg' } Perceba esta tabela: {x=150, y=50, z=7} Esta tabela deverá ser igual a tabela que se encontra depois do sinal de "=" na tabela do arquivo gbevt.lua. Para edita-la, deve continuar o padrão da tabela, inserindo uma virgula no final de todos index, com exceção do último index. Vamos inserir um novo index considerando aquele exemplo usado na explicação do gbevt.lua: tab = { ['{x=150, y=50, z=7}'] = 'songs/song1.ogg', ['{x=170, y=70, z=7}'] = 'songs/song2.ogg', ['{x=180, y=120, z=7}'] = 'songs/song3.ogg' } Perceba que o song deve ser seguir a ordem crescente. Não esqueça que o máximo são 10 sons, a menos que o jogador também adicione mais sons na pasta songs. Não esqueça, também, de editar a tag em talkactions.xml: <talkaction words="talk" script="talk.lua" /> Caso deseje, edite onde está escrito talk, por qualquer palavra para que o jogador possa iniciar a conexão. Isso é tudo pessoal, espero que tenham gostado. Não esqueçam de reportar os bugs. Até. Sistema em fase de testes1 ponto -
[Tutorial] Criando Sua Propria Arma No Paint.
pedroszmatos reagiu a Stigal por um tópico no fórum
Eai Xtibianos! Venho Mostrar Como "CRIAR" Suas Proprias Sprites No PAINT! Índice O que você vai precisar O que eu vou precisar Configurando o paint Criando suas próprias armas O que você vai precisar: O que eu vou precisar: Configurando o paint: Criando suas próprias armas: Espero Que Gostem!!! Não Esquesao De Comentar ;D!1 ponto -
Gesior Acc Maker Para Tibia 8.60(2.0)
Grajauserv reagiu a CoLoRaDo por um tópico no fórum
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 end1 ponto -
{Show~Off} Léo
ThiagoADM reagiu a Leoprotons por um tópico no fórum
Bom, no meu shown off vou pretendo postar somente mapas de construções, bem isso é por enquanto, quem sabe eu mude de ideia, mais ai eu edito o post Gostaria de saber de vocês opiniões sobre o que posso melhorar, o que não gostou, o que faltou e é claro também o que gostou. Agradeço desde já. Pra começar irei postar uma tumba, igreja, templo ou algo assim.. Não sei bem o que é.. alguém tem uma definição?? Historia: Esta e uma construção para guardar um corpo de um grande líder da aldeia. E a outra é uma loja de potions. Historia: Construção onde mora um sábio, que utiliza de seu conhecimento, para transformar ervas e restos de corpos para criar poções magicas. é só isso!! em breve posto SS's. Edit Obs: Por algum motivo meu post se alto enviou antes de eu terminar de colocar a imagem.. O,o1 ponto -
Galeria De Video-Aula
ADMJuan reagiu a SkyDangerous por um tópico no fórum
Olá Pessoal , Bem-vindo a galeria de VIDEO-AULA , aqui você encontrará todas as videos aulas ensinando tudo sobre otserv. O tópico é atualizado quase todos os dias , então sempre visite o tópico e não esqueça de comentar e reputar se gostou ! É dividido por categorias , para melhor organização. Quer dar dicas para video-aulas? Acesse: http://www.xtibia.com/forum/topic/165920-video-aulas-opinioes/ Ultima Atualização: 30/08/2011 Categoria: Internet(Desbloqueio de portas) Tutorial: Desbloqueando as portas pelo DMZ Autor: SkyDangerous Função: O dmz faz com que libera todas as portas , evitando perca de tempo desbloqueando uma por uma. Resumo: Não possui. Tutorial: Desbloqueando as portas pelo Firewall no WIN 7 Autor: SkyDangerous Função: Desbloqueio das portas do firewall , faz com que os players consigam entrar no seu servidor. Resumo: Não possui Categoria: DATA OTSERV(Monsters,spells,items,weapons,scripts,npcs) Tutorial: Editando e criando novos monstros Autor: SkyDangerous Função: Aprendi a mecher nos monstros do tibia , criar novas spells e tudo mais Resumo: 1- Localizar a pasta monsters 2- Criar novo monstro 3- Editar nome , experiencias , velocidade e tudo mais.(Básico) 4- Editar as Flags 5- Criar novas spells , e editar. 6- Editar Elementos 7- Editar as immunidades 8- Criar novas vozes , editar as vozes 9- Editar e adicionar novos loots 10- Adicionar no monsters.xml 11 - Finalização Tutorial: Funcionando o efeito nos items Autor: SkyDangerous Função: Fazer com que os efeitos funcionem nos items. Resumo: 1- Testando no jogo para comprovar 2- Localizando a pasta Movements 3- Aprendendo a adicionar a tags 4- Aprendendo sobre as funções 5- Comprovando que funcionou 6 - Fim do Tutorial Tutorial: Criando NPC de barco usando default Autor: SkyDangerous Função: Teleporta o player para a coordenada desejada Resumo: 1- Localizando a pasta npcs 2- Criando um npc 3- Adicinando as tags 4- Explicando a tags 5- Fim do tutorial Categoria: WEB Sites(Criar, Modificar e por on-line) Tutorial: Usando Blocos de Comandos Autor: SkyDangerous Função:Executar os blocos de comandos em phpmyadmin Resumo: 1- Abrindo o PhpMyAdmin 2 - Testando 3 - Achando o SQL 4 - Executando 5 - Comprovando e Finalizando Categoria: RME E MAPAS(Bugs,Fazendo Mapas , Importando , exportando) Tutorial: Desbugando o rme 8.6 Autor: SkyDangerous Função: Aprenda a tirar o bug de localidade do 8.6. Resumo: 1- Mostrando o Erro 2- Instalando o tibia baixado no tibiabr ou em qualquer lugar 3- Explicando como Resolver 4- Testando novamente 5- Fim do tutorial Se curtiu a video-aula Não custa nada dar REP +1 ponto -
Aula 1 [Amador] ("ruas" De Cidade)
myutz reagiu a 2694943kkkk por um tópico no fórum
Olá galérinha Xtibiana, Hoje eu começo o mais novo projeto de aula, mais detalhado, ultrapassando o chamado de "Simples", tudo no mapping é simples, mas dependendo também dos detalhes né ? Essas aulas são o nível 2 (Amador). Terá mais 8 aulas no Amador, em seguida já será outro nível. Então vamos ao vídeo do mapa que eu fiz mostrando pra vocês uma forma de fazer "rua" em sua cidade. Esse mapa que eu fiz foi a partir do meu ultimo tutorial. Vídeo : http://www.youtube.com/watch?v=Wm9vJDIZgWU Imagem aos interessados: Dicas: 1ª: Gente, na hora de fazer uma rua como essa pense bem qual ground tu vai usar, se for aquele do tipo Carlin, sugiro que não use uma borda que nem que eu usei, pois a mistura de cores não vão ser legais, entende ... talves até seria bom você procurar outra combinação. 2ª : (A mais óbvia) Sempre faça casas do mesmo tipo que a outra, exemplo : Parede de Madeira com Parede de Madeira, e nunca assim : Parede de Madeira com Parede de Pedra (A não ser que seja uma Guild House) Para os coordenadores e administradores do Xtibia: Gostaria de saber, se for possível, eu abrir um concurso? Que eu criarei, eu entregarei as sings e tals ... criarei meu próprio tema. Respondão aqui no tópico mesmo, ou me mande um x-mail. Muito obrigado gente, até a Aula 2. Gostou ? Rep++1 ponto -
Mapas Para Rpg E Não Para Exposição
jacksonnascimento reagiu a henriqueldg por um tópico no fórum
Mapas para RPG e não para Exposição Mannen med Brillorna - Sebastian Mapas para RPG. e não para Exposição. Traduzido por SrK. Criado por Mannen Med Brillorna (MmB). "It's not all about details." (Não é tudo sobre detalhes.) Silent Reaper. Palavras. Se está interessado em fazer um mapa funcional e jogável, é isso. Vou levar o assunto mais para quem quer saber mais sobre a diferença entre fazer mapas para jogar e mapas para a exposição. Com a ajuda de minhas experiências anteriores, vou mostrar a vocês a base essencial onde um mapa jogável de RPG é feito. Mas antes disso, gostaria de deixar claro para as pessoas a diferença entre um mapa feito para a exposição e um feito para jogar. Muitas vezes eu vejo pessoas rejeitando trabalhos de mappers na exposição devido à sua "óbvia falta de detalhes". Sugiro que flamers tenham em mente que algumas exposições são para servidores onde muitos detalhes às vezes podem ter mais ou menos consequências devastadoras. Fiz isso parecer um tanto melodramático, mas basicamente é verdade. De qualquer forma, isto é irrelevante. Antes de nos jogarmos apressadamente em pilhas de fatos, estarei dando alguns exemplos de vários lugares onde o tanto de detalhes tem uma importância essencial para a proposta do jogo. Embora, para começar, um pequeno lembrete - com este tutorial não quero ser visto como uma pessoa que odeia erros e certamente não estou convicto de que essas são as regras a serem seguidas, quando na verdade é somente a forma como eu vejo as coisas quando eu mapeio. Espero que esse tutorial possa ajudá-lo tanto quanto me ajudou. Agora, vamos olhar um tunel aleatoriamente escolhido, que leva do ponto A ao ponto B. Minha primeira impressão é que está completamente obstruído por pedras. Alguns poderiam dizer que teria detalhes suficientes. Outros poderiam falar que está cheio de detalhes errados. Mas vamos ver a imagem de um ângulo diferente. O que eu tinha em mente quando o criei? Qual vai ser a reação das pessoas e qual problemas vão ocorrer em diferentes situações quando as mesmas se encontrarem neste local? Um jogador comum provavelmente ficará um pouco chateado pelos obstáculos numerosos. Esses obstáculos também podem fornecer a assistência perfeita a um assassino (Nota do Editor: Leia PK) para carpturar um jogador X. Essa é nossa intenção? Se sim, o túnel atende à sua finalidade. Mas se não, então temos que reorganizá-lo. Após a reorganização, o túnel ficou assim. Um olho afiado rapidamente irá perceber a adição de vários detalhes e a remoção da maioria das pedras. No entanto, os novos detalhes não contém nenhum objeto que bloqueie o caminho e não vai mais ajudar o assassino em capturar o jogador X. Contornamos esse problema. Mais há mais. Muito mais. Vou tentar discutir assim como eu possivelmente posso depois, mas aqui eu vou-lhe perguntar somente uma questão. Sabendo que esse túnel precisa de preferencialmente muito tempo para fazer, assumindo que é bem maior do que somente o que vemos, precisamos perguntar para nós mesmos: nós temos tempo suficiente? Os jogadores vão ao menos perceber esses detalhes? A resposta para a primeira questão é diferente para cada um, e para ser honesto, a segunda também. Mas se quizermos ter um mapa funcional e jogável, o resultado abaixo é mais que suficiente. Observando a imagem percebemos que muitos detalhes foram removidos. Nos olhos de muitos, agora falta detalhes e não é de real interesse. Mas essa é a forma que a maioria dos jogadores pensam? Não, não é. Agora tenha em mente que não estou dizendo que seus túneis e cavernas precisam seguir o mesmo estilo. É importante que você lembre que cada e toda caverna precisa de um toque único para ser interessante, mas você não tem que exagerar nisso. Irei voltar ao assunto do toque único mais tarde, onde darei alguns exemplos de variações que irão captar a atenção dos jogadores. Agora, os mais detalhistas irão queixar-se de alguns IDs colocados perto um do outro. A imagem abaixo mostra o que eu quero dizer. Dentro dos círculos vermelhos eu repetidamente coloquei a mesma variação de terra perto uma da outra. Por quê? Porquê não? Para ser honesto, quando você está correndo em uma caverna você não fica muito atento nos detalhes, principalmente na terra depois das paredes da caverna, e mesmo se estivesse iria demorar bastante para notar. E na minha opinião honesta, não fica desagradável. Em segundo lugar, dentro dos círculos azuis coloquei os mesmos tipos de chão perto um do outro. Agora, o chão é comumente algo que as pessoas ficam atentas, então por quê fazer como eu fiz, você pode perguntar-se.Bem, agora pense sobre isso: não ter aleatorização tornou-se uma espécie de doutrina tola? Os solos atualmente aleatorizam-se automaticamente. Pessoas sempre tentam ser melhor que outra adicionando mais e mais detalhes para o seu mapa e eventualmente criaram essa curiosa forma de doutrina. Vamos resumir o que lemos até agora. Nós vemos três imagens de um túnel onde os detalhes fundamentais alteram a jogabilidade. Se nós deixássemos a primeira imagem, jogadores seriam uma presa fácil para assasinato ou captura, e talvez essa era a nossa intenção. A segunda imagem é apropriada para uma caverna menor, onde jogadores visitam constantemente, enquanto a terceira é apropriada para túneis longos, onde jogadores não ficariam tão atentos aos detalhes enquanto correm. O que estou querendo dizer é que devemos lembrar-se de ter em mente como o nosso mapa irá influenciar a jogabilidade. Pois bem, eu os introduzi algumas das minhas opiniões, e se você achou-as interessantes, é bem-vindo a ler o próximo capítulo. Toque Único: Apesar de tudo isso, o toque único dos mapas não devem ser ignorados, como já referi anteriormente. Irei mais fundo no tema com a intenção de mostrar minha opinião pessoal de que detalhes únicos são importantes, mas não para serem exagerados. Irei também mostrar algumas imagens em que acrescentei o que vi como detalhe único. É importante salientar, creio eu, que esses toques únicos não devem ser exagerados. Se um jogador andar por um túnel em que tudo é exatamente a mesma coisa, ele não desfrutará todos os detalhes... e então o tempo gasto detalhando essa área terá sido em vão. Abaixo temos um exemplo concreto disso: Na minha opinião é uma caverna extremamente básica. Absolutamente nada especial e nada que você queira expor realmente, mas não é para isso que a caverna serve, é? Ela cumpre seu papel. Mas realmente, queremos um toque único de detalhe. Porém, adicionei esses detalhes na figura abaixo - nem muito, nem pouco. Como você pode ver, eu adicionei uma rachadura extremamente estreita na parede da caverna, alguns galhos pendurados para baixo na caverna e finalmente dois locais cobertos de grama, onde a parede da caverna muda de pedra para barro. Creio que isso dá à caverna um certo toque único embora a mantenha "limpa". Não temos detalhes exagreados e nem os ignoramos totalmente - uma mistura suficiente. Assim, obtendo o melhor resultado, a não ser que nossas intenções com a área seja diferente. Vamos supor, por exemplo, que nós queremos que este lugar seja uma caverna estreita, cheia de estalagmites e pedras, criando uma zona de risco, onde o risco de morte do jogador é grande. Então devemos pensar sobre isso antes de começar nosso mapa ou teremos que reorganizá-lo depois. Mais uma vez eu gostaria de enfatizar a importância de uma segunda reflexão antes de mapear - quais são as suas intenções com essa área específica? Quais detalhes são inúteis, quais não são, como vai ser a área mapeada e como seus detalhes afetarão a jogabilidade dos jogadores? Spawns Os número de criaturas e monstros colocados no mapa é desnecessário de dizer que é muito importante. Essa é outra doutrina que veio à vida aqui no OTFans - O número de criaturas em uma mesma sala ou caverna. De acordo com essa doutrina, nenhum mapa que seja feito para fins de jogos devem ter spawns em que "muitas" criaturas vivem... ou então o mapa é "melhor usado em um servidor 100x". Desnecessário de dizer, isso não é verdade. Observe as duas imagens e compare seus spawns: Não estou dizendo que todos reagem dessa forma, mas eu vi muitas vezes antes no OTFans; muitas pessoas preferem a imagem nº 1 do que a imagem nº 2 para um servidor RPG de baixa experiência. Por quê? "Nenhum nível baixo que caça trolls pode aguentar sete deles ao mesmo tempo. Dois é muito melhor para o RPG!" Errado. Vamos tentar ver toda a imagem. O que tem subindo as escadas? Provavelmente uma toda uma tribo troll em diferentes salas? Ou algo parecido? Sim, provavelmente - então vamos assumir que esta sala que vemos na imagem é somente uma de muitas. Porém, como mappers podemos colocar spawns mais fáceis nas outras salas, e nessa sala especificamente, ou mesmo em mais, podemos pôr um spawn difícil. Será um desafio para o jogador de nível baixo, e, assim, reforçar o sentimento RPG, ao invés de reduzir como a doutrina teria dito. Como jogador nessa situação eu teria caminhado para baixo, em direção ao balcão no canto inferior esquerdo e aprisionado-me por trás da mesa, e com isso teria de enfrentar somente dois trolls de cada vez. Portanto, mais uma vez, essa é uma coisa para se ter em mente quando colocamos spawns. Spawns maiores ou mais difíceis aqui e ali podem ser uma grande idéia, tanto porque trás um desafio diferente e poruqe força o jogador a usar diferentes ou novas táticas para poder matar todos os monstros. Mas só por que eu decidi mostrar neste tópico um exemplo de "overspawning". Não estou dizendo que você precisa pôr spawns difíceis e grandes por todo o seu mapa. Não, isso é algo para ser um pouco raro, a não ser que a área determinada seja diferente. Abaixo eu mostrarei outro exemplo em que ambos os cenários são perfeitamente adequados para um Servidor RPG. Como você pode ver, a segunda imagem pode parecer um pouco assustadora à primeira vista. Duas Serpent Spawns e duas Hydras podem rapidamente matar o melhor dos bloqueadores. E isso é perfeitamente verdadeiro, mas jogadores não estão malucos de correr apressadamente no meio de um lugar habitado por monstros perigosos. Há muitos mais lugares lotados, mas os jogadores de Tibia devem ter aprendido que você deve atrair as criaturas preferencialmente um-a-um, se você quiser sobreviver. Um grande exemplo é a Pits of Inferno. Aqui vai uma imagem que eu tomei a liberdade de tomar emprestada, espero que Mikeke tenha simpatia. É da Pits of Inferno. Ele mostrou-a no Salão de Exposições a algum tempo atrás, e as respostas foram as seguintes: "Acho que está superlotado." "É, está realmente superlotado, ninguém poderá sobreviver a isso." "Superlotado..." "Ahn... isso é para um servidor 1000000x exp? Se não, está superlotado." "Se você fizer esse mapa para servidores 1x para 4x ESTÁ SUPERLOTADO!" Bem, eu poderia seguir... mas você pegou a idéia. Agora, a figura: (Direitos autorais, Mikeke) Ok, as proporções da sala podem não estar 100% corretas, mas vamos contar os monstros: 5 Dark Torturers 7 Lost Souls 2 Demons 1 Banshee Eu contei pessoalmente o número de monstros na Pits of Inferno do Tibia Original. E lembre, Tibia é 1x. 9 Dark Torturers 9 Lost Souls 1 Demon 3 Banshees Você entendeu meu ponto de vista? Quadrados Outro grande tema aqui no OTFans são as construções e cavernas quadradas. Não irei mais usar a palavra doutrina, pois está ficando um tanto aborrecedor, mas muitos de nós sabemos a reação comum a uma construção quadrada na sala de exposições. No entanto, mais uma vez, eu acredito que é totalmente errado. Construções são comumente quadradas, embora possam parecer entediantes. Tenho três exemplos de casas abaixo. Duas delas eu considero quadradas, uma não. Duas delas eu considero boas, uma eu considero ruins. Honestamente, você deve ter percebido qual dessas três eu não gosto... francamente, a terceira casa é patética. E não só isso, não seria muito confortável estar dentro dela. Então, a partir de agora, lembre-se que você pode fazer suas casas quadradas, é a melhor alternativa. Além disso, o fator quadrado tanbém abrange cavernas de todos os tipos. Cavernas quadradas? Você cambaleou sobre o tema antes? Olhe para a parede de cima da primeira figura abaixo; isso é feio? Como um jogador, poderia você realmente pensar muito sobre isso? Eu não pensaria. E a segunda imagem; uma sala bem quadrada, mas não está ok? Compare-a com a terceira imagem. Pessoalmente, penso que ela parece completamente fora de lógica. Logicamente, eu quero dizer, por que as cavernas provavelmente foram cavadas. Acredite ou não, mas cavernas ou casas quadradas são, às vezes, muito melhores que as deformadas, como você pode ver em meus exemplos acima. Mas lembre-se, nem sempre. Certamente não. Natureza Você pode mapear natureza em muitas, muitas formas. Algumas são ruins, algumas são boas. Mas eu acredito que devo mostrar o tema brevemente, e mostrar o que eu creio ser a natureza mais adequada para um servidor RPG e como variá-la devidamente. Antes de mostrar algumas imagens de exemplo, devo contar-lhes as várias alternativas que pessoalmente faço enquanto estou mapeando natureza. Vario minha natureza de florestas densas para o seu contraste, com solo rochoso e campo aberto. Alguns podem dizer que um grande campo aberto como o da imagem abaixo está sem detalhes, mas em vez disso, se vê uma bela variação da comum natureza de floresta. Abaixo estão três exemplos do que eu digo de florestas densas, e seu contraste, e por último o solo rochoso. Agora consiga um pequeno tempo para planejar e adicionar uma mistura suficiente de floresta densa e floresta normal, com solo rochoso e campos abertos em locais adequados. Você irá perceber que sua natureza fica melhor e mais interessante, mantendo o ambiente perfeito para jogadores. Eficiência Esse capítulo pode ser debatível, eu sei disso. E você vai notar isso também. Mas depois de algumas horas mapeando, você provavelmente começará a concordar comigo. Atualmente, parece um pouco tolo e pode somente ser alguns minutos, ou mesmo segundos, mas como eu mencionei - depois de algumas horas mapeando isso torna-se cansativo, e é aí que a eficiência vem em boa hora. Primeiro de tudo, preciso somente dizer isso; quando mapear começa a cansar, é o momento certo de parar um pouco, porque sua imaginação começar a cansar e seu cérebro automaticamente pula certas partes somente para terminar mais rápido. Tenha isso em mente para seu mapa ficar melhor. No entanto, a eficiência não é realmente um assunto que é fácil de ensinar, por isso não vou sequer tentar. Em vez disso, explicarei como uso eficiência em meu benefício e dar alguns exemplos, e espero que, a partir disso, você possa aprender como usá-lo. Assim, basicamente, é sobre ser efetivo como podemos, assim podemos terminar uma área mais rápido, sem pular nenhuma parte ou sendo negligente. Tento sempre estar a um passo a frente de mim mesmo. Isso pode parecer esquisito, mas deixe-me tentar explicar o que significa. Por exemplo, vamos supor que estamos fazendo as paredes de uma caverna para um pequeno local. Em vez de colocar as paredes um-a-um como mostra abaixo... ... colocamos uma peça em todos os lugares possíveis antes de continuar com a próxima peça, como abaixo. Com isso nós aumentamos a velocidade da criação das paredes signficativamente. Agora, sei que a função de bordas automáticas faz isso automaticamente e muito mais rápido, mas essa técnica não abrange somente bordas de todos os tipos, mas também criação de casas e lugares similares onde você pode colocar mais que uma peça com o mesmo ID. Além disso, sabendo o que você irá mapear salva bastante o seu tempo. Planejar o seu próximo mapeamento, mesmo que em um arquivo do paint ou na sua mente, você irá saber o que inserir e onde. Mas tudo isso é pessoal, e estou com medo de que o assunto é muito grande para ser discutido eficazmente. Além disso, creio que eficiência é algo que você precisa desenvolver sozinho, mas quando você pega o jeito você vê que ela se transforma em uma ferramenta muito útil enquanto está mapeando. O RPG Não sei se este tutorial o ajudou ou não, mas espero que tenha uma pequena compreensão no que eu acredito que intensifica a jogabilidade para seu servidor e jogadores. Antes de terminar este tópico, gostaria de resumir as partes mais importantes vistas acima. Primeiramente, devemos lembrar que o número de detalhes que aplicamos a certa área affeta a jogabilide de várias formas. Antes de começarmos a mapear, devemos sempre lembrar de ter em mente para que serve determinada área. Devemos considerar também o quanto acreditamos que certa área irá ser visitada em uma base diária, e com isso aplicar o correto, ou necessário número de detalhes. Depois disso nós não podemos esquecer sobre o toque único que devemos ter em nossas cavernas, para deixá-las diferentes umas das outras. Além disso, os spawns são outra coisa que devemos considerar cuidadossamente. Não devemos pôr spawns pequenos em todo lugar para reter o sentimento RPG... Em vez disso, colocar alguns spawns difíceis instantâneamente aumenta-o. A doutrina sobre construções quadradas ou cavernas deve ser ignorada e você deve usar quadrados para seu benefício, ao invés do contrário. Último, você deve desenvolver seu próprio estilo de eficiência por que isso provavelmente irá ajudá-lo em um mapa futuro. Uma coisa que você sempre deve lembrar é a grande diferença entre exposição e RPG. Sincerely yours, MmB ___ Ja vou logo avisando, eu apenas copiei e colei o tópico... Achei interessante e é uma coisa que todo mapper deve ter em mente. Não tenho nenhum crédito sobre o tópico, seguem os créditos originais: Créditos à: Mannen Med Brillorna (MmB) - Criador do Tutorial SrK - Tradutor Link original do tópico: http://otfans.net/sh...ead.php?t=977441 ponto -
Boa Noite queridos Xtibianos, nesta primeira quarta design teremos um tutorial para iniciantes. Mais porque iniciantes? bom preciso de novos designers, nada melhor do que tentar despertar a arte em você né? Então sem mais delongas vamos ao tutorial: O Tutorial também foi postado na nossa incrível área de tutoriais, para permanecer no nosso acervo de tutoriais: http://www.xtibia.com/forum/topic/172735-tutorial-profundidade-foco-iniciante/1 ponto
-
Olla Xtibianos vou postar alguns wallpapers para vocês Primeiro para os fans do Guns N' Roses Intao e isso ae e depois eu coloco mais e comentem oque acharão1 ponto
-
Mudanças No Server Save
fsg reagiu a Gabriel Couto por um tópico no fórum
Mudanças no Server Save Olá pessoal do XTibia, a CipSoft anunciou hoje que no server save de amanhã, alguns monstros não poderão mais ser convencidos. Esses monstros são: Centipedes, Cobras, Dworc Fleshhunters, Dworc Venomsnipers, Dworc Voodoomasters, Insect Swarms, Lancer Beetles, Larvas, Poison Spiders, Scarabs, Scorpions, Snakes, Swamp Trolls, Tarantulas, Toads e Wasps. E a Hydra Tongue Salad ganhou poder de cura quem esteja perdendo sangue. Oficial: "In order to address an issue where players could be tricked into getting a skull, the following monsters cannot be convinced anymore: centipedes, cobras, dworc fleshhunters, dworc venomsnipers, dworc voodoomasters, insect swarms, lancer beetles, larvas, poison spiders, scarabs, scorpions, snakes, swamp trolls, tarantulas, toads, and wasps." "Bleeding cure has been added to the effects of hydra tongue salad."1 ponto -
Pedido - Logomarca
Izaiasousa reagiu a Overloker por um tópico no fórum
Ta ai novamente . Gosto da rep1 ponto -
1 ponto
-
Parabéns pela incrível escolha de palavras, e principalmente por tomar uma iniciativa dessas! nunca pensei que veria algo assim, espero que muita gente te ajude! também posso te ajudar se quiser, não sou tãão bom assim, mas garanto que posso te mostrar muita coisa, só tem um problema: eu não sei ensinar, sabe, vou te recomendar tutoriais, tirar dúvidas,e provavelmente aprender, junto com você, ensinar, ensinar, eu não sei, mas posso tentar, ja te adicionei.1 ponto
-
[Patrimônio XTibia] Sua última Foto - Mapping
Ramos123 reagiu a olimpiamarkin por um tópico no fórum
Fiz um lugarzin bem simples, em cima uma casa, em baixo loja de food, simples.1 ponto -
Tibia Som V. 1.0 (Lua)
Hyuugax reagiu a Demonbholder por um tópico no fórum
Valeu pelos comentários galera, peço que comentem mais, tive bastante trabalho para fazer o sistema. Até mais.1 ponto -
[Ajuda Aqui] Nao Ignore Porfavor
FrozenGames reagiu a alldakie por um tópico no fórum
Vai la no "accountmanagement" e procure por: Depois modifique-o assim: Depois você baixe o, http://www.xtibia.co...&attach_id=7731 E troque pelo seu atual que localiza-se em: C:\xampp\htdocs\config.php by: http://www.xtibia.com/forum/topic/166227-temple-wrong-position-gesior-138/1 ponto -
Olha, quanto ao 2°, eu ja vi num outro site de OT (famoso e talz - nao posso citar o nome -), portanto nunca testei lá e nem sei s efunfa, se vocÊ procura lá, acho que você encontra. Vo ve se acho aqui, caso eu ache, te mando por PM ______ te mandei PM, quanto ao lootrate, nao sei s eé exatamente o que você procura. mais ele aument ao skill rate (ai você usa se quiser)1 ponto
-
Olha, aconselho baixa o OT reseter! Qual versão do seu OT?1 ponto
-
1 ponto
-
Supreme Baiak V7.3 [8.6]
redbull21 reagiu a Redemption por um tópico no fórum
Rsrs, pelo visto Jhosef resolvel voltar com Supremes. se quiser fazer o server 2 só fala aew se quiser alguma coisa que tem no meu server só fala aew que eu tendo te ajudar. Acho que ja sabe quem eu sou REP+ pro meu FÃ UAHSUHAS zuera1 ponto -
Ajuda Quests.xml
lucasquevedobr reagiu a Eskylo por um tópico no fórum
erro bobo , tava faltando um </quest> numa quest...1 ponto -
esse é o camilho certo de seu servidor? reveja1 ponto
-
Primeiramente, este tuto eu estou recuperando do XTibia, ele deu problema, e muita gente usa, então só estou botando denovo, ele é totalemente do King CPI, eu só mudei as fontes, arrumei erros gramaticais, tirei coisas desnecessárias, deixei cores mais visíveis, etc.. Vamos lá: Apartir de agora é ele que fala: Sistema de Mineração By KingCPI v0.1 Como funciona?? Você precisa de uma dwarven pickaxe(id:4874). (Clique na pick e clique na parede da caverna.) As paredes são os item2.itemid. Ao conseguir 1 item ele fala um som diferente de quando não consegue nada. Pro exhausted funcionar nessecita do OtScript.lib 0.1 ou superior. 1º passo: Crie um arquivo na pasta data/actions/scripts com o nome de minerando.lua Vá até o arquivo actions.xml e adicione isto:[/size] Obs: em vermelho é o id da dwarven pickaxe. Depois de: [/color] 2º passo: Volte ao arquivo mineracao.lua. Abra-o, delete TUDO que tem dentro e coloque isto: *Altere como quiser* Em azul: dificuldade Em rosa: o storage value do skill Em vermelho: itens que serão dados como prêmio Em roxo: chance de dar os referidos itens.[/color] Gostaram??? Espero que sim!! Lembrando que esta é apenas a 1ª versão da mineração, qualquer dúvida, sugestão, ou critica POSTEM! Até + :hi: Agora sou eu XJhoow Eu gostei do script, espero que gostem também.. valeu1 ponto
-
[ Formatação ] Aprenda A Criar Um Bom Tutorial!
MaarkiinHere reagiu a Henrique Moura por um tópico no fórum
Parte Um Olá a todos os usuários! Como vários já sabem, eu sou o responsável pela aprovação dos tutoriais desta sessão, movendo-os para sessão certa caso aprovados, ou fechando-os caso reprovados. E durante esses dias que venho lendo os tutoriais e testando outros, percebi que a formatação dos mesmos anda péssima. Eu poderia dizer aqui que formatar é determinar tipologia, espaçamento, entrelinhamento etc. Mas o que eu quero mostrar é a diferença entre um texto não-formatado para um que está formatado. A primeira diferença que se é possivel notar em um texto não-formatado para um que está formatado é sua "apresentação" ao usuário. Sinceramente eu prefiro ler um tutorial no Modo 1 (veja abaixo), do que no Modo 2. Modo 1 Tutorial da sessão de mapping do usuário Feyzer. Modo 2 Tutorial da sessão de aprovação do usuário 951753. Formatar NÃO é deixar seu tópico bunitinhuhh, mas sim deixá-lo agradável para quem irá ler. E isso é NECESSÁRIO aqui no XTibia. Por isso começem a escrever na linguagem culta, não fiquem colocando nenhum tipo de linguagem internetê. Saibam colocar cores e utilizar as ferramentas do Negrito, Itálico e Sublinhado. (quase) Finalizando nosso assunto, tópicos sem formatação serão convidados à serem alterados por seus donos. Caso isso não aconteça, será reprovado. Parte Dois Bom, quem me conhece sabe que eu costumo fazer sempre tutoriais relacionados a mapping, mas eu estava dando uma volta pelo forum, e eu vi muita desorganização. Muitas vezes as pessoas tem otimas idéias de tutoriais, mas não sabem como os organizarem, como criar uma interação entre o tutorial e o usuario. Oque eu quero, é ajudar aqueles que fazem tutoriais e que gostam de ajudar os outros (como eu), a fazerem seus tutoriais de forma organizada, bem formatado, sem erros de portugês (eu tbm erro algumas vezes), e por fim, que tenha uma boa estética, oque gera uma atração maior do usuario pelo tutoria. Então, vamos começar! Fazendo um Tutorial Certo, aqui você vai aprender a fazer um tutorial da melhor forma possivel, assim, você estara ajudando a você, ao forum, e aos usuarios interessados em seu tutorial. Mas qual a forma certa de se fazer um tutorial? Primeiramente, tenha uma idéia do que você realmente quer fazer. Tente sempre fazer a parte escrita do tutorial no Microsof Word, se você tiver é claro. Caso não tenho o Microsoft Word, procure fazer a parte escrita do tutorial olhando se existem erros dramaticos de português. Lembre-se que ao fazer um tutorial, você está agindo como um professor, logo você faz o tutorial para os outros, e não para sí mesmo. Nunca usem linguagem chulas (palavrões), além de ferir a sua imagem e a do forum, você poderá tomar um alerta, e quem sabe ser suspenso/banido. Dependendo do que se trata o Tutorial, não use muitas cores. Além de deichar o tutorial com uma aparecia horrivel, atrapalha a ler. Estilos de Tutoriais Como nós sabemos existem varias areas que compoem um OtSever. Eu particularmente faço mais tutoriais na area de mapping. Mas estarei ajudando em outras areas como Actions/Scripts 1- Tutorial de Mapping Ao fazer um tutorial de mapping, você deve ter em mente a dificuldade do tutorial que está fazendo. O certo seria fazer o dificil se tornar facil, mas as vezes isso não é possivel. Quando for fazer um tutorial relacionado a mapping tente ao menos seguir os seguintes passo: Não use cores em tutoriais de mapping. Como é um tutorial que contem muitas imagens, pode acabar dificultando a leitura. Em vez de usar cores, de preferencia ao negrito, itálico, e sublinhado. Use list, para separar cada passo do tutorial. Visando organiza-lo mais. Procure explicar de forma clara, descrevendo todos os ID's que deverão ser usados, para fazer o mapa que está sendo ensindo no tutorial. Em um tutorial de iniciantes é interessante tirar fotos de cada passo, e não ir fazendo o mapa, e apenas descrevendo oque o usuario deverá fazer. Em um tutorial de avançados, seria interessante explicar bem, não precisa se tirar muitas fotos (mesmo assim seria otimo tirar fotos de cada passo). Ao tirar suas fotos, recorte apenas a parte da qual se trata em determinado passo do tutorial. Por exemplo a area do mapa (sem a aba materials). Organize seu tutorial, você pode dividir ele em partes, niveis de dificuldade, tema usado, entre muitos outros. Lembre-se que você está fazendo o tutorial para outros, e muitas vezes eles podem não ter a facilidade que você tem. 2- Tutorial de Actions/Scripts Eu não tenho bastante conhecimento nessa parte de Actions, mas vale lembrar que a organização vem sempre em primeiro lugar. Aqui nesse estilo de tutorial, é meio que impossivel não usar cores, para diferenciar cada função que a action irá exercer. Quando for fazer um tutorial relacionado a actions ou scripts: Seja organizado. Não misture as coisas, faça cada parte separada, de espaço entre elas. Não deixe tudo colado. Facilite a visualização do usuario. Procure usar sempre as tags de code qndo for colocar um código. Isso facilita o reconhecimento do código (actions/script) pelo usuario. Se for usar cores, sempre observe a cor da skin do forum que está postando. No caso do XTibia, a skin é clara, então use cores escuras. Destaque as partes importantes usando negrito, e se tiver muita coisa importante, use itálico. Se tiver alguma observação, a qual fica a escolha do usuario, use sublinhado para poder destaca-la. Use list para separar os passos que o usuario deve seguir. Quando for explicar alguma coisa, não use list nem cores. Eu não sou a melhor pessoa para se fazer tutoriais, mas eu sempre tento fazer da melhor forma possivel. Visando facilitar que os interessados em aprender, possam obter uma maior facilidade no aprendizado, afinal ninguem nasceu sabendo, e ninguem sabe o bastante para não precisar ver um tutorial, ou outro, mesmo que seja para buscar idéias. Aqueles que tiverem tempo, e quiserem ver mais o menos como fazer um tutorial de mapping, poderão estar visitando os tutoriais que eu fiz, para se ter uma noção, de como fazer um tutorial organizado. Tutorial 1: Principios do Otmap Editor Tutorial 2: Tutorial de Jungles Aproveito para dizer, que estou com um projeto para a restauração de todos os Tutoriais do Forum, sendo assim, aqueles que se interessarem, poderão me enviar uma PM para maiores informações. A idéia, é pegar os tutorial que estão desorganizados, e contem conteudo de qualidade, e refaze-los, mantendo a qualidade, só que organizando-os Espero ter ajudado a todos, qualquer duvida poste aqui, ou envie uma PM, que eu estarei ajudando na medida do possivel. Parte Três Passo I - A ideia A ideia de criar um tutorial é que você tem algum conhecimento e deseja passar a outro. Porém não é simples assim, um tutorial na verdade é uma maneira de explicar algo complexo e não apenas passar algum conhecimento. Se você criou um sistema de andar de tapete por exemplo, coloca-lo apenas no forum e explicar como se usa ele não é um tutorial e sim um script. Porém você explicar seu codigo, seu funcionamento, sua ideia e dar outros exemplos com o qual se pode fazer com aquela base. Passo II - Planejamento O planejamento é essencial, isso para não ficar com informações vazadas, ai o leitor terá que percorrero todo buscando coisas que poderiam estar agrupadas e estão separadas. No inicio é legal você escreve-lo de qualquer maneira e depois ler ele e ver se tem sentido, com o tempo você estára escrevendo muito bem. A ideia aqui é um otimo tutorial, não um que terá 2 comentarios e será esquecido pelo mundo. Passo III- Linguagem A linguagem é essencial, dependendo do nivel dele algumas pessoas não entenderão termos tecnicos ou girias da internet.Evite também girias regionais pessoas de todo o Brasil e até estrangeiros irão ler ele. Uma pessoa me dizia que você deve escrever um tutorial pensando no seu amigo mais retardado e fazer uma maneira de ele entender. Porém cuidado, pois um leitor mais inteligente pode ficar ofendido. Ler varias tutoriais ajuda a ter uma linguagem da internet, que é compreendida desde a Hackers até senhoras de 90 anos. Passo IV - Vocabulario Eu comecei a usar esse vocabulario, para tentar ajudar as pessoas a compreenderam certos termos que não tem como serem retirados de certos tutorias. Nele você explica resumidamente ele para pessoas que não querem ler ele por completo ou buscam apenas algumas informações. Passo V - Exemplos Os exemplos são essenciais, dizem que as pessoas aprendem de 3 maneiras : Ouvindo, Fazendo ou Olhando alguem fazer ou tentando fazer. Eu sou o terceiro caso eu tenho que fazer algo feito para conseguir entender, portanto você deve sempre exemplificar da maneira mais clara possivel o que está sendo explicado com fotos ou codigos. Passo VI - Divisões Um tutorial deve ser dividido como uma redação, primeiro você da a introdução, ai quem não quer saber do assunto ou confudiu o titulo já pode sair. Algumas pessoas gostam de fazer um sumario (ou indice) coisa que eu não gosto mais ajuda muito. Passo VII - Imagens As imagens em certos tutorias são tudo, um topico so com palavras para pessoas inexperientes pode ser totalmente chato e cansativo e provavelmente ela lerá sem animo e não aprenderá nada. Procura colocar imagens no formato JPEG ou PNG que são leves e com boa qualidade de cor. Lembre-se que nem todos tem internet rapida e muitas fotos poderão não carregar deixando o tutorial sem sentido. Portanto também não exagere na quantidade de fotos. Passo VIII - Codigos Os codigos em certos tutoriais são mais importantes que as imagens, eles devem estar entre as tag code, que deixa ele bem formatado deixando ele mais claro. Veja quando usar CODE e QUOTE function onUse(cid, item, frompos, item2, topos) gspos = {x=933, y=928, z=12} if item.itemid == 7537 and item.actionid == 5500 then doSummonCreature("Giant Spider", gspos) doTransformItem(item.uid,7536) doDecayItem(item.uid) end end O code mantem o alinhamento do codigo deixando ele mais claro, sendo sempre END embaixo do IF correspondente. Porém foi criado para poder se colocar codigos nativos de navegadores, portanto não aceita formatação. Recomendado para o codigo inteiro ou grandes trechos.[/i] Esse não mantem o alinhamento, porém aceita formatação é melhor para explicar uma ou duas linhas de codigos. Passo IX - Produzi-lo Bem depois de se pensar muito, deve se cria-lo, no começo como ja dito é bom ter esse planejamento, é igual dirigir no começo você pensa em colocar o cinto, colocar a chave na ignição, deixar em ponto morto... Depois você ja faz automatico. Portanto escreva-o como vier na sua cabeça. Eu crio os meu tutoriais no NOTEPAD ++, tem gente que cria no WORD ai depois você joga no navegador, eu acho melhor pq varias vezes a net caiu ou o pc reiniciou e me deixou muito feliz... Passo X - Revisão Depois de faze-lo chegou a hora da revisão, você terá que reler e ver se tem erros, repetições, coisas absurdar ou algo do tipo. Depois de um tempo você nem erra mais, mas é sempre bom verificar. Passo XI- Formatação Depois de te-lo "pronto" chegou a hora de formatar, essa parte é importante tente usar cores que não ceguem o usuario e letras que ele possa enxergar. Pelo amor de deus não entupa o tutorial de emotions, pois o deixa muito infantil. Usar varias fontes é muito bom, apesar de eu não gostar disso, deixa ele mais atraente. Negrito use apenas em titulos, sub titulo e palavras importantes. Use QUOTE para dar enfase ao final de cada trecho. A tag SPOILER é muito interessante para esconder os codigos, porém alguns leitores não sabem apertar botões e perguntam aonde está o codigo. E lembre-se todos titulos mesma fonte tamanho e cor, sub titulos mesma coisa, não faça um arco-iris e sim algo legivel Passo XII - Humor Um topico como esse enche o saco para a maioria das pessoas, portanto sempre faça um humor basico, isso mesmo que seja imbecil faz o leitor voltar a atenção para o topico e não apenas ler ele. Lembre-se você quer ensina-lo e não apenas receber comentarios e fama. Passo XIII - Conclusão Essa parte é importante, pois algumas pessoas so leêm o inicio e a conclusão e colocam um comentario tosco.Experimente colocar algum erro no meio do tutorial e um no começo. Você vai ver quem leu ele de verdade e vai se divertir vendo as pessoas que disseram ter lido todo. Sempre peça comentarios, por mais que você seja anormal o principal motivo de se fazer isso é mostrar que você tem conhecimento e está disposto a expor ele. Coloque sempre creditos de fontes ou pessoas que te ajudaram. Passo XIV - Titulo O titulo é o que vai atrair as pessoas, eu por costume coloco o titulo depois de cria-lo todo e rele-lo, isso faz ele ter nexo com o conteúdo, e não ter cara de japonês e ser africano. Passo XV - Finalização É sempre bom manter um padrão do tipo de tutorial para que quem goste do seu estilo possa sempre procurar seus tutoriais. Sempre evolua, mas nunca mude sua maneira de faze-lo. Bem, agora você criou seu tutorial, não espere receber chuvas de comentarios alguns tutoriais apesar de serem muito interessantes são de assuntos pouco populares. Saia com a ideia " Se eu ajudei 2, já estou feliz". As vezes seu script ou tutorial mais "imbecil" é o seu mais famoso. E lembre-se OTSERVER não te deixa rico, faça por diversão ou como eu para aprender a base de outras linguagens corporativas. Então se você leu tudo isso, já tem um bom cacife para fazer um X-Tutorial e sempre te-lo no topo. E pelo amor :heart: nunca deixe isso no seu tutorial Espero que isso seja util, e ajude as pessoas a criarem melhores tutoriais. Parte Quatro Olá, venho aqui apresentar um tutorial de Formatação de letras, mais para os membros que acabaram de chegar ao fórum, usando essas dicas você pode crescer rapidamente sem outros membros falarem que seus tópicos são virus pela baixa quantidade de post's e o pessoal não ira de chamar de polonês pelos erros "graves" Ortograficos. A forma como o texto é apresentado ao visitante é um dos principais fatores que influenciam na decisão entre ficar e ler o texto ou ir embora e não voltar mais. Algumas das minhas dicas são: Cores- As cores devem entrar em contraste com o fundo, o normal são letras pretas em fundo branco ou vice-versa. Evite cores conflitantes que sejam difíceis de ler, como fundo roxo com letras amarelas. Tamanho- Enquanto estiver escrevendo, o próprio editor de sites que estiver utilizando se encarregará de cuidar do tamanho ideal. Se precisar alterar este tamanho por algum motivo, evite diminuir muito, ou terá que entregar uma lupa aos seus visitantes. Caso esteja em dúvida, no Dreamweaver 8 por exemplo o tamanho padrão é 13 px, já no Front Page a medida padrão é 3. Obs: Ambos utilizam medidas diferentes. Escreva textos com Letras- Muitos webmasters tem o hábito de escrever seus textos utilizando imagens. É muito comum ver menus e até o conteúdo ou parte dele feito por imagens. Em alguns navegadores é possível desativar o carregamento de imagens para tornar a navegação mais rápida, o que poderia atrapalhar a navegação. Além de que ao utilizar imagens no lugar de textos você fará com que seus visitantes tenham que esperar mais tempo para que a página seja carregada no navegador. Dica- Evite ao máximo utilizar imagens de fundo em locais onde os textos irão ser apresentados. É muito difícil encontrar uma combinação adequada entre a cor do texto e as cores da imagem, isso poderá tornar o texto ilegível para muitos. Erros de Ortografia - Este é mais um dos fatores que podem influenciar o visitante na decisão entre ficar e ler o resto do conteúdo ou deixar o post e nunca mais voltar. Após escrever um texto em seu post, verifique se não existem erros de escrita e se o texto está coerente. É muito comum pelo menos para mim escrever textos que no momento me pareceram coerentes, mas que após uma relida me fizeram sentir vergonha de ter escrito, e pior ainda é quando eu descubro erros depois de ter enviado para o site. Para verificar se as palavras do texto estão escritas corretamente eu costumo utilizar um corretor online, o Flip5. Alguns erros de ortografia são toleráveis, mas evite exagerar! AUTORES: REDLZ, PAIN, LORDZ, TIBIAA4E1 ponto