Ir para conteúdo

Featured Replies

Postado

Olá amigos gostaria de deixar esse escritpt de bless para quando player tiver level 300+ perder apenas 20% da sua exp algum pode ajudar vai me ajudar muito!!

 

só tenho ele em talkactions mais creio eu que da para fazer em creaturescripts

 

 

script de bless em Talkactions

local bless = {1, 2, 3, 4, 5}
local cost = 50000
local maxlevel = 50000

function onSay(cid, words, param)
local lvl = getPlayerLevel(cid)
local new_cost = (lvl * cost) / 500
local target = getPlayerGUID(cid)


for i = 1, table.maxn(bless) do
if(getPlayerBlessing(cid, bless[i])) then
doPlayerSendCancel(cid, "Voceja tem todas as bless.")
return TRUE
end
end

if (getPlayerLevel(cid) >= maxlevel) then
if(doPlayerRemoveMoney(cid, new_cost) == TRUE) then
for i = 1, table.maxn(bless) do
doPlayerAddBlessing(cid, bless[i])
doPlayerSendTextMessage(cid,22,"Agora voce tem todas bless nao precissa de aol!")
end
else
doPlayerPopupFYI(cid, "Voce precisa "..new_cost.." para a bless.")
end

elseif(getPlayerLevel(cid) < maxlevel) then
if(doPlayerRemoveMoney(cid, cost) == TRUE) then
for i = 1, table.maxn(bless) do
doPlayerAddBlessing(cid, bless[i])
end
doPlayerPopupFYI(cid, "Agora voce tem todas bless nao precissa de aol!")
else
doPlayerPopupFYI(cid, "voce precissa de "..cost.."para comprar bless.")
end
end
return false
end

up

I like

  • Respostas 6
  • Visualizações 1.3k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Demonbholder
    Demonbholder

    Oi,   o problema de usar o doPlayerSetLossPercent é que só muda uma variável na fórmula do cálculo da perde de experiência.   Pelo que eu percebi, você está usando o tfs 0.4, certo?   Se sim, va

  • Demonbholder
    Demonbholder

    Coloca 0.15

Postado
quando player tiver level 300+ perder apenas 20% da sua exp

 

blessed300.lua (data\creaturescripts\scripts):

function onPrepareDeath(cid)
    local level, perc = 300, 20
    
    for b = 1, 5 do
        if isPlayer(cid) and getPlayerBlessing(cid, b) and getPlayerLevel(cid) >= level then
            doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, perc)
        end
    end

    return true
end

creaturescripts.xml (data\creaturescripts):

<event type="preparedeath" name="Blessed300" event="script" value="blessed300.lua"/>

Registre o creature event em login.lua (data\creaturescripts\scripts):

registerCreatureEvent(cid, "Blessed300")

Editado por Suicide (veja o histórico de edições)

The corrupt fear us.

The honest support us.

The heroic join us.

Postado
  • Autor

 

blessed300.lua (data\creaturescripts\scripts):

function onPrepareDeath(cid)
    local level, perc = 300, 20
    
    for b = 1, 5 do
        if isPlayer(cid) and getPlayerBlessing(cid, b) and getPlayerLevel(cid) >= level then
            doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, perc)
        end
    end

    return true
end

creaturescripts.xml (data\creaturescripts):

<event type="preparedeath" name="Blessed300" event="script" value="blessed300.lua"/>

Registre o creature event em login.lua (data\creaturescripts\scripts):

registerCreatureEvent(cid, "Blessed300")

obrigo por ajudar amigo so tem um poblema quando char morre vai para level 1

 

char tava level 310 morreu foi para level 1 ;s

todas skill foi para level 1 tb

 

 

                 ANTES                                     Depois de morrer

 J1YtVCM.png              S0l6I0b.png                                

 

 

Obs; eu aceito qualquer metodo  via source, vocations.xml ajuda ai alguém e muito importante para meu server

Editado por loreal (veja o histórico de edições)

I like

Postado

Oi,

 

o problema de usar o doPlayerSetLossPercent é que só muda uma variável na fórmula do cálculo da perde de experiência.
 
Pelo que eu percebi, você está usando o tfs 0.4, certo?

 

Se sim, vai em player.cpp e altera a função getLostExperience por isso:

 

obs: Antes de testar, faça um backup de tudo, pois eu não estou muito familiarizado com as sources do tfs 0.4.
 

uint64_t Player::getLostExperience() const
{
	if(!skillLoss)
		return 0;

	double percent = (double)(lossPercent[LOSS_EXPERIENCE] - vocation->getLessLoss() - (getBlessings() * g_config.getNumber(
		ConfigManager::BLESS_REDUCTION))) / 100.;
	if(level <= 25)
		return (uint64_t)std::floor((double)(experience * percent) / 10.);

	int32_t base = level;
	double levels = (double)(base + 50) / 100.;

	uint64_t lost = 0;
	while(levels > 1.0f)
	{
		lost += (getExpForLevel(base) - getExpForLevel(base - 1));
		base--;
		levels -= 1.;
	}

	if(levels > 0.)
		lost += (uint64_t)std::floor((double)(getExpForLevel(base) - getExpForLevel(base - 1)) * levels);
		
	if (level >= 300 && getBlessings() >= 5)
		percent = 0.2;

	return (uint64_t)std::floor((double)(lost * percent));
}

Postado
  • Autor

Oi,

 

o problema de usar o doPlayerSetLossPercent é que só muda uma variável na fórmula do cálculo da perde de experiência.

 

Pelo que eu percebi, você está usando o tfs 0.4, certo?

 

Se sim, vai em player.cpp e altera a função getLostExperience por isso:

 

obs: Antes de testar, faça um backup de tudo, pois eu não estou muito familiarizado com as sources do tfs 0.4.

 

uint64_t Player::getLostExperience() const
{
	if(!skillLoss)
		return 0;

	double percent = (double)(lossPercent[LOSS_EXPERIENCE] - vocation->getLessLoss() - (getBlessings() * g_config.getNumber(
		ConfigManager::BLESS_REDUCTION))) / 100.;
	if(level <= 25)
		return (uint64_t)std::floor((double)(experience * percent) / 10.);

	int32_t base = level;
	double levels = (double)(base + 50) / 100.;

	uint64_t lost = 0;
	while(levels > 1.0f)
	{
		lost += (getExpForLevel(base) - getExpForLevel(base - 1));
		base--;
		levels -= 1.;
	}

	if(levels > 0.)
		lost += (uint64_t)std::floor((double)(getExpForLevel(base) - getExpForLevel(base - 1)) * levels);
		
	if (level >= 300 && getBlessings() >= 5)
		percent = 0.2;

	return (uint64_t)std::floor((double)(lost * percent));
}

amigo utilixo otx 8.60 mais pela função da para tirar uma base boa to fazendo os testes jaja dou os resultados 

Editado por loreal (veja o histórico de edições)

I like

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo