felzan 64 Posted February 1, 2016 Report Share Posted February 1, 2016 (edited) 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 Edited September 27, 2016 by felzan Link to comment https://xtibia.com/forum/topic/239190-rateloot-em-lua/ Share on other sites More sharing options...
Administrador Administrador 1437 Posted February 1, 2016 Administrador Report Share Posted February 1, 2016 A ideia é boa e criativa. Também é muito útil para servidores com sistemas e subsistemas de Vip. Obrigado por compartilhar conosco! Link to comment https://xtibia.com/forum/topic/239190-rateloot-em-lua/#findComment-1684288 Share on other sites More sharing options...
felzan 64 Posted February 1, 2016 Author Report Share Posted February 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 to comment https://xtibia.com/forum/topic/239190-rateloot-em-lua/#findComment-1684299 Share on other sites More sharing options...
kaleudd 200 Posted February 1, 2016 Report Share Posted February 1, 2016 muito bom =) bom ver de o tfs 1.x tá se expandido cada vez mais. Link to comment https://xtibia.com/forum/topic/239190-rateloot-em-lua/#findComment-1684301 Share on other sites More sharing options...
felzan 64 Posted February 3, 2016 Author Report Share Posted February 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 to comment https://xtibia.com/forum/topic/239190-rateloot-em-lua/#findComment-1684644 Share on other sites More sharing options...
felzan 64 Posted September 26, 2016 Author Report Share Posted September 26, 2016 Up! '-' Ainda pode ser útil para alguém Link to comment https://xtibia.com/forum/topic/239190-rateloot-em-lua/#findComment-1704844 Share on other sites More sharing options...
Recommended Posts