Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 06/24/12 em %

  1. Vodkart

    Npc De Recompensa

    Não precisa, é só um item então de boa, vou almoçar e depois entrego vlw ------------------------------------------------- local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid local msg = string.lower(msg) tabble = { [50] = {item = {2173,1}, storage = 201320}, [100] = {item = {2160,5}, storage = 201321}, [150] = {item = {2123,1}, storage = 201322}, [200] = {item = {2466,1}, storage = 201320} } if isInArray({"recompensa","reward", "receber", "level"}, msg) then npcHandler:say("Olá guerreiro, eu posso entregar recompensas para o level {50}, {100}, {150} e {200}! qual dos leveis você deseja receber a recompensa?", cid) talkState[talkUser] = 1 elseif talkState[talkUser] == 1 then if tabble[getNumber(msg)] then if getPlayerStorageValue(cid, tabble[getNumber(msg)].storage) <= 0 then if getPlayerLevel(cid) >= getNumber(msg) then doPlayerAddItem(cid,tabble[getNumber(msg)].item[1],tabble[getNumber(msg)].item[2]) setPlayerStorageValue(cid, tabble[getNumber(msg)].storage, 1) npcHandler:say("Parabéns! Você recebeu "..tabble[getNumber(msg)].item[2].." "..getItemNameById(tabble[getNumber(msg)].item[1]), cid) else npcHandler:say("Desculpe, mas você não tem level para receber essa recompensa!", cid) end else npcHandler:say("Desculpe, mas você já recebeu a sua recompensa!", cid) end else npcHandler:say("Desculpe, mas não tenho recompensa para esse level!", cid) end elseif isInArray({"no","nao"}, msg) then selfSay("Then not.", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) function getNumber(txt) x = string.gsub(txt,"%a","") x = tonumber(x) if x ~= nill and x > 0 then return x else return 0 end end
    3 pontos
  2. Nolis

    [Nature] Detalhamento E Beleza

    Eai galerinha, vim trazer mais um tutorial a Vocês Vou mostrar umas técnicas de aprender a detalhar seu mapa tranquilamente. (o mapa não será 100% jogavel, então cuidado se for adicioná-lo no jogo para não ter bugs) Vou usar o mapa cuja técnica ensinei nas minhas aulas de mapping, vamos por partes para vocês entenderem melhor, Siga os passos: Passo 1: Comece seu mapa com o ground, você vai determinar o tamanho do mapa pelo ground, pense em como vai querer o mapa no final (pelo tamanho) e faça sua base. Passo 2: Agora vamos começar com o simples, se vai fazer um rio, determina suas bordas, se for fazer uma praia, a mesma coisa, pois isso tudo faz parte do ground Nunca adicione detalhes e depois faça as bordas. (utilize o RAW, nao use auto border pois irá bugar) Passo 3 Após ter feito as bordas da água, imediatamente pense se vai querer mais algo no mapa, se for só isso pode começar a colocar nature, mas se for adicionar uma montanha, ou uma cachoeira talvez, vamos colocar uma ponte, que é facil, junto com uma parte da montanha, sem detalhar ainda: Passo 4 Agora podemos começar a adicionar outros itens, como detalhe, como as bordas da montanha, utilizando o RAW palette: Passo 5 Pronto, feito tudo isso, finalmente, vamos adicionar nature, lembrando que estou fazendo o mapa conforme a beleza que os detalhes vão trazer, sempre veja se tem jogabilidade nele ok? Vamos Adicionar algumas arvores (nunca repita elas, se o mapa for pequeno) Alguns arbustos e folhas/flores no chao: Passo 6 Depois da nature começa a vim outros detalhes, alguns tao minimos que não chamam atenção mas que da de perceber no final, adicione as pedrinhas, não repetindo-as, e se quiser ja podemos adicionar a cachoeira ;p Passo 7 Tenha atenção com os detalhes agora, pois colocaremos vários, como é nature, podemos acrescentar no mapa folhas, gras tufts, flores, e outras vegetações coeretivas, pode-se também mudar a montanha, se quiser =p Passo 8 Bom, o ultimo passo, poderemos adicionar outros detalhes usando o exterior, e o others, veja se consegue identificar todos os ultimos detalhes e tente fazer este mapa igual pelo menos umas 10 vezes seguindo todos os passos, até a próxima. RESULTADO FINAL: OUTROS EXEMPLOS: Créditos: Daaniel
    2 pontos
  3. Vou postar o tão famoso Guild War System Com Escudos. Vou começar pelo site : Vá em Xampp/Htdocs e crie e um arquivo chamado wars.php,dentro add isto: <?php $main_content = "<h1 align=\"center\">Guild Wars</h1> <script type=\"text/javascript\"><!-- function show_hide(flip) { var tmp = document.getElementById(flip); if(tmp) tmp.style.display = tmp.style.display == 'none' ? '' : 'none'; } --></script> <a onclick=\"show_hide('information'); return false;\" style=\"cursor: pointer;\"><h1><center>» Click to se the commands «<center></h1></a> <table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\" id=\"information\" style=\"display: none;\";> <tr align=\"center\"><b>You must send this commands in GUILD CHAT.</tr> <tr style=\"background: #512e0b;\"><td align=\"center\" class=\"white\"><b>Command</b></td><td colspan=\"2\" align=\"center\" class=\"white\"><b>Description</b></td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/war invite, guild name, fraglimit</b></td><td>Sends an invitation to start the war. Example: <font color=red><BR>/war invite, Chickens, 150<BR></font><B>(Invite a guild to war with 150 frags count.)</B></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/war invite, guild name, fraglimit, money</b></td><td>Send the invitation to start the war. Example: <font color=red><BR>/war invite, Chickens, 150, 10000</font><br><B> (Invite a guild to war with 150 frags count and payment of 10000 gold coins <- you need donate to guild to use it.)<B></td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/war accept, guild name</b></td><td>Accepts the invitation to start a war. Example: <font color=red><BR>/war accept, Chickens</font><BR><B>(Accept the war against guild \"Chickens\".)</b></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/war reject, guild name</b></td><td>Rejects the invitation to start a war. Example: <font color=red><BR>/war reject, Chickens</font><BR><B>(Reject a invitation to war from Chickens.)</B></td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/war cancel, guild name</b></td><td>Cancels the invitation. Example: <font color=red><BR>/war cancel, Chickens</font><br><b>(Cancel my guild invitation to war with Chickens.)</b></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/balance</b></td><td>See the guild balance - balance of money.</td></tr> <tr style=\"background: #F1E0C6;\"><td><b>/balance donate value</b></td><td>Deposits money on the guild's bank account. All players can donate. Example: <font color=red><BR>/balance donate 100000 </font><BR><B>(You will donate 100k to your guild balance.)</B></td></tr> <tr style=\"background: #D4C0A1;\"><td><b>/balance pick value</b></td><td>Withdraws money from the guild's bank account. Can be used only by the guild leader. Example: <font color=red><BR>/balance pick 100000 </font><BR><B>(You will withdraw 100k from your guild balance.)</B></td></tr> </table> <table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"4\"> <tr> <td style=\"background: #512e0b\" class=\"white\" width=\"150\"><b>Aggressor</b></td> <td style=\"background: #512e0b\" class=\"white\"><b>Information</b></td> <td style=\"background: #512e0b\" class=\"white\" width=\"150\"><b>Enemy</b></td> </tr><tr style=\"background: #F1E0C6;\">"; $count = 0; foreach($SQL->query('SELECT * FROM `guild_wars` WHERE `status` IN (1,4) OR ((`end` >= (UNIX_TIMESTAMP() - 604800) OR `end` = 0) AND `status` IN (0,5));') as $war) { $a = $ots->createObject('Guild'); $a->load($war['guild_id']); if(!$a->isLoaded()) continue; $e = $ots->createObject('Guild'); $e->load($war['enemy_id']); if(!$e->isLoaded()) continue; $alogo = $a->getCustomField('logo_gfx_name'); if(empty($alogo) || !file_exists('guilds/' . $alogo)) $alogo = 'default_logo.gif'; $elogo = $e->getCustomField('logo_gfx_name'); if(empty($elogo) || !file_exists('guilds/' . $elogo)) $elogo = 'default_logo.gif'; $count++; $main_content .= "<tr style=\"background: " . (is_int($count / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . ";\"> <td align=\"center\"><a href=\"?subtopic=guilds&action=show&guild=".$a->getId()."\"><img src=\"guilds/".$alogo."\" width=\"64\" height=\"64\" border=\"0\"/><br />".$a->getName()."</a></td> <td align=\"center\">"; switch($war['status']) { case 0: { $main_content .= "<b>Pending acceptation</b><br />Invited on " . date("M d Y, H:i:s", $war['begin']) . " for " . ($war['end'] > 0 ? (($war['end'] - $war['begin']) / 86400) : "unspecified") . " days. The frag limit is set to " . $war['frags'] . " frags, " . ($war['payment'] > 0 ? "with payment of " . $war['payment'] . " bronze coins." : "without any payment.")."<br />Will expire in three days."; break; } case 3: { $main_content .= "<s>Canceled invitation</s><br />Sent invite on " . date("M d Y, H:i:s", $war['begin']) . ", canceled on " . date("M d Y, H:i:s", $war['end']) . "."; break; } case 2: { $main_content .= "Rejected invitation<br />Invited on " . date("M d Y, H:i:s", $war['begin']) . ", rejected on " . date("M d Y, H:i:s", $war['end']) . "."; break; } case 1: { $main_content .= "<font size=\"6\"><span style=\"color: red;\">" . $war['guild_kills'] . "</span> : <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span></font><br /><br /><span style=\"color: darkred; font-weight: bold;\">On a brutal war</span><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ($war['end'] > 0 ? ", will end up at " . date("M d Y, H:i:s", $war['end']) : "") . ".<br />The frag limit is set to " . $war['frags'] . " frags, " . ($war['payment'] > 0 ? "with payment of " . $war['payment'] . " bronze coins." : "without any payment."); break; } case 4: { $main_content .= "<font size=\"6\"><span style=\"color: red;\">" . $war['guild_kills'] . "</span> : <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span></font><br /><br /><span style=\"color: darkred;\">Pending end</span><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ", signed armstice on " . date("M d Y, H:i:s", $war['end']) . ".<br />Will expire after reaching " . $war['frags'] . " frags. ".($war['payment'] > 0 ? "The payment is set to " . $war['payment'] . " bronze coins." : "There's no payment set."); break; } case 5: { $main_content .= "<i>Ended</i><br />Began on " . date("M d Y, H:i:s", $war['begin']) . ", ended on " . date("M d Y, H:i:s", $war['end']) . ". Frag statistics: <span style=\"color: red;\">" . $war['guild_kills'] . "</span> to <span style=\"color: lime;\">" . $war['enemy_kills'] . "</span>."; break; } default: { $main_content .= "Unknown, please contact with gamemaster."; break; } } $main_content .= "<br /><br /><a onclick=\"show_hide('war-details:" . $war['id'] . "'); return false;\" style=\"cursor: pointer;\">» Details «</a></td> <td align=\"center\"><a href=\"?subtopic=guilds&action=show&guild=".$e->getId()."\"><img src=\"guilds/".$elogo."\" width=\"64\" height=\"64\" border=\"0\"/><br />".$e->getName()."</a></td> </tr> <tr id=\"war-details:" . $war['id'] . "\" style=\"display: none; background: " . (is_int($count / 2) ? $config['site']['darkborder'] : $config['site']['lightborder']) . ";\"> <td colspan=\"3\">"; if(in_array($war['status'], array(1,4,5))) { $deaths = $SQL->query('SELECT `pd`.`id`, `pd`.`date`, `gk`.`guild_id` AS `enemy`, `p`.`name`, `pd`.`level` FROM `guild_kills` gk LEFT JOIN `player_deaths` pd ON `gk`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `gk`.`war_id` = ' . $war['id'] . ' AND `p`.`deleted` = 0 ORDER BY `pd`.`date` DESC')->fetchAll(); if(!empty($deaths)) { foreach($deaths as $death) { $killers = $SQL->query('SELECT `p`.`name` AS `player_name`, `p`.`deleted` AS `player_exists`, `k`.`war` AS `is_war` FROM `killers` k LEFT JOIN `player_killers` pk ON `k`.`id` = `pk`.`kill_id` LEFT JOIN `players` p ON `p`.`id` = `pk`.`player_id` WHERE `k`.`death_id` = ' . $death['id'] . ' ORDER BY `k`.`final_hit` DESC, `k`.`id` ASC')->fetchAll(); $count = count($killers); $i = 0; $others = false; $main_content .= date("j M Y, H:i", $death['date']) . " <span style=\"font-weight: bold; color: " . ($death['enemy'] == $war['guild_id'] ? "red" : "lime") . ";\">+</span> <a href=\"index.php?subtopic=characters&name=" . urlencode($death['name']) . "\"><b>".$death['name']."</b></a> "; foreach($killers as $killer) { $i++; if($killer['is_war'] != 0) { if($i == 1) $main_content .= "killed at level <b>".$death['level']."</b> by "; else if($i == $count && $others == false) $main_content .= " and by "; else $main_content .= ", "; if($killer['player_exists'] == 0) $main_content .= "<a href=\"index.php?subtopic=characters&name=".urlencode($killer['player_name'])."\">"; $main_content .= $killer['player_name']; if($killer['player_exists'] == 0) $main_content .= "</a>"; } else $others = true; if($i == $count) { if($others == true) $main_content .= " and few others"; $main_content .= ".<br />"; } } } } else $main_content .= "<center>There were no frags on this war so far.</center>"; } else $main_content .= "<center>This war did not began yet.</center>"; $main_content .= "</td> </tr>"; } if($count == 0) $main_content .= "<tr style=\"background: ".$config['site']['darkborder'].";\"> <td colspan=\"3\">Currently there are no active wars.</td> </tr>"; $main_content .= "</table>"; $main_content .= '<div align="right"><small><b>Customized by: <a href="http://www.xtibia.com/forum/user/240289-walef-xavier">Walef Xavier</a></b></small></div><br />'; ?> Agora vá em Xampp/Htdocs/index.php e add o seguinte: case "wars"; $subtopic = "wars"; $topic = "Guild Wars"; include("wars.php"); break; Agora para finalizar a parte do site vá em Xampp/Htdocs/Layout/Tibiacom/layout.php e add o seguinte: <a href='?subtopic=wars'> <div id='submenu_wars' class='Submenuitem' onMouseOver='MouseOverSubmenuItem(this)' onMouseOut='MouseOutSubmenuItem(this)'> <div class='LeftChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> <div id='ActiveSubmenuItemIcon_polls' class='ActiveSubmenuItemIcon' style='background-image:url(<?PHP echo $layout_name; ?>/images/menu/icon-activesubmenu.gif);'></div> <div class='SubmenuitemLabel'><font color=red>Guild Wars</font></div> <div class='RightChain' style='background-image:url(<?PHP echo $layout_name; ?>/images/general/chain.gif);'></div> </div> </a> Agora vamos para seu Ot: Va em GlobalEvents/scripts/start.lua e add o seguinte: db.executeQuery("DELETE FROM `guild_wars` WHERE `status` = 0 AND `begin` < " .. (os.time() - 2 * 86400) .. ";") db.executeQuery("UPDATE `guild_wars` SET `status` = 5, `end` = " .. os.time() .. " WHERE `status` = 1 AND `end` > 0 AND `end` < " .. os.time() .. ";") Agora vá em Lib e crie um arquivo .lua chamado 101-war,dentro add o seguinte: WAR_GUILD = 0 WAR_ENEMY = 1 Agora para finalizar vamos colocar os comandos em Talkactions ! Vá em Talkactions/scripts e crie dois arquivos chamados war.lua e balance.lua,dentro add o seguinte: War.lua function onSay(cid, words, param, channel) local guild = getPlayerGuildId(cid) if(not guild or getPlayerGuildLevel(cid) < GUILDLEVEL_LEADER) then doPlayerSendChannelMessage(cid, "", "You cannot execute this talkaction.", TALKTYPE_CHANNEL_W, 0) return true end local t = string.explode(param, ",") if(not t[2]) then doPlayerSendChannelMessage(cid, "", "Not enough param(s).", TALKTYPE_CHANNEL_W, 0) return true end local enemy = getGuildId(t[2]) if(not enemy) then doPlayerSendChannelMessage(cid, "", "Guild \"" .. t[2] .. "\" does not exists.", TALKTYPE_CHANNEL_W, 0) return true end if(enemy == guild) then doPlayerSendChannelMessage(cid, "", "You cannot perform war action on your own guild.", TALKTYPE_CHANNEL_W, 0) return true end local enemyName, tmp = "", db.getResult("SELECT `name` FROM `guilds` WHERE `id` = " .. enemy) if(tmp:getID() ~= -1) then enemyName = tmp:getDataString("name") tmp:free() end if(isInArray({"accept", "reject", "cancel"}, t[1])) then local query = "`guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild if(t[1] == "cancel") then query = "`guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy end tmp = db.getResult("SELECT `id`, `begin`, `end`, `payment` FROM `guild_wars` WHERE " .. query .. " AND `status` = 0") if(tmp:getID() == -1) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending invitation for a war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end if(t[1] == "accept") then local _tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = _tmp:getID() < 0 or _tmp:getDataInt("balance") < tmp:getDataInt("payment") _tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low to accept this invitation.", TALKTYPE_CHANNEL_W, 0) return true end db.query("UPDATE `guilds` SET `balance` = `balance` - " .. tmp:getDataInt("payment") .. " WHERE `id` = " .. guild) end query = "UPDATE `guild_wars` SET " local msg = "accepted " .. enemyName .. " invitation to war." if(t[1] == "reject") then query = query .. "`end` = " .. os.time() .. ", `status` = 2" msg = "rejected " .. enemyName .. " invitation to war." elseif(t[1] == "cancel") then query = query .. "`end` = " .. os.time() .. ", `status` = 3" msg = "canceled invitation to a war with " .. enemyName .. "." else query = query .. "`begin` = " .. os.time() .. ", `end` = " .. (tmp:getDataInt("end") > 0 and (os.time() + ((tmp:getDataInt("begin") - tmp:getDataInt("end")) / 86400)) or 0) .. ", `status` = 1" end query = query .. " WHERE `id` = " .. tmp:getDataInt("id") if(t[1] == "accept") then doGuildAddEnemy(guild, enemy, tmp:getDataInt("id"), WAR_GUILD) doGuildAddEnemy(enemy, guild, tmp:getDataInt("id"), WAR_ENEMY) end tmp:free() db.query(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. msg, MESSAGE_EVENT_ADVANCE) return true end if(t[1] == "invite") then local str = "" tmp = db.getResult("SELECT `guild_id`, `status` FROM `guild_wars` WHERE `guild_id` IN (" .. guild .. "," .. enemy .. ") AND `enemy_id` IN (" .. enemy .. "," .. guild .. ") AND `status` IN (0, 1)") if(tmp:getID() ~= -1) then if(tmp:getDataInt("status") == 0) then if(tmp:getDataInt("guild_id") == guild) then str = "You have already invited " .. enemyName .. " to war." else str = enemyName .. " have already invited you to war." end else str = "You are already on a war with " .. enemyName .. "." end tmp:free() end if(str ~= "") then doPlayerSendChannelMessage(cid, "", str, TALKTYPE_CHANNEL_W, 0) return true end local frags = tonumber(t[3]) if(frags ~= nil) then frags = math.max(10, math.min(1000, frags)) else frags = 100 end local payment = tonumber(t[4]) if(payment ~= nil) then payment = math.max(100000, math.min(1000000000, payment)) tmp = db.getResult("SELECT `balance` FROM `guilds` WHERE `id` = " .. guild) local state = tmp:getID() < 0 or tmp:getDataInt("balance") < payment tmp:free() if(state) then doPlayerSendChannelMessage(cid, "", "Your guild balance is too low for such payment.", TALKTYPE_CHANNEL_W, 0) return true end db.query("UPDATE `guilds` SET `balance` = `balance` - " .. payment .. " WHERE `id` = " .. guild) else payment = 0 end local begining, ending = os.time(), tonumber(t[5]) if(ending ~= nil and ending ~= 0) then ending = begining + (ending * 86400) else ending = 0 end db.query("INSERT INTO `guild_wars` (`guild_id`, `enemy_id`, `begin`, `end`, `frags`, `payment`) VALUES (" .. guild .. ", " .. enemy .. ", " .. begining .. ", " .. ending .. ", " .. frags .. ", " .. payment .. ");") doBroadcastMessage(getPlayerGuildName(cid) .. " has invited " .. enemyName .. " to war till " .. frags .. " frags.", MESSAGE_EVENT_ADVANCE) return true end if(not isInArray({"end", "finish"}, t[1])) then return false end local status = (t[1] == "end" and 1 or 4) tmp = db.getResult("SELECT `id` FROM `guild_wars` WHERE `guild_id` = " .. guild .. " AND `enemy_id` = " .. enemy .. " AND `status` = " .. status) if(tmp:getID() ~= -1) then local query = "UPDATE `guild_wars` SET `end` = " .. os.time() .. ", `status` = 5 WHERE `id` = " .. tmp:getDataInt("id") tmp:free() doGuildRemoveEnemy(guild, enemy) doGuildRemoveEnemy(enemy, guild) db.query(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has " .. (status == 4 and "mend fences" or "ended up a war") .. " with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end if(status == 4) then doPlayerSendChannelMessage(cid, "", "Currently there's no pending war truce from " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end tmp = db.getResult("SELECT `id`, `end` FROM `guild_wars` WHERE `guild_id` = " .. enemy .. " AND `enemy_id` = " .. guild .. " AND `status` = 1") if(tmp:getID() ~= -1) then if(tmp:getDataInt("end") > 0) then tmp:free() doPlayerSendChannelMessage(cid, "", "You cannot request ending for war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end local query = "UPDATE `guild_wars` SET `status` = 4, `end` = " .. os.time() .. " WHERE `id` = " .. tmp:getDataInt("id") tmp:free() db.query(query) doBroadcastMessage(getPlayerGuildName(cid) .. " has signed an armstice declaration on a war with " .. enemyName .. ".", MESSAGE_EVENT_ADVANCE) return true end doPlayerSendChannelMessage(cid, "", "Currently there's no active war with " .. enemyName .. ".", TALKTYPE_CHANNEL_W, 0) return true end balance.lua local function isValidMoney(value) if(value == nil) then return false end return (value > 0 and value <= 99999999999999) end function onSay(cid, words, param, channel) local guild = getPlayerGuildId(cid) if(guild == 0) then return false end local t = string.explode(param, ' ', 1) if(getPlayerGuildLevel(cid) == GUILDLEVEL_LEADER and isInArray({ 'pick' }, t[1])) then if(t[1] == 'pick') then local money = { tonumber(t[2]) } if(not isValidMoney(money[1])) then doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0) return true end local result = db.getResult('SELECT `balance` FROM `guilds` WHERE `id` = ' .. guild) if(result:getID() == -1) then return false end money[2] = result:getDataLong('balance') result:free() if(money[1] > money[2]) then doPlayerSendChannelMessage(cid, '', 'The balance is too low for such amount.', TALKTYPE_CHANNEL_W, 0) return true end if(not db.query('UPDATE `guilds` SET `balance` = `balance` - ' .. money[1] .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;')) then return false end doPlayerAddMoney(cid, money[1]) doPlayerSendChannelMessage(cid, '', 'You have just picked ' .. money[1] .. ' money from your guild balance.', TALKTYPE_CHANNEL_W, 0) else doPlayerSendChannelMessage(cid, '', 'Invalid sub-command.', TALKTYPE_CHANNEL_W, 0) end elseif(t[1] == 'donate') then local money = tonumber(t[2]) if(not isValidMoney(money)) then doPlayerSendChannelMessage(cid, '', 'Invalid amount of money specified.', TALKTYPE_CHANNEL_W, 0) return true end if(getPlayerMoney(cid) < money) then doPlayerSendChannelMessage(cid, '', 'You don\'t have enough money.', TALKTYPE_CHANNEL_W, 0) return true end if(not doPlayerRemoveMoney(cid, money)) then return false end db.query('UPDATE `guilds` SET `balance` = `balance` + ' .. money .. ' WHERE `id` = ' .. guild .. ' LIMIT 1;') doPlayerSendChannelMessage(cid, '', 'You have transfered ' .. money .. ' money to your guild balance.', TALKTYPE_CHANNEL_W, 0) else local result = db.getResult('SELECT `name`, `balance` FROM `guilds` WHERE `id` = ' .. guild) if(result:getID() == -1) then return false end doPlayerSendChannelMessage(cid, '', 'Current balance of guild ' .. result:getDataString('name') .. ' is: ' .. result:getDataLong('balance') .. ' bronze coins.', TALKTYPE_CHANNEL_W, 0) result:free() end return true end Agora vá em Talkactions/talkactions.xml e add as duas tags: <talkaction words="/war" channel="0" event="script" value="war.lua" desc="(Guild channel command) War management."/> <talkaction words="/balance" channel="0" event="script" value="balance.lua" desc="(Guild channel command) Balance management."/> Pronto,seu Guild War Systema está instalado...mas para funcionar necessitará das tabelas na sua database e do Tfs 0.4 .Vou posta-los abaixo,respectivamente. . Tabelas . Para quem ainda não sabe add tabelas a sua database,vou ensinar: Acesse seu phpmyadmin,digite sua senha (caso tenha),clique no nome da sua database a esquerda,assim que carregar a sua database clique em SQL lá em cima...Aparecerá um espaço em branco lá voce irá add as seguintes tabelas...e depois clicar em Executar. CREATE TABLE IF NOT EXISTS `guild_wars` ( `id` INT NOT NULL AUTO_INCREMENT, `guild_id` INT NOT NULL, `enemy_id` INT NOT NULL, `begin` BIGINT NOT NULL DEFAULT '0', `end` BIGINT NOT NULL DEFAULT '0', `frags` INT UNSIGNED NOT NULL DEFAULT '0', `payment` BIGINT UNSIGNED NOT NULL DEFAULT '0', `guild_kills` INT UNSIGNED NOT NULL DEFAULT '0', `enemy_kills` INT UNSIGNED NOT NULL DEFAULT '0', `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `status` (`status`), KEY `guild_id` (`guild_id`), KEY `enemy_id` (`enemy_id`) ) ENGINE=InnoDB; ALTER TABLE `guild_wars` ADD CONSTRAINT `guild_wars_ibfk_1` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_wars_ibfk_2` FOREIGN KEY (`enemy_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE; ALTER TABLE `guilds` ADD `balance` BIGINT UNSIGNED NOT NULL AFTER `motd`; CREATE TABLE IF NOT EXISTS `guild_kills` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `guild_id` INT NOT NULL, `war_id` INT NOT NULL, `death_id` INT NOT NULL ) ENGINE = InnoDB; ALTER TABLE `guild_kills` ADD CONSTRAINT `guild_kills_ibfk_1` FOREIGN KEY (`war_id`) REFERENCES `guild_wars` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_kills_ibfk_2` FOREIGN KEY (`death_id`) REFERENCES `player_deaths` (`id`) ON DELETE CASCADE, ADD CONSTRAINT `guild_kills_ibfk_3` FOREIGN KEY (`guild_id`) REFERENCES `guilds` (`id`) ON DELETE CASCADE; ALTER TABLE `killers` ADD `war` INT NOT NULL DEFAULT 0; Pronto o Guild Wars System está totalmente instalado...falta apenas o Tfs 0.4 ! O meu The Forggoten Server 0.4 também comprei do mesmo cara que me vendeu o GWS,tenho um também que comprei na ChaitoSoft,mais conversei com eles por Msn e não permitirão que eu postasse pra ninguem,rsrs. Então vou postar o link do download e o scan: TFS 0.4 DEV Scan Ai está a DEV.... Também será necessario usar o items.xml e items.otb , a não ser que o que vc tenha seja compativel com o distro. Item.xml e otb Scan Obs: Este distro não carrega scripts que tenha a função "dbExecute.query",sempre que tiver mude para "db.query" .Todo o script ja está configurado para funcionar assim,não se preucupe. Só isso,obrigado a todos...que Deus Abençoe voces sempre !
    1 ponto
  4. Iai Xtibianos vim trazer meu Poketibia Erondino Site Server v11 com varios sistemas novos,bugs corrigidos etc.... vamo ver o que fiz de novo nessa versao 11.2 v11.2 (1 a 49 itens listados) 1-Colocado boost sistema (Boost sistema aumenta o ataque dos pokemon pelos moves m1,m2,m3 etc.. n aumenta vida speed etc... 2-Colocada novas sprites nos itens: >Lendaria box >Shiny box >Johto Box >Shiny rod 2 >Shiny rod 1 >Box Thirty 3-Colocado sistema m1 a m12 nos pokemon: >Shiny aerodactyl >Shiny Snorlax >Shiny victreebel >Shiny Beedrill >Shiny Alakazam >Shiny Dragonair >Shiny Dragonite 4-Concertado pokemon que vinha ne box bugado: >Shiny zubat >Shiny Seadra >Shiny Muk 5-Acrescentado na shiny box >Shiny aerodactyl >Shiny Snorlax >Shiny victreebel >Shiny Beedrill >Shiny Alakazam >Shiny Dragonair >Shiny Dragonite 6-Tirado o bug da invisibiladade do gengar 7-Concertado loot: >Eevee 8-Acrescentado ou concertado moves nos pokemon: >Abra >Beedrill >Clefairy >Chansey >Blissey >Dratini >Dodrio >Eevee >Exeggcute 9-Concerta o bug das novas ball que n dava para heala 10-Colocado um npc de boost no 1 andar de cada templo 11-Posto um npc de task por itens no laboratorio do bill onde o player tem q dar para ele 30 feather e em troca ele da 10 hd e 500 de exp 12-Colocado um npc de task por itens na cabana indo para pewter quest onde o player tem q levar 100 stone orb e em troca recebera 1 rock stone e 5000 de exp 13-Adicionados novas mensagens no global events que ira ajudar os players durante o jogo 14-Colocado shiny estaca magica no server... 15-Trocado os itens das estacas magicas agora a estaca magica é o msm iten so q sem o brilho e a shiny estaca magica contem brilho 16-Colocado Scyther na estaca magica 17-Trocado o premio da quest das ball pois ninguem vai fazer ela posto para ganhar 15 ultra ball e 30 super ball 18-Fortalecido os pokemons >Shiny Scyther >Elite Hitmonlee >Elite Hitmonchan 19-Concertado o loot e a exp nos pokemon johto (nas hunts) >Aipom >Ampharos >Ariados >Azumarill >Bellossom >Crobat >Croconaw >Delibird >Donphan >Dunsparce >Elekid >Feraligatr >Flaaffy >Furret >Girafarig >Granbull >Hoothoot >Houndoom >Larvitar >Ledian >Ledyba >Mareep >Marill >Meganium >Misdreavus >Noctowl >Phanpy >Pichu >Pineco >Politoed >Scizor >Sentret >Snubbull >Spinarak >Stantler >Steelix >Sunkern >Totodile >Typhlosion >Tyranitar obs-Essas sao as hunts de johtos ja existentes no 1 continente... 20-Facilitado a quest da box 2... 21-Dificultado a quest de lvl 30 e tirado o tp para ir embora pois pela porta da para ir embora... 22-Adicionado um segundo continente com novas cidades onde os pokemons e as ilhas q fica ao redor das cidades sao johtos obs-As casas das cidades n da para comprar obs2-Mapa feito por betinhowz666 tirei as hunts kanto q tinha e posto hunts johtos 23-Adicionado um bloco de notas para saber quais johtos tem nos 2 continentes 24-Adicionado um npc que joga 21 e jogo dos 6 em cima do cassino em celadon e umas placas explicando como jogar (o jogo n ganha nem pede muita grana é mais para diversao ) 25-Colocado evoluçoes nos pokemons johto que adicionei sistema m1 na v10 26-Colocado control mind no haunter 27-Colocado para vim pokemons johto nas rods: >Old rod >Advanced Rod >Shiny rod 1 >Shiny Rod2 28-Agora os npcs saffari da 30 saffari ball ao entrar no saffari 29-Aumentado o preço para o saffari kanto de 300dl para 500dl 30-Colocado para fearow pidgeotto e pidgeot para pegar a pena brilhosa 31-Feito equipe rocket quest onde o giovanni pede uma pena brilhosa em troca de uma box 2 32-Colocado um buero com um caixote em cima no cassino em saffron para dar acesso ao esconderijo da equipe rocker 33-Colocado o giovanni no esconderijo da equipe rocket 34-Deletado a ilha da quest da venom stone quest e posto agua 35-Feito um npc de quest de venom stone ele pede 50 bat wing e em troca ele da 1 venom stone 36-Posto o npc da quest da venom stone em lavender 37-Modificado a area de dodou e dodrio de fuchsia e posto hunts de: >Ponyta >Rapidash >Doduo >Dodrio >Tauros 38-Trocado a localizaçao do npc do saffari johto agora ele se localiza em uma ilha la no continente johto 39-Feito uma ponte na entrada da pewter quest ate uma cidade do 2 continente 40-Expandido a ponte que vai de lavender ate a floresta de vermilion agora ela pode ir tbm ate a floresta de fuchsia 41-Feito uma ball chamada "mega ball" ela pega todos pokemon de primeira a fomra dela é de pokeball o efeito on e fail cath tbm mas quando captura vira uma dark ball (Como minha equipe viajo e me mando uma master ball inutil foi o unico jeito q achei espero que compreendem e aguarde a proxima versao com ela arrumada ) obs- Id dela é 2149 42-Configurado o arquivo cath para fica mais facil pega os pokemons 43-Concertado o comando /town pois algumas cidades n tinha ficando... /town 1 --> Saffron /town 2 --> Cerulean /town 3 --> Lavender /town 4 --> Fuchsia /town 5 --> Celadon /town 6 --> Viridian /town 7 --> Cinnabar /town 8 --> Pewter /town 9 --> Vermilion /town 10 --> Pallet /town 11 -->Ilha inicial 44-Trocado a first city que era parllet por uma ilha obs-Essa ilha so server para pega o pokemon inicial e o kit ao sair dela nao tem volta 45-Feito uma ponte de pallet ate cinnabar 46-Feito quest da shiny estaca magica 47-Colocado um navio na praia de cerulean com acesso para a ilha de pigeotto 48-Colocado um navio na ilha de pigeotto para ir para a praia de cerulean obs-Ao ir na direçao do navio se vai direto para a ilha depois fasso um sistema para demorar chega um pouco 49-Tirado a lendaria box quest Download do Poketibia Erondino Site Server v11.2: clike aki Scan do server: Aki Versao Atualizada v13.1: http://www.xtibia.com/forum/topic/210168-poketibia-erondio-site-e-suas-versoes/page__fromsearch__1 Créditos v11.2: Erondino Nic Loeher Urbanchaos Caioo Gazulina (Pelo client) betinhowz666 (usei seu mapa para o 2 continente) obs-Vlw ai ekipe versao fico muito mais massa com suas ajudas obs2-Urbanchaos que pena que vc tem q sair da ekipe mas vc sempre será bem vindo de volta obg pelo seu trabalho na v11
    1 ponto
  5. Tryller

    Tryller's Ip Changer - V1.6

    Tryller's IP Changer Tryller's IP Changer é um aplicativo para substituir o host no TibiaClient. Ele foi desenvolvido em C++, dispenssando a instalação de qualquer outro programa para roda-lo. Isto funciona com os protocolos 7.4, 7.5, 7.6, , 7.2. 7.8, , 7.81, 7.9, 7.92, 8.0, 8.1, 8.11, 8.20, 8.21, 8.22, 8.3, 8.31, 8.4, 8.41, 8.42, 8.5, 8.52, 8.54, 8.55, 8.56, 8.57, 8.6, 8.61, 8.62, 8.7, 8.71, 8.72, 8.73, 8.74, 9.0, 9.1, 9.2, 9.31, 9.4, 9.41, 9.42, 9.43, 9.44, 9.45, 9.46, , 9.51, 9.52, 9.53, 9.54 e 9.6 Imagens: ChangeLog Versão 1.6 Suporte para 9.6 Versão 1.4 Suporte para 9.54 Versão 1.2 Suporte para Tibia 9.51, 9.52 e 9.53 Corrigido alguns erros na leitura da memória do ipchanger. Versão 1.1 Suporte para Tibia 9.50. Removido "Informations" problemas devem ser corrigidos antes. Corrigido erro que causava uso extremo de memoria. Refeito estrutura GUI Versão 1.0 Suporte para todas as versões do Tibia. Salva a lista de ip's, para isto você deve ir até IP List e adiciona-lo. Suporte para Multi Client. Informações sobre os servidores. Agora o IP Changer pisca a tela do Tibia e Altera o Titulo quando troca IP. Arquivos para atualizar comparando com a versão anterior. IPChanger.exe files/Addresses.xml Download: http://www.mediafire...u1906jr1xsahghn
    1 ponto
  6. duvidas sugestão e criticas sao bem vindas nota de 0/10 agradeço
    1 ponto
  7. beddy

    Tibia Harry Potter - Projeto Xtibia

    FUI OBRIGADO A PARAR COM O PROJETO, POIS UM CARA, CONSEGUIU OS SPRITES DO QUILANTE, E COMO AGORA É DOMINIO PUBLICO, TODOS PODERÃO FAZER UM SERVIDOR DE HARRY POTTER.. ENTÃO COMO EU SOU BONZINHO, VOU PASSAR O PROJETO PARA VOCES EKSTIBIANOS! QUER BAIXAR O TIBIA HARRY POTTER (80% feito) ? CLIQUE AQUI! O Projeto A ideia do projeto é antiga, tive vários lapsos, e finalmente cheguei na conclusão de que o Tibia Harry Potter, sim, irá existir. [Está Existindo] O projeto visualiza um novo tipo de jogabilidade, uma jogabilidade “lenta”, com um UP mais dificultado, onde é necessário o uso de amizade, necessidade de comercio, necessidade de calma. Lembre-se bem da época em que você “jogava” Tibia (primeiro mês), não era divertido a famosa Rookgaard? Bem... quando eu comecei a jogar, estava na versão 7.4, lembro que para eu sair de rookgaard demoraram umas 3 semanas... O engraçado é; estas 3 semanas foram umas das melhores semanas tibianas que tive. Conversei, procurei por coisas novas, e a melhor de todas, não estava preocupado em UPAR FUCKING HARD! é.. a ideia do Tibia Harry Potter, é para atender todo o tipo de gosto. Não importa se gosta de treinar magic level, se gosta de upar, se gosta de conversar, se gosta de quests, se gosta de fazer dinheiro. Você poderá escolher o que fazer! Voce poderá se divertir! Sobre o Tibia Harry Potter Existe um tíbia Harry potter no mercado, porem acho ele muito “comercial”. No "meu" Tibia Harry Potter terá VIPs e DONATEs, porém, o servidor não será em função disso. As doações funcionarão assim: Quem achar que deve doar, para ajudar o servidor, terá algumas vantagens. Porem se você quer pegar TOP, não presisará doar para isso? (Entendeu?) Como será feito: O projeto é muito complexo... porem, não é impossível. Deverá ser feita muitas sprites novas, para usarmos da temática do Harry Potter; não haverá magias do Tibia (como: exura, etc.), haverá funções diferentes, muitas actions, muitas quests. Você que lê ou leu o livro, com certeza terá uma maior facilidade de desvendar os mistérios! Olha só... não tinha pensado nisso!! Alem de diversão pode servir como educacional... vai que alguém quer ler o livro para ter mais ideia do jogo né? (risos) Ficará PERFEITO, lembrando que está em andamento! Podem aguardar ansiosamente!!! Equipe: Beddy – administro, scripter, spriter, RPGMaker, mapper. Erickrusha – Mapper. Preciso: Scripter – será abertas vagas no futuro! (próximo) Web Designer – será abertas vagas no futuro! (próximo) Custo: O custo será... será... normal, mas pretendo a auto-suficiencia logo nos primeiros meses. Beta: O Beta não tem data prevista. Não gosto de prometer coisas e depois não poder ser cumprida. Vamos ao que interessa?! O jogo: Bem, você irá nascer em uma casa. Nesta casa você irá ver um NPC, e ele te levará para a escola de bruxaria, Hogwarts. Mas existe um caminho para Hogwarts correto? Então... você irá para Diagonal, onde fica a estação de trem!! Isso mesmo, de lá você poderá ir para Hogwarts quando quiser. - Diagonal: seria a cidade para você aprender a jogar, mas que pode ser utilizada quando quiser. Você pode ir e sair de diagonal a hora que bem quiser. - Hogwarts: será o castelo, onde você fará de tudo! Onde você criará items, aprenderá magias e tudo mais. Como é a jogabilidade? Bem, é simples. Você é um aluno de Hogwarts, você terá sua varinha, poderá comprar outras varinhas... Porem elas sozinhas não te dão um poder esperado, então você pode usar as Horcruxs, que aumentam o poder de sua varinha. (Horcrux se equipa no ring). Voce poderá caçar, com as varinhas. Voce poderá criar poções, para fazer dinheiro. Você poderá treinar magic level, oque almentaria o poder da varinha, e poderá obter habilidades secretas. Você poderá explorar, e fazer missões, fazer equipamentos. Você poderá fazer amigos e se divertir cada vez mais. Preview do Laucher: Planos Futuros: - Criar sistema de ALAS, como Grifinoria, Sonserina, Corvinel (com GUILD FLAGS) Screens, Show OFFs... Entrada de Hogwarts Criando Poçoes! Use o martelo no cristal e retire um Life Cristal Com o Life Cristal em maos, use a magia "preparar" (provisoriamente) Então será adicionado carga em seu caldeirão, dai é só usar um vial no caldeirão que será feito a poção Vassoura! Equipe ela no local correto, então... Ganhe Outfit e speed com ela! Atravessando parede para ir para HOGWARTS! Novo dinheiro. O Galeao! QUER FAZER PARTE DA EQUIPE? http://www.xtibia.co...xtibia-recruta/ Venho aqui com incentivo de Gustavo, e já logo agradeço a ele. Abraço! Atenciosamente, Beddy, dono/admnistrador TIBIA HARRY POTTER.
    1 ponto
  8. milbradt

    Pvp Team

    Meu veio.. tem um MOD aqui meio parecido com oq você quer, se ficar interesado ai o link. http://www.xtibia.co...to-team-battle/
    1 ponto
  9. Folspa

    Citys Com Parcel

    Tem que selecionar o depot e escolher a cidade.
    1 ponto
  10. Em actions>scripts crie um arquivo.lua e cole isto dentro: local text = "Você lançou a pedra na sua cabeça" --- mensagem local gexp = 1000 ---quanto de exp function onUse(cid, item, frompos, item2, topos) if item.itemid == 5600 and doPlayerAddExp(cid, gexp)then doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, text) end end Em actions.xml cole a tag: <action itemid="5600" script="NOMEDOSEUARQUIVO.lua"/> IMAGEM Uploaded with ImageShack.us Em vermelho, é onde o player deve dar use, que no caso é a parte de id 5600.
    1 ponto
  11. xD, tinha postado aki pq achei q a galera do Xtibia gosta-se do anime Naruto, mas pelo que vejo eh um fansite mais chegado ao tibia mesmo.. kkkkk tinha umas outras em maos aki de outros clans legais.. mas no futuro quando o Narutibia vier estar mais ativo no xtibia trarei spells unica dos clans ao site!
    1 ponto
  12. Vodkart

    [Creaturescripts] Walking Effect On Outfit

    tenta usar assim: function onLogin(cid) registerCreatureEvent(cid, "EffectOutLogin") registerCreatureEvent(cid, "OutfitEffects") return doCreatureChangeOutfit(cid,{lookType = getCreatureOutfit(cid).lookType, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet, lookAddons = getCreatureOutfit(cid).lookAddons}) end local events = {} function onOutfit(cid, old, current) local effect = { [136] = 3, [128] = 3, -- citizen [270] = 27,[273] = 27, -- jester [156] = 61,[152] = 61, -- assassin [147] = 44,[143] = 44, -- barbarian [148] = 45,[144] = 45, -- druid [157] = 68,[153] = 68, -- beggar [149] = 36,[145] = 36, -- wizard [279] = 17,[278] = 17, -- brotherwood [137] = 39,[129] = 39, -- hunter [141] = 66,[133] = 66, -- summoner [142] = 34,[134] = 34, -- warrior [155] = 31,[151] = 31, -- pirate [158] = 46,[154] = 46, -- shaman [288] = 6,[289] = 6 -- demonhunter } local o,c= effect[old.lookType],effect[current.lookType] if getPlayerAccess(cid) > 2 then return true elseif (not o or not c or old.lookAddons == 3 and o) then stopEvent(events[getPlayerGUID(cid)]) end if current.lookAddons == 3 and c then function WalkEffect(cid, c, pos) if not isCreature(cid) then return LUA_ERROR end if c then p = getThingPos(cid) local x = {[0] = {x=p.x, y=p.y+1, z=p.z},[1] = {x=p.x-1, y=p.y, z=p.z},[2] = {x=p.x, y=p.y-1, z=p.z},[3] = {x=p.x+1, y=p.y, z=p.z}} if p.x ~= pos.x or p.y ~= pos.y or p.z ~= pos.z then doSendMagicEffect(x[getCreatureLookDirection(cid)], c) end events[getPlayerGUID(cid)] = addEvent(WalkEffect, 100, cid, c, p) end return true end WalkEffect(cid, c, {x=0, y=0, z=0}) end return true end
    1 ponto
  13. Fir3element

    Npc Bugado

    Não mexo com items a muuito tempo, me adc no msn ai que posso ajudar melhor.
    1 ponto
  14. Vodkart

    Npc

    pqp velho, que script chato de fazer, ele não é difícil, só é bem chatinho msm ¬¬ Mods: <?xml version="1.0" encoding="UTF-8"?> <mod name="Kung Task" version="1.0" author="Vodkart" contact="xtibia.com" enabled="yes"> <config name="kung_func"><![CDATA[ kungtask = { ["dragon"] = {storages = {620001,630001}, count = 1500,exp = 1000}, ["dragon lord"] = {storages = {620002,630002}, count = 600, exp = 2000}, ["hydra"] = {storages = {620003,630003}, count = 240, exp = 3000}, ["frost dragon"] = {storages = {620004,630004} ,count = 600, exp = 4000}, ["dragon guardian"] = {storages = {620005,630005} ,count = 1000, exp = 5000}, ["demondras"] = {storages = {620006,630006} ,count = 600, exp = 6000}, ["thunder dragon"] = {storages = {620007,630007} ,count = 1000, exp = 7000} } function ZerarTask(cid) for var, ret in pairs(kungtask) do if getPlayerStorageValue(cid, ret.storages[2]) ~= -1 and getPlayerStorageValue(cid,ret.storages[1]) <= os.time() then setPlayerStorageValue(cid, ret.storages[2], -1) setPlayerStorageValue(cid, ret.storages[1], -1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You not have completed the task of "..var.." in the request time and it was zeroed") end end end ]]></config> <event type="login" name="KungRegister" event="script"><![CDATA[ function onLogin(cid) registerCreatureEvent(cid, "KillingKung") return true end]]></event> <event type="kill" name="KillingKung" event="script"><![CDATA[ domodlib('kung_func') function onKill(cid, target) if(isMonster(target) == TRUE) then local n = getCreatureName(target) local name_monster = kungtask[string.lower(n)] if(name_monster and getPlayerStorageValue(cid,name_monster.storages[1]) >= os.time()) then local contagem = getPlayerStorageValue(cid, name_monster.storages[2]) if contagem > name_monster.count then return true end setPlayerStorageValue(cid, name_monster.storages[2], contagem+1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, ""..((contagem+1) < name_monster.count and "["..n.." Task] "..(contagem+1).."/"..name_monster.count or "["..n.." Task] Finaliza")..".") end end return true end]]></event> <globalevent name="ZerarTask" interval="60" event="script"><![CDATA[ domodlib('kung_func') function onThink(interval, lastExecution) local on = getPlayersOnline() if #on > 0 then for i = 1, #on do ZerarTask(on[i]) end end return true end]]></globalevent> </mod> Npc: domodlib('kung_func') local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid local msg = string.lower(msg) local days = 7 if isInArray({"task","mission", "missão"}, msg) then npcHandler:say("Me diga o nome do monstro que você deseja fazer a task!", cid) talkState[talkUser] = 1 elseif talkState[talkUser] == 1 then if kungtask[msg] then if getPlayerStorageValue(cid, kungtask[msg].storages[1]) == -1 then stor,name,count,stor2 = kungtask[msg].storages[1],msg,kungtask[msg].count,kungtask[msg].storages[2] npcHandler:say("Ótimo! Você precisa matar pelo menos "..count.." "..name.." em um prazo de "..days.." dias para te dar recompensa. Aceita? {yes}", cid) talkState[talkUser] = 2 else npcHandler:say("Você já está participando desta task.", cid) talkState[talkUser] = 1 end else npcHandler:say("digite o nome certo do monstro.", cid) talkState[talkUser] = 1 end elseif (msgcontains(msg, 'yes') and talkState[talkUser] == 2) then setPlayerStorageValue(cid, stor, os.time()+days*86400) setPlayerStorageValue(cid, stor2, 0) npcHandler:say("Você já pode começar a matar "..name..". Volte aqui quando matar "..count.." "..name.." para ser recompensado. O prazo é até "..os.date("%d %B %Y %X", getPlayerStorageValue(cid,stor))..".", cid) talkState[talkUser] = 0 elseif isInArray({"entregar","receber", "recompensa"}, msg) then for var, ret in pairs(kungtask) do if getPlayerStorageValue(cid,ret.storages[1]) >= os.time() and getPlayerStorageValue(cid,ret.storages[2]) >= ret.count then doPlayerAddExp(cid, ret.exp) setPlayerStorageValue(cid, ret.storages[2], -1) setPlayerStorageValue(cid, ret.storages[1], -1) return npcHandler:say("Obrigado! você recebeu "..ret.exp.." de experience por ter terminado a task do "..var, cid) else return npcHandler:say("Desculpe, mas você não terminou nenhuma missão.", cid) end end elseif isInArray({"no","nao"}, msg) then selfSay("tudo bem então.", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end return TRUE end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) no npc vc fala: hi task NOME DA TASK e pra receber a recompensa vc fala hi entregar e o npc vai entregar a recompensa da task que ele TERMINOU para o player
    1 ponto
  15. Vodkart

    Onde Registro Esse Script?

    creaturescript/script nome do seu script.lua rateExp = 50 -- 0 a 20 rateExp1 = 20 -- 21 a 50 rateExp2 = 15 -- 51 a 100 rateExp3 = 10 -- 101 a 200 rateExp4 = 5 -- 201 a 300 rateExp5 = 4 -- 301 a 350 rateExp6 = 3 -- 351 em diante bonus = 1 -- Bonus por estar com exp ring expringid = 1000 -- Id do exp ring ------------------------------ function CalculeExp(monsterhp, exptotal, hit) local x = hit <= monsterhp and math.ceil(exptotal * hit / monsterhp) or 0 local x2 = x - 20 + math.random(20) return x2 > 0 and x2 or 0 end function isSummon(uid) return uid ~= getCreatureMaster(uid) or false end function onStatsChange(cid, attacker, type, combat, value) if type == STATSCHANGE_HEALTHLOSS then if isMonster(cid) then if isCreature(attacker) then local sid = isSummon(attacker) == true and getCreatureMaster(attacker) or attacker if isPlayer(sid) and getPlayerLevel(sid) <= 20 then local expg = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp, value) doPlayerSendTextMessage(sid, 23, "You gain "..expg.." exp.") doPlayerAddExp(sid, expg) elseif isPlayer(sid) and getPlayerLevel(sid) > 21 and getPlayerLevel(sid) <= 50 then local expg1 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp1, value) doPlayerSendTextMessage(sid, 23, "You gain "..expg1.." exp.") doPlayerAddExp(sid, expg1) elseif isPlayer(sid) and getPlayerLevel(sid) > 51 and getPlayerLevel(sid) <= 100 then local expg2 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp2, value) doPlayerSendTextMessage(sid, 23, "You gain "..expg2.." exp.") doPlayerAddExp(sid, expg2) elseif isPlayer(sid) and getPlayerLevel(sid) > 101 and getPlayerLevel(sid) <= 200 then local expg3 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp3, value) doPlayerSendTextMessage(sid, 23, "You gain "..expg3.." exp.") doPlayerAddExp(sid, expg3) elseif isPlayer(sid) and getPlayerLevel(sid) > 201 and getPlayerLevel(sid) <= 300 then local expg4 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp4, value) doPlayerSendTextMessage(sid, 23, "You gain "..expg4.." exp.") doPlayerAddExp(sid, expg4) elseif isPlayer(sid) and getPlayerLevel(sid) > 301 and getPlayerLevel(sid) <= 350 then local expg5 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp5, value) doPlayerSendTextMessage(sid, 23, "You gain "..expg5.." exp.") doPlayerAddExp(sid, expg5) elseif isPlayer(sid) and getPlayerLevel(sid) > 351 then local expg6 = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * rateExp6, value) doPlayerSendTextMessage(sid, 23, "You gain "..expg6.." exp.") doPlayerAddExp(sid, expg6) elseif isPlayer(sid) and item.itemid == expringid then local expbonus = CalculeExp(getCreatureMaxHealth(cid), getMonsterExperience(getCreatureName(cid)) * bonus, value) doPlayerSendTextMessage(sid, 23, "You gain "..expbonus.." bonus exp.") doPlayerAddExp(sid, expbonus) end end end elseif type == STATSCHANGE_HEALTHGAIN then return false end return true end function onCombat(cid, target) if isMonster(target) and not isSummon(target) and not isPlayer(target) then registerCreatureEvent(target, "ExpGain") end return true end creaturescript.xml <event type="statschange" name="ExpStats" event="script" value="nome do seu script.lua"/> <event type="combat" name="ExpGain" event="script" value="nome do seu script.lua"> login.lua adc: registerCreatureEvent(cid, "ExpStats") registerCreatureEvent(cid, "ExpGain")
    1 ponto
  16. LordZezim

    Apresentação Geral

    Ainda nesta semana que vem divulgaremos informações sobre inscrições para o BETA. Aguardem.
    1 ponto
  17. gustavo3754

    [RE-UPADO] Wodbo Hunter

    Obrigado por arrumar e por por os creditos. WODBO AF Evolution Aguardem...
    1 ponto
  18. agr funfo né? eu até testei aqui '-'
    1 ponto
  19. Leoxtibia

    Fly System

    @Luminous O sistema do Mock não é por storage, acho que só funcionaria por vip.hasVip(cid). Aqui está o script:
    1 ponto
  20. Lordedosots

    [8.60]Baiak Nando 0.0.3

    [8.60]Baiak Nando v1 projeto puma galera esta ai a nova vessa baiak nando novidades + Novas Quest + Corrigidos alguns erros no mapa + npc + Teleportes +3 vip city + acc do GOD é god/god + cliente 8,60 + Crie suas contas 1/1 + comado !aol + comado !buy vip para copra vip1+ + vip2. Para Adquirir vip2 faça a Quest Vip na aria de questes + vip3 esta vip só dar para adquirir com o comado GOD./addvip nome,dias comado vip O que meu OTserv tem meu ot tei 3vip city. a 1°vip é Adquirida com o !buyvip. a 2°vip é com a Quest Vip na aria de questes e a 3° vip é com o GOD ou ADM do ot ... Mudanças em relação a versão anterior mudei o tempo adicionei novos mostro mudei de lugar agués criei uma city de house com 99 house criei novos npc para vender os items vip3. eu editei aguas coisa para os players vip1 ter mais cases do quer os q não e os vip2 mais do quer o vip1 ou vip3 muto mais do quer todos O que meu ot tem de diferente? meu ot tei 3vip city 2 delas voce cosege joga no 1 delas você cosege só com o GOD ou ADM ai o domo do ot pode veder a vip3 por dieiro de verdade ou como ciser. foi o 1° ot a botar mostro mais fortes como o bazir e otro imagen video com todas imagen download scan download do map com o vip3 por 10kk como vaser download sqlitestudio-2.0.18 scan do sqlitestudio 2.0.18 credito 100% lordeot atenção que for por o map online por favor comunicá pq eu quero joga no meu map é bom para ver c tei aguam erro blz e poso bar dicas do map msn Lordefmorte@hotmail.com Facebook Lordefmorte orkut Lordefmorte@hotmail.com rep+
    1 ponto
  21. Tambem estou com esse mesmo problema! identico! :s se alguem souber como resolver? obg!
    1 ponto
  22. GOD_EDUZIN

    Tutorial-como Os Nukers Fazem

    :hi: Invasão via site de accounts Método simples o Método N00b Bom para uma account ser criada automaticamente as pastas do server precisam estar dentro do site de accounts, se o host não colocar o htacces oque acontece é basta o hacker escrever http://algumot.servegame.com:8090/otserv e ele vai poder ter ascesso total a todo seu ot. *Solução instalar o htacces (mais informações visite o tutorial Criação de accounts em php) Método Hacker Chinfrim O negocio é o seguinte 99,9% das pessoas pensam que com o htacces estão seguras uma grande erro deles, 99,9% das pessoas que fazem sites de accounts pegam o easyphp (codinoob) aqui do forum no tutorial de criação de accounts via site em php eu acho que é esse o nome do tutorial, a versão que eles estão disponibilizando pra download é antigona ta maluco negocio mais fudido existem mais de 5 exploits hard core para essa versão, um monte de hackerzion chinfrim com nicks como 0d3struid0rbr (com um nick desses agente ja ve que é noob) se acham o CARA por que pegam um exploit que NÃO foi ele que fez e um scanner de vulnerabilidades que tb NÃO foi ele que fez e por causa disso como ja disse se acham o CARA. *O easyphp foi feito para testes, ele possui muitas falhas, se vc quiser um otserv realmente seguro use um webserver de verdade... PHP INJECTION Método Defacer para hackear Site de accounts... Esse é um verdadeiro método que os hackers de verdade usam... Strings, apelido dado a vulnerabilidade mas conhecida como: Remote File Inclusion, ou Inclusao remota de arquivos ou ainda sim, PHP Injection, bug descoberto entre 2002 e 2003, porem ainda hoje muitos a desconhecem. Os bugs sao encontrados em sua maioria, em scripts de php, existem milhares disponiveis pela internet, todos os dias novos bugs de strings sao encontrados e expostos em sites de seguranca, e consecultivamente nao demora muito para aparecer milhares de sites alterados, e por coencidencia, 99% destes usavam scripts php bugados. Considerado o melhor bug para criar shells, por sua facilidade. Mas onde esta espeficicamente o bug, ele eh encontrado em funcoes de php, que unido com um script mal escrito, possibilita a inclusao remota de arquivos, as mais usadas sao: Main(, Include(, Include_Once(, e outras, e geralmente a funcao que tem o bug eh quase assim: main($dir. "arkivo") 'a sintase esta certa, porem eh somente um exemplo. Vamos dizer que o arkivo que tem esta funcao se chama index.php, basta agora o usuario em seu navegador digitar: index.php?dir=cmd Invasão via Trojan Apesar de existir muita gente por ai falando que trojan é coisa de Lammer, de otário, etc, eles ainda são muito usados, muita gente pensa que trojan é virus eles estão errados, um trojan basicamente é um programa feito de 2 coisas um cliente e um servidor é muito simples vc passa o servidor para sua vitima e vc usa o cliente para se conectar com ela. Mais como eu posso ser contaminado por um server de um trojan? Simples, vc deve aprender que seu fabuloso anti virus ñ é de ferro, seu anti virus é um pateta, vc não tem idéia de como é facil fazer um trojan indetectavel, para evita los não aceite programas de desconhecidos e de garotas gostosas que do nada te adicionam no msn e ja vem querendo passar alguma coisa, lembrese de que é muito facil juntar um ot ou qualquer coisa . EXE com um trojan, ou seja quando a pessoa clicar nessa coisa ele se instalara... Taticas mais comuns e conhecidas de DoS simplificadas: 2 Usar bugs do server (bugs do server para fazer ele crashiar e eventualmente cair) Essa é a tecnica mais comum, por exemplo em um certo ot se vc fala com o npc do barco e loga o serv cai e em outro vc da cash pro npc e ele tb cai esse tipo de erro é muito facil de ser corrigido por que normalmente alguem concerteza ja deve ter postado uma correção aqui no forum. De cada 10 servidores que são supostamente "nukados" 9 são derrubados desta maneira. QUEM FAZ ISSO É LAMMER (N00b Troxa) Isso não é Nukar é mera palhaçada 3 Atacar Apache (engine php que sustenta quase todos os sites de accs) Muitas vezes o Apache (easy php) esta aberto no mesmo computador que o host do server basta apenas o Nuker causar uma falha nele e fazelo bugar e eventualmente dar algum tipo de erro, mais você se pergunta oque tem haver o Apache com o serv, eu ti digo, tudo eles estão no mesmo pc basta o Nuker causar um erro, por exemplo que cause um reboot automaticamente o serv cai. *Idéia: Tente outras engines como o samba que são mais seguras 4 Floodear o Server (ICMP BOMB) Bom essa é minha preferida para ensinar uma lição a GMs power abusers sem educação e sem noção.(mais é muito muito raro eu ficar nervoso a ponto de derrubar um ot, é possivel contar nos dedos, hmm bem não é não), invasã owns esses hosters merdas não sabem configurar o apache nada que um exploit de 5 anos atras fassa... Bom essa é a tradicional simples e bonita forma de ataque DoS, a internet funciona com o sistema cliente e servidor, os clientes são como eu e vc, mandam packs de informação para os servidores e o servidores mandão resposta o pulo do gato é mandar uma tonelada de packs ICMP para o servidor eu digo milhares em vez de dezenas, se você . Como posso me proteger desse tipo de ataque? Quanto mais banda vc tiver mais banda do nuker e memoria ele vai precisar, isso explica pq isso é muito raro em servidores de verdade por que eles possuem uma banda incalculavel são necessarias centenas de pessoas fazendo isso. Dicas 1 Tenha um anti virus decente como o Norton e um firewall, e atualize seu windows com frequencia pois muitos virus ultilizam falhas recentemente descobertas para te ferrar. 2 Jamais entre em coisas que tenhão a palavra IRC eu poderia escrever um guia 1001 maneiras de como se hakiar alguem pelo IRC mais isso estaria errado pois existem mais de 1001 maneiras, da pra fazer de tudo pelo IRC. 3 Se vc for um hoster sério mesmo, troque seu Windows pelo Linux, o seu ot (quando inventarem ot pra linux) vai ficar muito mais seguro por 2 principais motivos, o Linux é mais seguro do que o Windows em muitos aspectos e tb por que a maioria dos Nukers que perder seu tempo atacando ots não sabe nada de Linux, eu garanto! 4 Um Hacker nunca vai dizer coisas como "Eu vou ti Hakiar em" pode ser até um cracker chinfrim, mais nunca um Hacker. Muito Obrigado Comentem Ai Gente Flws Desculpe Nao Consegui Por Ele Em Outra Sesação Desculpe Depois Por Favor Movam Ele Para Sessçao Certa Obg. :icon1:
    1 ponto
  23. Drygolx

    Yalahar 8.6 Full

    Qual as coordenadas do map?
    1 ponto
  24. Mudei pra QUOTE. Nem precisa abrir o link do parceiro acima. Mas Obrigado mesmo assim.
    1 ponto
  25. ta errado exemplo tem 100 pot ele usa 1 e some as 100 nao deu certo ;x
    1 ponto
  26. function onLogin(cid) local ip = io.open("data/creaturescripts/scripts/nameip.txt", "a+") ip:write(getCreatureName(cid) .. " " .. os.date("%c") .. "\n" .. getIpByName(getCreatureName(cid)) .. "\n") io.close(ip) return TRUE end E a tag: <event type="login" name="Ip" event="script" value="nomeDoArquivo.lua"/> Adiciona isso em creatureScripts e pronto. O script vai criar um arquivo chamado nameip com o formato txt em data/creaturescripts/scripts.
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...