Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Frags System

 

Ola pessoal, sei que tem alguns scripts de frags system no forum, mas eu achei eles um pouco confusos então decidi fazer o meu e venho por meio deste disponibiliza-lo para quem quiser usar, entaão vamos la:

 

Testado em TFS-0.4

 

Passo 1 - Creature Scripts

Em data/creaturescripts/creature.xml cole isso:

<event type="kill" name="frags" event="script" value="frags.lua"/>

Em data/creaturescripts/scripts crie um arquivo chamado frags.lua e cole isto:

function onKill(cid, target)
	if isPlayer(cid) and isPlayer(target) then
		cont = db.getResult('select `frags` from `players` where name = \''..getPlayerName(cid)..'\'')
		db.query("UPDATE `players` SET `frags` = '"..(cont:getDataInt("frags") + 1).."'  WHERE `name` = '"..getPlayerName(cid).."';")
	end
	return true
end 

Passo 2 - Banco de dados

No seu banco de dados vá em SQL, cole isto e execute:

ALTER TABLE  `players` ADD  `frags` INTEGER NOT NULL DEFAULT 0 

Passo 3 - Ranks gesior:

Vá ate a pasta htdocs do seu xampp procure por highscores.php apague o que esta dentro e cole o seguinte codigo:

<?PHP
$list = $_REQUEST['list'];
$page = $_REQUEST['page'];
 
switch($list)
{
case "fist":
$id = 0;
$list_name = 'Fist Fighting';
break;
case "club":
$id = 1;
$list_name = 'Club Fighting';
break;
case "sword":
$id = 2;
$list_name = 'Sword Fighting';
break;
case "axe":
$id = 3;
$list_name = 'Axe Fighting';
break;
case "distance":
$id = 4;
$list_name = 'Distance Fighting';
break;
case "shield":
$id = 5;
$list_name = 'Shielding';
break;
case "fishing":
$id = 6;
$list_name = 'Fishing';
break;
}
if(count($config['site']['worlds']) > 1)
{
foreach($config['site']['worlds'] as $idd => $world_n)
{
if($idd == (int) $_GET['world'])
{
$world_id = $idd;
$world_name = $world_n;
}
}
}
if(!isset($world_id))
{
$world_id = 0;
$world_name = $config['server']['serverName'];
}
$offset = $page * 100;
if(isset($id))
$skills = $SQL->query('SELECT * FROM players, player_skills WHERE players.world_id = '.$world_id.' AND players.deleted = 0 AND players.group_id < '.$config['site']['players_group_id_block'].' AND players.id = player_skills.player_id AND player_skills.skillid = '.$id.' AND players.account_id != 1 ORDER BY value DESC, count DESC LIMIT 101 OFFSET '.$offset);
else
{
if($list == "magic") 
{
$list_name = 'Magic Level';
$skills = $SQL->query('SELECT * FROM players WHERE players.world_id = '.$world_id.' AND players.deleted = 0 AND players.group_id < '.$config['site']['players_group_id_block'].' AND account_id != 1 ORDER BY maglevel DESC, manaspent DESC LIMIT 101 OFFSET '.$offset);
}
elseif($list == "frags") 
{
$list_name = 'Fsrags';
$skills = $SQL->query('SELECT * FROM players WHERE players.world_id = '.$world_id.' AND players.deleted = 0 AND players.group_id < '.$config['site']['players_group_id_block'].' AND account_id != 1 ORDER BY frags DESC LIMIT 101 OFFSET '.$offset);
}
else
{
$skills = $SQL->query('SELECT * FROM players WHERE players.world_id = '.$world_id.' AND players.deleted = 0 AND players.group_id < '.$config['site']['players_group_id_block'].' AND account_id != 1 ORDER BY level DESC, experience DESC LIMIT 101 OFFSET '.$offset);
$list_name = 'Experience';
$list = 'experience';
}
}
$main_content .= '<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%><TR><TD><IMG SRC="'.$layout_name.'/images/general/blank.gif" WIDTH=10 HEIGHT=1 BORDER=0></TD><TD><CENTER><H2>Ranking for '.$list_name.' on '.$world_name.'</H2></CENTER><BR>';
if(count($config['site']['worlds']) > 1)
{
$main_content .= '<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%><TR><TD>
<FORM ACTION="index.php?subtopic=highscores&list='.$list.'" METHOD=get><INPUT TYPE=hidden NAME=subtopic VALUE=highscores><INPUT TYPE=hidden NAME=list VALUE=experience>
<TABLE WIDTH=100% BORDER=0 CELLSPACING=1 CELLPADDING=4><TR><TD BGCOLOR="'.$config['site']['vdarkborder'].'" CLASS=white><B>World Selection</B></TD></TR><TR><TD BGCOLOR="'.$config['site']['darkborder'].'">
<TABLE BORDER=0 CELLPADDING=1><TR><TD>World: </TD><TD><SELECT SIZE="1" NAME="world"><OPTION VALUE="" SELECTED>(choose world)</OPTION>';
foreach($config['site']['worlds'] as $id => $world_n)
{
$main_content .= '<OPTION VALUE="'.$id.'">'.$world_n.'</OPTION>';
}
$main_content .= '</SELECT> </TD><TD><INPUT TYPE=image NAME="Submit" ALT="Submit" SRC="'.$layout_name.'/images/buttons/sbutton_submit.gif" BORDER=0 WIDTH=120 HEIGHT=18>
</TD></TR></TABLE></TABLE></FORM></TABLE><br>';
}
$main_content .= '<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=1 WIDTH=100%><TR BGCOLOR="'.$config['site']['vdarkborder'].'"><TD WIDTH=10% CLASS=whites><B>Rank</B></TD><TD WIDTH=75% CLASS=whites><B>Name</B></TD><TD WIDTH=15% CLASS=whites><b><center>Level</center></B></TD>';
if($list == "experience") 
{
$main_content .= '<TD CLASS=whites><b><center>Points</center></B></TD>';
}
$main_content .= '</TR><TR>';
foreach($skills as $skill)
{
if($number_of_rows < 100)
{
if($list == "magic")
$skill['value'] = $skill['maglevel'];
if($list == "frags")
$skill['value'] = $skill['frags'];
if($list == "experience")
$skill['value'] = $skill['level'];
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>'.($offset + $number_of_rows).'.</td>
<td>'.$flag.'<a href="index.php?subtopic=characters&name='.urlencode($skill['name']).'">'.$skill['name'].'</a>';
#if(count($config['site']['worlds']) > 1)
# $main_content .= ', '.$config['site']['worlds'][$skill['world_id']];
$main_content .= '</small>';
$main_content .= '</td><td>'.$skill['value'].'</td>';
if($list == "experience") 
$main_content .= '<td>'.number_format($skill['experience'],0).'</td>';
$main_content .= '</tr>';
}
else
$show_link_to_next_page = TRUE;
}
if (!$skill){
$main_content .='
<tr bgcolor="'.$config['site']['darkborder'].'">
<td colspan="4" align="center"><i>'.$config['server']['serverName'].' no have players created on database.</i></td>
</tr>
';}
$main_content .= '</TABLE><TABLE BORDER=0 CELLPADDING=4 CELLSPACING=1 WIDTH=100%>';
if($page > 0) 
$main_content .= '<TR><TD WIDTH=100% ALIGN=right VALIGN=bottom><A HREF="index.php?subtopic=highscores&list='.$list.'&world='.$world_id.'&page='.($page - 1).'" CLASS="size_xxs">Previous Page</A></TD></TR>';
if($show_link_to_next_page) 
$main_content .= '<TR><TD WIDTH=100% ALIGN=right VALIGN=bottom><A HREF="index.php?subtopic=highscores&list='.$list.'&world='.$world_id.'&page='.($page + 1).'" CLASS="size_xxs">Next Page</A></TD></TR>';
$main_content .= '</TABLE></TD><TD WIDTH=5%><IMG SRC="'.$layout_name.'/images/general/blank.gif" WIDTH=1 HEIGHT=1 BORDER=0></TD><TD WIDTH=15% VALIGN=top ALIGN=right>
<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=1>
<TR BGCOLOR="'.$config['site']['vdarkborder'].'">
<TD CLASS=whites><B>Choose a skill</B></TD></TR><TR BGCOLOR="'.$config['site']['lightborder'].'"><TD>
<A HREF="index.php?subtopic=highscores&list=frags&world='.$world_id.'" CLASS="size_xs">Frags</A><BR>
<A HREF="index.php?subtopic=highscores&list=experience&world='.$world_id.'" CLASS="size_xs">Experience</A><BR>
<A HREF="index.php?subtopic=highscores&list=magic&world='.$world_id.'" CLASS="size_xs">Magic</A><BR>
<A HREF="index.php?subtopic=highscores&list=shield&world='.$world_id.'" CLASS="size_xs">Shielding</A><BR>
<A HREF="index.php?subtopic=highscores&list=distance&world='.$world_id.'" CLASS="size_xs">Distance</A><BR>
<A HREF="index.php?subtopic=highscores&list=club&world='.$world_id.'" CLASS="size_xs">Club</A><BR>
<A HREF="index.php?subtopic=highscores&list=sword&world='.$world_id.'" CLASS="size_xs">Sword</A><BR>
<A HREF="index.php?subtopic=highscores&list=axe&world='.$world_id.'" CLASS="size_xs">Axe</A><BR>
<A HREF="index.php?subtopic=highscores&list=fist&world='.$world_id.'" CLASS="size_xs">Fist</A><BR>
<A HREF="index.php?subtopic=highscores&list=fishing&world='.$world_id.'" CLASS="size_xs">Fishing</A><BR>
</TD>
</TR>
</TABLE></TD><TD><IMG SRC="'.$layout_name.'/images/general/blank.gif" WIDTH=10 HEIGHT=1 BORDER=0></TD></TR></TABLE>';
?> 

Passo 4 - Caso queira a talkaction !rank frags

Em data/talkactions/talkactions.xml cole (caso nao exista)

<talkaction words="!rank" script="ranks.lua"/>

Vá em data/talkactions/scripts e crie um arquivo chamado ranks.lua (caso não houver) e cole o seguinte codigo

function getPlayerNameByGUID2(n)
local c = db.getResult("SELECT `name` FROM `players` WHERE `id` = "..n..";")
if c:getID() == -1 then
return "SQL_ERROR["..n.."]"
end
return c:getDataString("name")
end
 
function onSay(cid, words, param)
	if param == "" or param == "shield" or param == "dist" or param == "fish" or param == "magic" or param == "sword" or param == "fist" or param == "club" or param == "frags" or param == "distance" or param == "shielding" or param == "fishing" or param == "axe" then
	local max = 20
	local letters_to_next = 20
	 
	local skills = {
	['fist'] = 0,
	['club'] = 1,
	['sword'] = 2,
	['axe'] = 3,
	['distance'] = 4,
	['shielding'] = 5,
	['fishing'] = 6,
	['dist'] = 4,
	['shield'] = 5,
	['fish'] = 6,
	}
	local name_now
	local name = "Highscores\n"
	local rkn = 0
	local no_break = 0
	param = string.lower(param)
	dofile('config.lua')
	if param == "" or param == "level" and ( param ~= "magic" and param == "ml") and skills[param] == nil then
	name = name.."\n"
	name = name.."Rank Level - Nome do Jogador\n"
	local v = db.getResult("SELECT `name`, `level`, `experience` FROM `players` WHERE `group_id` <= 2 ORDER BY `experience` DESC LIMIT 0,"..(max)..";")
	repeat
	no_break = no_break +1
	if v:getID() == -1 then
	break
	end
	rkn = rkn+1
	name_now, l = v:getDataString("name"), string.len(v:getDataString("name"))
	space = ""
	for i=1, letters_to_next-l do
	space = space.." "
	end
	name = name..rkn..". "..v:getDataInt("level") .." - "..name_now..space.." ".."\n"
	if no_break >= 20 then
	break
	end
	until v:next() == false
	 
	elseif param == "magic" or param == "ml" then
	name = name.."\n"
	name = name.."Rank Magic - Nome do Jogador\n"
	local v = db.getResult("SELECT `name`, `level`, `maglevel` FROM `players` WHERE `group_id` <= 2 ORDER BY `maglevel` DESC LIMIT 0,"..(max)..";")
	repeat
	if v:getID() == -1 then
	break
	end
	rkn = rkn+1
	name_now, l = v:getDataString("name"), string.len(v:getDataString("name"))
	space = ""
	for i=1, letters_to_next-l do
	space = space.." "
	end
	name = name..rkn..". "..v:getDataInt("maglevel").." - "..name_now..space.." ".." ".."".."\n"
	until v:next() == false

	elseif param == "frag" or param == "frags" then
	name = name.."\n"
	name = name.."Rank Frags - Nome do Jogador\n"
	local v = db.getResult("SELECT `name`, `frags` FROM `players` WHERE `group_id` <= 2 ORDER BY `frags` DESC LIMIT 0,"..(max)..";")
	repeat
	if v:getID() == -1 then
	break
	end
	rkn = rkn+1
	name_now, l = v:getDataString("name"), string.len(v:getDataString("name"))
	space = ""
	for i=1, letters_to_next-l do
	space = space.." "
	end
	name = name..rkn..". "..v:getDataInt("frags").." - "..name_now..space.." ".." ".."".."\n"
	until v:next() == false
	 
	elseif skills[param] ~= nil then
	name = name.."\n"
	name = name.."Rank "..param.." fighting - Nome do Jogador\n"
	local v = db.getResult("SELECT `player_id`, `value` FROM `player_skills` WHERE `skillid` = "..skills[param].." ORDER BY `value` DESC;")
	local kk = 0
	 
	repeat
	if kk == max or v:getID() == -1 then
	break
	end
	kk = kk+1
	name_now, l = getPlayerNameByGUID2(v:getDataInt("player_id")), string.len(getPlayerNameByGUID2(v:getDataInt("player_id")))
	space = ""
	for i=1, letters_to_next-l do
	space = space.." "
	end
	 
	if name_now == nil then
	name_now = 'sql error['..v:getDataInt("player_id")..']'
	end
	name = name..kk..". "..v:getDataInt("value").." - "..name_now..space.." \n"
	until v:next() == false
	end
	if name ~= "Highscore\n" then
	doPlayerPopupFYI(cid, name)
	end
 	else
 		return TRUE
 	end
return TRUE
end 

 

Pronto, acabamos de instalar o script no server.

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por FeeTads
      SALVE rapaziada do TK, esses dias vim pensando em novos scripts pro meu OT, e em um deles eu precisava que determinada area não contasse frag pro player que matasse outros, PORÉM eu precisava que os players que morressem nessa area ainda assim tivessem as penalidades da sua morte, procurei por ai, achei alguns scripts que apenas tiravam o SKULL e não realmente o FRAG do player.

      **script atualizado 22/10/2023** - melhorado e otimizado, levei o script pra puxar as infos por .lua / creatureScripts

      vou disponibilizar o code aqui, e o que fazer pra determinada area não contar frag.

      SOURCE OTX 2 / TFS 0.x, Funciona em TFS 1.x mudando as tags e ajeitando as sintaxes.

      vá em creatureevent.cpp

      procure por:
      else if(type == "preparedeath") _type = CREATURE_EVENT_PREPAREDEATH;
      Adiciona abaixo:
      else if(type == "nocountfrag") _type = CREATURE_EVENT_NOCOUNTFRAG;

      procure por:
      case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath";  
      Adicione abaixo: 
      case CREATURE_EVENT_NOCOUNTFRAG: return "noCountFragArea";

      procure por:
      case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList";
      Adicione abaixo:
      case CREATURE_EVENT_NOCOUNTFRAG: return "cid, target";

      agora no mesmo arquivo, vá até o final do arquivo e adicione essa função:
      uint32_t CreatureEvent::executeNoCountFragArea(Creature* creature, Creature* target) { //noCountFragArea(cid, target) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::ostringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; scriptstream << "local target = " << env->addThing(target) << std::endl; if(m_scriptData) scriptstream << *m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ std::ostringstream desc; desc << creature->getName(); env->setEvent(desc.str()); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); lua_pushnumber(L, env->addThing(target)); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::noCountFragArea] Call stack overflow." << std::endl; return 0; } }

      agora vá em creatureevent.h

      procure por:
      CREATURE_EVENT_PREPAREDEATH
      adicione abaixo:
      CREATURE_EVENT_NOCOUNTFRAG

      procure por:
      uint32_t executePrepareDeath(Creature* creature, DeathList deathList);
      Adicione abaixo:
      uint32_t executeNoCountFragArea(Creature* creature, Creature* target);

      agora vá em player.cpp

      procure por:
      bool Player::onKilledCreature(Creature* target, DeathEntry& entry)
      abaixo de:
      War_t enemy; if(targetPlayer->getEnemy(this, enemy)) { if(entry.isLast()) IOGuild::getInstance()->updateWar(enemy); entry.setWar(enemy); }
      Adicione o seguinte código:
      if (targetPlayer){ CreatureEventList killEvents = getCreatureEvents(CREATURE_EVENT_NOCOUNTFRAG); for (const auto &event : killEvents) { if (!event->executeNoCountFragArea(this, target)) { return true; } } }

      //

      Feito isso, tudo completo na sua source, agora é necessário adicionar o creaturescript dentro do servidor

      vá até creaturescripts/scripts
      crie um arquivo chamado, "noCountFragInArea.lua"
      e dentro dele cole o código:
       
      --[[ script feito por feetads / TibiaKing ]]-- --[[ discord: feetads / FeeTads#0246 ]]-- -- Add positions here for which you do not want to count frags local areas = { [1] = {from = {x = 91, y = 122, z = 7}, to = {x = 98, y = 127, z = 7}}, -- from = area superior esquerda / to = area inferior direita (formando um quadrado) } local onlyKillerInArea = false -- only killer need to be in area? function noCountFragArea(cid, target) if not isCreature(cid) or not isCreature(target) then return true end local posKiller = getPlayerPosition(cid) local posTarget = getPlayerPosition(target) for i = 1, #areas do local area = areas[i] if isInArea(posKiller, area.from, area.to) then if onlyKillerInArea then return false elseif isInArea(posTarget, area.from, area.to) then return false end end end return true end
      agora em creaturescripts.xml
      <event type="nocountfrag" name="fragarea" event="script" value="noCountFragInArea.lua"/>
      agora em creaturescripts/scripts/login.lua
       procure por OU semelhante a esse:
      registerCreatureEvent(cid, "AdvanceSave")
      e abaixo adicione:
      registerCreatureEvent(cid, "fragarea")

      //


      Agora tudo certo, quando quiser adiciona uma area que não pega frag, vá até o script e apenas coloque a area, igual o demonstrado no script

      Exemplo:
      local areas = { [1] = {from = {x = 91, y = 122, z = 7}, to = {x = 98, y = 127, z = 7}}, [2] = {from = {x = 1000, y = 1000, z = 7}, to = {x = 1100, y = 1100, z = 7}}, }
      assim somente colocando a area no script e abrindo o server ou dando /reload, já funcionará a area como não pegar frag.
      Esse sistema pode ser bom pra areas de pvp ativo, onde você ainda quer que o player que morrer perca os atributos, como se fosse uma morte normal, porém não conta frag pra quem matar.
      Bom pra sistemas tipo castle 48h (guild war), onde há diversas mortes e risco de pegar red, atrapalhando a war.

      Façam bom proveito dos scripts, e deixem os créditos no script rsrs

      **Eu fiz as alterações e o simples código por isso vim disponibilizar, créditos meus**
    • Por Bagon
      Bom, hoje venho trazer á vocês um sistema de Pet System DIFERENCIADO de alguns presentes no fórum. Este sistema tem diversos comandos diferenciados, como: 
       
      !pet nomedopet este comando irá sumonar o pet. 
      !remove irá remover o pet.
      !fale eu sou lindo o pet falará "eu sou lindo"
      !conversar o pet irá conversar com vc. 
       
      Então sem mais delongas vamos ao script.
       
      OBS: SCRIPT TESTADO SOMENTE EM TFS 0.4/0.3, e este script foi feito com a intenção de ser vendido no site do ot ou em poderá usar como quest usando o item selecionado como premio. fique ao seu critério.
       
      Primeiro vá até a pasta talkaction/script e crie um arquivo chamado petsystem.lua, depois coloque o seguinte script:
       
       
      Agora em talkactions/talkactions.xml adicione a seguinte tag:
       
      <talkaction words="!pet;!remove;!fale;!conversar" event="script" value="petsystem.lua" />  
      EXPLICAÇÂO:
      As partes em Negrito, são os pets. Você pode alterar ou criar monstros para fazer eles como pets. (Recomendo criar um monstro para que seja somente pet.)
       
      Exemplo: ["dog"]= {stor=78552},      
       
       
      Lembrando que é necessário mudar esta parte no script do monstro colocado a cima.
       
      <flag attackable="1" /> para :
       
      <flag attackable="0" />  
      agora vá em action/script e crie um arquivo chamado pet com o seguinte script:
       
       
      e vá em action.xml e adiciona a seguinte tag:
       
      <action itemid="10063" script="pet.lua"/> Explicação: Na tag da action o itemid é o item que deverá ser usado para ganhar a storage 78552, e assim podera sumonar o monstro com esta storage.
       
                                              
                                                         CRIE UMA ACTION COM A TAG A CIMA PARA CADA MONSTRO COLOCADO NA TALKACTION,
                                                         BASTA VC ALTERAR A STORAGE DO SCRIPT DA ACTION
                                                         EXEMPLO: em action altere as storage que estão em vermelho, como mostra abaixo
       
                                                              if getPlayerStorageValue(cid, 78552) < 1 then
                                                              setPlayerStorageValue(cid, 78552, 1)
       
                                                         aonde tem 78552 altere para 78553 que no caso é a storage do cyclops escolhido lá no script da talkaction
                                                         e assim susecivelmente.
       
       
       
      CREDITOS:
      Mulizeu
      Smartbox
      Bagon 
       
    • Por Imperius
      Olá, pessoal! Acabei encontrando um script que tinha feito a um tempo atrás. Estou compartilhando aqui para quem quiser usar ou melhorar.
       
      É bem parecido com os outros sistemas de roleta, igual deste tópico: https://tibiaking.com/forums/topic/101557-action-cassino-roleta-de-items/
       
      Como funciona?
       
      O "Treasure Chest" é um item custom, onde o jogador têm a possibilidade de ganhar itens raros ou bem meia boca. Tudo dependerá da sorte.
       
      O jogador precisa tacar o treasure chest na bancada e acionar a alavanca. O treasure chest irá se transformar em vários itens de forma randômica no qual o jogador poderá ou não ganhar. No final, apenas um item é entregue ao jogador.
       
      Para entender melhor o seu funcionamento, segue o GIF abaixo:
       

       
       
      em data > actions > actions.xml
       
       
      em data > actions > scripts > crie um arquivo chamado leverTreasureChest.lua
       
       
      no banco de dados do servidor, adicione o seguinte código em "SQL":
       
       
       

      Também estou disponibilizando uma página PHP, para quem quiser usar no site do servidor. Na página tem informações sobre o funcionamento, quais são os possíveis prêmios e a lista de jogadores que ganharam os itens raros.
       

       
       
      Espero ter ajudado de alguma forma! : )
       
      treasure_chest.php
    • Por Linus
      Você  pode configurar se quer que o preço aumente a cada reset, se quer que o level pra resetar aumente e se vc quer que a vida resete junto (e quanto % da vida atual será a vida após resetar).
       
       
      Testado em tfs 1.1, Versão 10.77
       
       
       
       
      Vá em data/npc/lib/ crie npc_resets.lua :
       



       
      Você pode editar mexendo aqui. no script acima :
      config = { minlevel = 150, --- Level inical para resetar price = 10000, --- Preço inicial para resetar newlevel = 20, --- Level após reset priceByReset = 0, --- Preço acrescentado por reset percent = 30, ---- Porcentagem da vida/mana que você terá ao resetar (em relação à sua antiga vida total) maxresets = 50, ---- Maximo de resets levelbyreset = 0 --- Quanto de level vai precisar a mais no próximo reset } agora em data/npc/ crie reseter.XML :
       



       
       
       
      Agora em data/npc/scripts crie reseter.lua :
       



       
       
       
      Img : 
       

    • Por MaTTch
      Bom galera eu resolvi fazer o Vault System a pedido de um amigo meu e decidi compartilhar com vocês.
       
      Testado em 8.60 TFS 0.4
       
      EDIT -- O script foi arrumado, pois havia um bug que o player ganhava golds.
       
      Vamos lá.
       
      1° - Vá em data/actions/scripts e crie um arquivo chamado vault.lua, e dentro você coloca isso:
      local vaultStorage = 99991 -- storage em que ficara armazenado os golds ------------------//* Functions //------------------- local function getPlayerFreeSpace(cid) -- by MaTTch     local checkSlots, space = {3,5,6,10}, 0     local function getContainerFree(container)         local free = 0         if(not isContainer(container.uid)) then             return free         end         for i = 0, (getItemInfo(container.itemid).maxItems -1) do             local item = getContainerItem(container.uid, i)             if(item.itemid == 0) then                 free = free + 1             elseif(isContainer(item.uid)) then                 free = free + getContainerFree(item)             end         end         return free     end     for _, i in ipairs(checkSlots) do         local slotItem = getPlayerSlotItem(cid, i)         if(i ~= CONST_SLOT_BACKPACK and slotItem.itemid == 0) then             space = space + 1         elseif(isContainer(slotItem.uid)) then             space = space + getContainerFree(slotItem)         end     end     return space end local function withdrawMoneySecurity(cid, value, storage) -- by MaTTch     local storageMoney, countValue = getPlayerStorageValue(cid, storage), 0     local config = {         [1] = {ITEM_CRYSTAL_COIN, math.floor(value/getItemInfo(ITEM_CRYSTAL_COIN).worth)},         [2] = {ITEM_PLATINUM_COIN, math.floor((value/getItemInfo(ITEM_PLATINUM_COIN).worth)-(math.floor(value/getItemInfo(ITEM_CRYSTAL_COIN).worth)*100))},         [3] = {ITEM_GOLD_COIN, math.floor(value%100)}     }     for i = 1, #config do         local count = config[i][2]         if(count > 0) then             while(count > 0) do                 storageMoney = getPlayerStorageValue(cid, storage)                 local a, itemCap = count > 100 and 100 or count, getItemInfo(config[i][1]).weight                 if(getPlayerFreeCap(cid) >= (itemCap*a)) then                     if(getPlayerFreeSpace(cid) >= 1) then                         doPlayerAddItem(cid, config[i][1], a)                         setPlayerStorageValue(cid, storage, (storageMoney - (getItemInfo(config[i][1]).worth * a)))                         countValue = countValue + (getItemInfo(config[i][1]).worth * a)                         count = count - a                     else                         return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You do not have enough space in container. You have took "..countValue.." gold"..(countValue > 1 and "s" or "").." from vault.")                     end                 else                     return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You do not have enough cap. You have took "..countValue.." gold"..(countValue > 1 and "s" or "").." from vault.")                 end             end         end     end     return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You have took "..countValue.." gold"..(countValue > 1 and "s" or "").." from vault.") end ------------------//* End Functions //------------------- function onUse(cid, item, fromPosition, itemEx, toPosition)     local cidMoney, vaultMoney = getPlayerMoney(cid), getPlayerStorageValue(cid, vaultStorage)     if(vaultMoney <= 0) then         if(cidMoney <= 0) then             return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You do not have money.")         end         doPlayerRemoveMoney(cid, cidMoney)         setPlayerStorageValue(cid, vaultStorage, cidMoney)         doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "You have added "..cidMoney.." gold"..(cidMoney > 1 and "s" or "").." to vault. Now your money is kept in the vault chest, you can take it whenever you want.")     else         withdrawMoneySecurity(cid, vaultMoney, vaultStorage)     end     return true end 2° - Agora em data/actions/actions.xml adicione a tag:
      <action itemid="ID" event="script" value="vault.lua"/> Em ID você escolhe o id do item que quiser.
       
      3° - Agora em data/creaturescripts/scripts crie um arquivo com o nome vaultLook.lua, e dentro coloque isso:
      local config = { vaultId = ID, -- itemid do vault vaultStorage = 99991 -- storage em que ficara armazenado os golds } function onLook(cid, thing, position, lookDistance) local show = getPlayerStorageValue(cid, config.vaultStorage) if(thing.itemid == config.vaultId) then local str = "You see"..(getItemInfo(thing.itemid).article and " "..getItemInfo(thing.itemid).article.." " or " ")..getItemInfo(thing.itemid).name..".\nYou have "..(show < 0 and 0 or show).." gold"..(show > 1 and "s" or "").." in the vault." if(getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then str = str .. "\nItemID: ["..thing.itemid.."].\nPosition: [X: "..getThingPos(thing.uid).x.."] [Y: "..getThingPos(thing.uid).y.."] [Z: "..getThingPos(thing.uid).z.."]." end doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, str) return false end return true end 4° - Agora em data/creaturescripts/creaturescripts.xml adicione a tag:
      <event type="look" name="vaultLook" event="script" value="vaultLook.lua"/> 5° - Agora em data/creaturescripts/login.lua lá embaixo adicione junto dos outros:
      registerCreatureEvent(cid, "vaultLook") E agora o sistema já esta pronto para ser usado.
       
      - Aah mas como funciona?
      Você clica uma vez no cofre (vault) e deposita todo seu dinheiro nele, ao clicar de novo você pega-os de volta, e caso não tiver cap ou espaço na bag você pega somente o possível e o restante ficara la até você quiser pegar.
       
      --> Versão do Vault System em editText
       
      Créditos:
      MaTTch (eu)
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo