Postado Dezembro 17, 2020 4 anos Rev. 3777 TFS 0.4 8.60 Tenho tentado usar esse sistema de Elo. Ele funciona e atribui o ranking e bonus skill, mas ao tentar usar o comando "!kage" que deveria atribuir uma newtype para o kage ele não faz nada só manda a mensagem "Apenas kage pode usar esse comando!". https://prnt.sc/w4alwf << imagem demonstrando q o personagem já é kage. Lib.lua Mostrar conteúdo oculto if not GRADUATION then GRADUATION = {} GRADUATION.conditions = {} GRADUATION.minKagePoints = 500 GRADUATION.eloPointsStorage = 176602 GRADUATION.kages = {} end GRADUATION.RANKS = { { name = "Shinobi", minPoints = 0, skillBonus = 0, }, { name = "Genin", minPoints = 50, skillBonus = 5, }, { name = "Chunin", minPoints = 100, skillBonus = 8, }, { name = "Jounin", minPoints = 200, skillBonus = 10, }, { name = "Sennin", minPoints = 400, skillBonus = 15, skillAtribute = 15, }, [50] = { name = "Kage", minPoints = -1, skillBonus = 20, skillAtribute = 20, skillHp = 20000 }, } for _, rk in pairs (GRADUATION.RANKS) do local cond = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(cond, CONDITION_PARAM_SUBID, 910) setConditionParam(cond, CONDITION_PARAM_TICKS, -1) setConditionParam(cond, CONDITION_PARAM_STAT_MAGICLEVEL, rk.skillBonus) setConditionParam(cond, CONDITION_PARAM_SKILL_FIST, rk.skillAtribute) setConditionParam(cond, CONDITION_PARAM_SKILL_CLUB, rk.skillAtribute) setConditionParam(cond, CONDITION_PARAM_SKILL_SWORD, rk.skillAtribute) setConditionParam(cond, CONDITION_PARAM_SKILL_DISTANCE, rk.skillAtribute) setConditionParam(cond, CONDITION_PARAM_STAT_MAXHEALTH, rk.skillHp) GRADUATION.conditions[_] = cond end GRADUATION.setEloPoints = function(cid, value) setPlayerStorageValue(cid, GRADUATION.eloPointsStorage, value) updateRankBonus(cid) end GRADUATION.getEloPoints = function(cid) local points = getPlayerStorageValue(cid, GRADUATION.eloPointsStorage) if points == -1 then points = 0 end return points end GRADUATION.addEloPoints = function(cid, add) GRADUATION.setEloPoints(cid, GRADUATION.getEloPoints(cid) + add) return GRADUATION.getEloPoints(cid) end GRADUATION.getPlayerElo = function(cid) local playerRank = nil local eloPoints = GRADUATION.getEloPoints(cid) if #GRADUATION.kages == 0 then inputKages() end for _, kage in pairs(GRADUATION.kages) do if kage.guid == getPlayerGUID(cid) then playerRank = GRADUATION.RANKS[50] playerRank.rankId = 50 return playerRank end end local town = getPlayerTown(cid) for _, rank in pairs(GRADUATION.RANKS) do if (GRADUATION.kages[town] and rank.pointsBasedOnKage and eloPoints >= (rank.minPoints/100 * GRADUATION.kages[town].eloPoints)) or (rank.minPoints >= 0 and eloPoints >= rank.minPoints and not rank.pointsBasedOnKage) then playerRank = rank playerRank.rankId = _ end end return playerRank end function updateRankBonus(cid) local rank = GRADUATION.getPlayerElo(cid) doAddCondition(cid, GRADUATION.conditions[rank.rankId]) end GAME_TOWNS = { {id=1, name="Small City", kage={id=5, name="Hokage"}, outfitId = 904}, {id=2, name="Rookgard", kage={id=4, name="Kazekage"}, outfitId = 905}, {id=3, name="City Center", kage={id=3, name="Mizukage"}, outfitId = 906}, {id=4, name="Ice City", kage={id=2, name="Tsuchikage"}, outfitId = 903}, {id=5, name="Cidade Perdida", kage={id=1, name="Raikage"}, outfitId = 902}, } function refreshTowns() print("Updating towns kage...") GRADUATION.kages = {} db.query("DELETE FROM `player_storage` WHERE `key` = 11151;") for _, town in pairs(GAME_TOWNS) do local result = db.getResult("SELECT `p`.`name`, `p`.`town_id`, `st`.`player_id`, CONVERT(`st`.`value`, UNSIGNED INTEGER) AS `sto_value` FROM `player_storage` AS `st`, `players` AS `p` WHERE `p`.id = `st`.`player_id` and `st`.`key` = 176602 AND `p`.`town_id` = "..tonumber(town.id).." ORDER BY `sto_value` DESC LIMIT 1;") if(result:getID() ~= -1) then if (result:getDataInt('sto_value') >= GRADUATION.minKagePoints) then db.query("INSERT INTO `player_storage` VALUES ("..tonumber(result:getDataInt('player_id'))..",11151,"..tostring(town.kage.id)..");"); print(town.kage.name.." from ".. town.name.." is ".. result:getDataString('name') ..".") GRADUATION.kages[town.id] = {id = town.kage.id, guid = result:getDataInt('player_id'), eloPoints = result:getDataInt('sto_value')} end result:free() end end end function inputKages() for _, town in pairs(GAME_TOWNS) do local result = db.getResult("SELECT `p`.`name`, `p`.`town_id`, `st`.`player_id`, CONVERT(`st`.`value`, UNSIGNED INTEGER) AS `sto_value` FROM `player_storage` AS `st`, `players` AS `p` WHERE `p`.id = `st`.`player_id` and `st`.`key` = 176602 AND `p`.`town_id` = "..tonumber(town.id).." ORDER BY `sto_value` DESC LIMIT 1;") if(result:getID() ~= -1) then if (result:getDataInt('sto_value') >= GRADUATION.minKagePoints) then GRADUATION.kages[town.id] = {id = town.kage.id, guid = result:getDataInt('player_id'), eloPoints = result:getDataInt('sto_value')} end result:free() end end end function getPlayerTownInfo(cid) local townId = getPlayerTown(cid) for _, town in pairs(GAME_TOWNS) do if town.id == townId then return town end end return nil end Talkactions: Mostrar conteúdo oculto function onSay(cid, words, param) local playerTownData = GAME_TOWNS[getPlayerTown(cid)] local playerTownData = getPlayerTownInfo(cid) if playerTownData and getPlayerStorageValue(cid, 11151) and playerTownData.kage.id == tonumber(getPlayerStorageValue(cid, 11151)) then doCreatureChangeOutfit(cid, {lookType=playerTownData.outfitId}) else doPlayerSendCancel(cid, "Apenas kage pode usar esse comando!.") end return true end
Postado Dezembro 17, 2020 4 anos É só mudar a storage ali (11151) para a que ele ganha quando vira kage Troca por 176602 Editado Dezembro 17, 2020 4 anos por Nysman (veja o histórico de edições)
Postado Dezembro 17, 2020 4 anos Autor Em 17/12/2020 em 00:50, Nysman disse: É só mudar a storage ali (11151) para a que ele ganha quando vira kage Troca por 176602 vou testar, mas esse sistema usa duas storage. 176602 e 11151
Postado Dezembro 17, 2020 4 anos Mas esse storage ta onde? em outfit.xml? Porque eu creio que ai tem que colcoar a sto que ele pega quando vira kage, sacou?
Postado Dezembro 17, 2020 4 anos Autor ele não usa outfit.xml pq ele seta a newtype pelo comando = doCreatureChangeOutfit(cid, {lookType=playerTownData.outfitId}) Em 17/12/2020 em 00:18, elielder disse: GAME_TOWNS = { {id=1, name="Small City", kage={id=5, name="Hokage"}, outfitId = 904}, {id=2, name="Rookgard", kage={id=4, name="Kazekage"}, outfitId = 905}, {id=3, name="City Center", kage={id=3, name="Mizukage"}, outfitId = 906}, {id=4, name="Ice City", kage={id=2, name="Tsuchikage"}, outfitId = 903}, {id=5, name="Cidade Perdida", kage={id=1, name="Raikage"}, outfitId = 902}, } a outfit de cada kage esta setada no lib
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.