Postado Julho 9, 2015 9 anos 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
Postado Julho 9, 2015 9 anos 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 Julho 9, 2015 9 anos por Suicide (veja o histórico de edições) The corrupt fear us. The honest support us. The heroic join us.
Postado Julho 9, 2015 9 anos 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 Obs; eu aceito qualquer metodo via source, vocations.xml ajuda ai alguém e muito importante para meu server Editado Julho 10, 2015 9 anos por loreal (veja o histórico de edições) I like
Postado Julho 10, 2015 9 anos 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 Julho 10, 2015 9 anos 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 Julho 10, 2015 9 anos 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.