felzan 64 Postado Fevereiro 1, 2016 Share Postado Fevereiro 1, 2016 (editado) 1. O que é? Script que controla a rateLoot. Significa que pode conceder um bonus de loot (double loot) sem reiniciar o servidor, pode dar mais loot pra premium, mais loot se o player tiver tal item, ou tal storage. 2. Script Citar --[[rateLoot handled in Lua by felzanno config.lua deixar o rateloot = 0player:getRateLoot()player:setRateLoot()]]local rateLoot = 2 -- chance do lootlocal divideByNewLine = true -- dividir texto de loot com nova linha a cada itemlocal sumItems = true -- soma items iguais (ex: 187 gold coins)local showPartyPrefix = true -- mostrar quem matou na partylocal reduceRateLootOnLowStamina = false -- reduzir o loot se sem staminalocal bonusWithStorageRateLoot = 1.05 -- multiplicador de loot por storagelocal bonusStorage = 99889 -- storage do multiplicadorlocal bonusWithItemRateLoot = 1 --multiplicador de loot por itemlocal bonusItemId = 2357 -- item do multiplicador por itemlocal bonusItemSlot = CONST_SLOT_RING -- slot do itemlocal bonusPremium = 1.3 -- multiplicador de loot se premiumlocal showEffectRareItem = true -- mostrar efeito ao dropar item rarolocal chanceToBeRare = 1000 -- quantidade para ser rarolocal effectRareItem = CONST_ME_FIREWORK_BLUE -- efeito do item raromath.randomseed(os.time()) --deafult seedlocal function addSameId(lootArray) for t,i in pairs(lootArray.item) do for k,v in pairs(lootArray.item) do if k ~= t then if lootArray.item[k] == lootArray.item[t] then lootArray.count[t] = lootArray.count[t] + lootArray.count[k] table.remove(lootArray.item, k) table.remove(lootArray.count, k) end end end end return lootArrayendlocal function sendTextLootMessage(parameters, lootArray) local lootMessage = '' local lootMessageParty = '' local lootMessagePrefix = '' local lootMessageItems = ' ' local divisor = ', ' local final = '.' local init = '' local prefixParty = '' if divideByNewLine then divisor = '\n' init = '\n' end if showPartyPrefix then prefixParty = string.upper(string.sub(parameters.cid:getName(), 1, 1)) .. (string.sub(parameters.cid:getName(), 2)) .. '--> ' end lootMessagePrefix = 'Loot of ' .. parameters.name .. ':' if #lootArray.item == 0 then if parameters.cid:getStamina() <= 800 then lootMessageItems = ' nothing (due to low stamina)' .. final else lootMessageItems = ' nothing' .. final end else lootMessageItems = lootMessageItems .. init for y = #lootArray.item, 1, -1 do local count = lootArray.count[y] local pluralName = ItemType(lootArray.item[y]):getPluralName() local article = ItemType(lootArray.item[y]):getArticle() local name = ItemType(lootArray.item[y]):getName() if count == 1 then count = '' pluralName = '' else article = '' name = '' end lootMessageItems = lootMessageItems .. count .. article .. ' ' .. pluralName .. name if y == 1 then lootMessageItems = lootMessageItems .. final else lootMessageItems = lootMessageItems .. divisor end end end lootMessage = lootMessagePrefix .. lootMessageItems lootMessageParty = prefixParty .. lootMessage if parameters.cid:getId() == parameters.corpse:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) then if parameters.party then for i = 1, #parameters.partyMembers do if parameters.partyMembers[i] == parameters.cid then parameters.partyMembers[i]:sendTextMessage(MESSAGE_INFO_DESCR, lootMessage) else parameters.partyMembers[i]:sendTextMessage(MESSAGE_INFO_DESCR, lootMessageParty) end end else parameters.cid:sendTextMessage(MESSAGE_INFO_DESCR, lootMessage) end endendlocal function addItem(parameters) local lootArray = {item = {}, count = {}} parameters.corpse = Tile(parameters.position):getItemById(parameters.corpseId) local maxChance = 100000 -- default -- sem loot devido stamina if reduceRateLootOnLowStamina then if parameters.cid:getStamina() <= 800 then return sendTextLootMessage(parameters, lootArray) end end for item = #parameters.loot, 1, -1 do local chosed = math.random(1, maxChance/(rateLoot * bonusPremium * bonusWithItemRateLoot * bonusWithStorageRateLoot)) local count = chosed % parameters.loot[item].maxCount + 1 if count > parameters.loot[item].maxCount then count = parameters.loot[item].maxCount end if chosed <= parameters.loot[item].chance then --mostra efeito raro if showEffectRareItem then if chosed <= chanceToBeRare and parameters.loot[item].chance <= chanceToBeRare then print(chanceToBeRare, chosed, parameters.loot[item].chance) parameters.position:sendMagicEffect(effectRareItem) end end -- adiciona itens no corpse parameters.corpse:addItem(parameters.loot[item].itemId, count) table.insert(lootArray.item, parameters.loot[item].itemId) table.insert(lootArray.count, count) end end if sumItems then sendTextLootMessage(parameters, addSameId(lootArray)) else sendTextLootMessage(parameters, lootArray) endendfunction onKill(cid, target, lastHit) if getConfigInfo("rateLoot") > 0 then return false end if not target:isMonster()then return true end if target:getMaster() then return false end local parameters = {} parameters.cid = cid parameters.position = target:getPosition() parameters.name = MonsterType(target:getName()):getNameDescription() parameters.corpseId = MonsterType(target:getName()):getCorpseId() parameters.corpse = Tile(parameters.position):getItemById(parameters.corpseId) parameters.loot = MonsterType(target:getName()):getLoot() parameters.party = cid:getParty() parameters.partyMembers = {} if not ItemType(parameters.corpseId):isContainer() then return false end if parameters.corpseId < 1 then return false end if ItemType(target:getName()):isContainer() then return false end if parameters.party then local leader = parameters.party:getLeader() local member = parameters.party:getMembers() local party = member table.insert(party, leader) for i = 0, #party do parameters.partyMembers[i] = party[i] end end addEvent(addItem, 1, parameters) return trueendfunction onLogin(player) player:registerEvent("rateLoot") return trueend 2.1 Configurar Para configurar é bem simples, tem a maior parte das variáveis no topo do script com explicações em creaturescripts.lua Citar <event type="kill" name="rateLoot" script="rateloot.lua"/> <event type="login" name="rateLootLogin" script="rateloot.lua"/> Citar no config.lua deixar o rateloot = 0 3. Imagem Editado Setembro 27, 2016 por felzan Link para o comentário Compartilhar em outros sites More sharing options...
Administrador Administrador 1435 Postado Fevereiro 1, 2016 Administrador Share Postado Fevereiro 1, 2016 A ideia é boa e criativa. Também é muito útil para servidores com sistemas e subsistemas de Vip. Obrigado por compartilhar conosco! Link para o comentário Compartilhar em outros sites More sharing options...
felzan 64 Postado Fevereiro 1, 2016 Autor Share Postado Fevereiro 1, 2016 A ideia foi: melhorar o que tem independente se o servidor usa sistema de vip/premium, a criatividade pra usar o loot em lua é muito maior Novo recorde de players = 2x exp/loot faz quest e ganha anel da sorte, que da 5x loot durante evento, tem chance de dropar crystal coin de qualquer monstro basta criatividade agora. Link para o comentário Compartilhar em outros sites More sharing options...
kaleudd 200 Postado Fevereiro 1, 2016 Share Postado Fevereiro 1, 2016 muito bom =) bom ver de o tfs 1.x tá se expandido cada vez mais. Link para o comentário Compartilhar em outros sites More sharing options...
felzan 64 Postado Fevereiro 3, 2016 Autor Share Postado Fevereiro 3, 2016 Pessoal ficou parado no 0.x pois é "mais fácil" de iniciar o servidor. Esse sistema (de loot via Lua) vai ser padrão do TFS daqui um tempo, pois eles (o Mark) pretendem passar tudo que não for da engine pra Lua. Link para o comentário Compartilhar em outros sites More sharing options...
felzan 64 Postado Setembro 26, 2016 Autor Share Postado Setembro 26, 2016 Up! '-' Ainda pode ser útil para alguém Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados