Ir para conteúdo
  • Cadastre-se

modificar esse script de bless


Posts Recomendados

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

Link para o post
Compartilhar em outros sites
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.

Link para o post
Compartilhar em outros sites

 

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

Link para o post
Compartilhar em outros sites

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));
}

Link para o post
Compartilhar em outros sites

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

Link para o post
Compartilhar em outros sites

gostaria de por 15% como faço?

 

aqui esta 0.2 que e igual 20%

if (level >= 300 && getBlessings() >= 5)
		percent = 0.2;

se eu coloco 0.1.5 buga alguém pode me ajudar ? quero por 15%

I like

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo