-
Quem Está Navegando 0 membros estão online
Nenhum usuário registrado visualizando esta página.
-
Conteúdo Similar
-
Por L3K0T
Como diz o título? Você pode gerar as funções do seu TFS em um arquivo de texto. Para fazer isso, basta ir em uma das bibliotecas (LIB) e adicionar o seguinte código no final.
-- Função para obter todas as funções disponíveis no ambiente Lua
function getLuaFunctions()
local function iterateTable(tbl, prefix)
local str = ""
for key, value in pairs(tbl) do
if type(value) == 'function' then
str = str .. prefix .. key .. ','
elseif type(value) == 'table' then
str = str .. iterateTable(value, prefix .. key .. '.')
end
end
return str
end
local str = iterateTable(_G, "")
return string.explode(str, ',')
end
-- Obtém todas as funções disponíveis
local functionsList = getLuaFunctions()
-- Ordena a lista de funções
table.sort(functionsList)
-- Cria uma string de data no formato 'YYYY-MM-DD'
local currentDate = os.date('%Y-%m-%d')
-- Salva a lista de funções em um arquivo de texto com a data atual
local fileName = 'funcoes_do_seu_servidor_' .. currentDate .. '.txt'
local file = io.open(fileName, 'w')
for i, funcName in ipairs(functionsList) do
if funcName ~= "" then
file:write((i - 1) .. ' - ' .. funcName .. '\n')
end
end
file:close()
-- Criado por L3K0T
Depois, é só iniciar o seu servidor e assim todas as funções do seu servidor vão aparecer no arquivo TXT com a data de criação.
"Isso é útil para resolver problemas de scripts e trabalhar de forma mais eficiente, manipulando as funções."
-
Por Diego767
Boa tarde, estou com o problema no meu Prey System, onde todos os chares sempre ficam com a mesma Prey independente do monstro.
Alguem sabe o que pode ter de errado?
Prey = {
Credits = "System remake: Westwol ~ Packet logic: Cjaker ~ Formulas: slavidodo",
Version = "4.0",
LastUpdate = "07/07/19",
}
CONST_PREY_SLOT_FIRST = 0
CONST_PREY_SLOT_SECOND = 1
CONST_PREY_SLOT_THIRD = 2
CONST_MONSTER_TIER_BRONZE = 0
CONST_MONSTER_TIER_SILVER = 1
CONST_MONSTER_TIER_GOLD = 2
CONST_MONSTER_TIER_GOLD = 3
CONST_MONSTER_TIER_PLATINUM = 4
CONST_BONUS_DAMAGE_BOOST = 0
CONST_BONUS_DAMAGE_REDUCTION = 1
CONST_BONUS_XP_BONUS = 2
CONST_BONUS_IMPROVED_LOOT = 3
Prey.Config = {
ListRerollPrice = 2000
}
Prey.S_Packets = {
ShowDialog = 0xED,
PreyRerollPrice = 0xE9,
PreyData = 0xE8,
PreyTimeLeft = 0xE7
}
Prey.StateTypes = {
LOCKED = 0,
INACTIVE = 1,
ACTIVE = 2,
SELECTION = 3,
SELECTION_CHANGE_MONSTER = 4
}
Prey.UnlockTypes = {
PREMIUM_OR_STORE = 0,
STORE = 1,
NONE = 2
}
Prey.Actions = {
NEW_LIST = 0,
NEW_BONUS = 1,
SELECT = 2,
}
Prey.C_Packets = {
RequestData = 0xED,
PreyAction = 0xEB
}
Prey.Bonuses = {
[CONST_BONUS_DAMAGE_BOOST] = {step = 2, min = 7, max = 25},
[CONST_BONUS_DAMAGE_REDUCTION] = {step = 2, min = 12, max = 30},
[CONST_BONUS_XP_BONUS] = {step = 3, min = 13, max = 40},
[CONST_BONUS_IMPROVED_LOOT] = {step = 3, min = 13, max = 40}
}
Prey.MonsterList = {
[CONST_MONSTER_TIER_BRONZE] = {
"Rotworm", "Carrion Worm", "Skeleton", "Ghoul", "Cyclops", "Cyclops Drone", "Cyclops Smith", "Dark Magician",
"Beholder", "Dragon", "Dragon Hatchling", "Dwarf", "Dwarf Guard", "Dwarf Geomancer", "Dwarf Soldier", "Earth Elemental",
"Fire Elemental", "Gargoyle", "Merlkin", "Minotaur", "Minotaur Guard", "Minotaur Mage", "Minotaur Archer", "Nomad",
"Amazon", "Hunter", "Orc", "Orc Berserker", "Orc Leader", "Orc Shaman", "Orc Spearman", "Orc Warlord", "Panda",
"Rotworm Queen", "Tarantula", "Scarab", "Skeleton Warrior", "Smuggler"
},
[CONST_MONSTER_TIER_SILVER] = {
"Pirate Buccaneer", "Pirate Ghost", "Pirate Marauder", "Pirate Skeleton", "Dragon Lord Hatchling", "Frost Dragon Hatchling",
"Behemoth", "Faun", "Dark Faun", "Dragon Lord", "Frost Dragon", "Hydra", "Hero", "Bullwark", "Giant Spider", "Crystal Spider",
"Deepling Brawler", "Deepling Elite", "Deepling Guard", "Deepling Master Librarian", "Deepling Tyrant", "Deepling Warrior",
"Wyrm", "Elder Wyrm", "Fleshslicer", "Frost Giant", "Ghastly Dragon", "Ice Golem", "Infernalist", "Warlock", "Lich",
"Lizard Chosen", "Lizard Dragon Priest", "Lizard High Guard", "Lizard Legionnaire", "Lizard Zaogun", "Massive Energy Elemental",
"Massive Fire Elemental", "Massive Water Elemental", "Minotaur Amazon", "Execowtioner", "Minotaur Hunter", "Mooh'Tah Warrior",
"Mutated Bat", "Mutated Human", "Necromancer", "Nightmare", "Nightmare Scion", "Ogre Brute", "Ogre Savage", "Ogre Shaman",
"Orclops Doomhauler", "Orclops Ravager", "Quara Constrictor", "Quara Constrictor Scout", "Quara Hydromancer", "Quara Mantassin",
"Quara Pincher", "Quara Predator", "Sea Serpent", "Shaper Matriarch", "Silencer", "Spitter", "Worker Golem", "Werewolf",
"Hellspawn", "Shadow Tentacle", "Vampire Bride", "Dragonling", "Shock Head", "Frazzlemaw",
},
[CONST_MONSTER_TIER_GOLD] = {
"Plaguesmith", "Demon", "Crystal Spider", "Defiler", "Destroyer", "Diamond Servant", "Draken Elite",
"Draken Spellweaver", "Draken Warmaster", "Draken Abomination", "Feversleep", "Terrorsleep", "Draptor",
"Grim Reaper", "Guzzlemaw", "Hellfire Fighter", "Hand of Cursed Fate", "Hellhound", "Juggernaut",
"Sparkion", "Dark Torturer", "Undead Dragon", "Retching Horror", "Choking Fear", "Choking Fear",
"Shiversleep", "Sight Of Surrender", "Demon Outcast", "Blightwalker", "Grimeleech", "Vexclaw", "Grimeleech",
"Dawnfire Asura", "Midnight Asura", "Frost Flower Asura", "True Dawnfire Asura", "True Frost Flower Asura",
"True Midnight Asura"
}
}
-- Communication functions
function Player.sendResource(self, resourceType, value)
local typeByte = 0
if resourceType == "bank" then
typeByte = 0x00
elseif resourceType == "inventory" then
typeByte = 0x01
elseif resourceType == "prey" then
typeByte = 0x0A
end
local msg = NetworkMessage()
msg:addByte(0xEE)
msg:addByte(typeByte)
msg:addU64(value)
msg:sendToPlayer(self)
end
function Player.sendErrorDialog(self, error)
local msg = NetworkMessage()
msg:addByte(Prey.S_Packets.ShowDialog)
msg:addByte(0x15)
msg:addString(error)
msg:sendToPlayer(self)
end
-- Core functions
function Player.setRandomBonusValue(self, slot, bonus, typeChange)
local type = self:getPreyBonusType(slot)
local min = Prey.Bonuses[type].min
local max = Prey.Bonuses[type].max
local step = Prey.Bonuses[type].step
if bonus then
if typeChange then
self:setPreyBonusValue(slot, math.random(min, max))
else
local oldValue = self:getPreyBonusValue(slot)
if (oldValue + step >= max) then
self:setPreyBonusValue(slot, max)
else
while (self:getPreyBonusValue(slot) - oldValue < step) do
self:setPreyBonusValue(slot, math.random(min, max))
end
end
end
else
self:setPreyBonusValue(slot, math.random(min, max))
end
self:setPreyBonusGrade(slot, math.floor((self:getPreyBonusValue(slot) - min) / (max - min) * 10))
if (self:getPreyBonusGrade(slot) == 10 and self:getPreyBonusValue(slot) < max) then
self:setPreyBonusGrade(slot, self:getPreyBonusGrade(slot) - 1)
end
end
function Player.getMonsterTier(self)
if self:getLevel() > 0 and self:getLevel() < 60 then
return CONST_MONSTER_TIER_BRONZE
elseif self:getLevel() >= 60 and self:getLevel() < 160 then
return CONST_MONSTER_TIER_SILVER
elseif self:getLevel() >= 160 then
return CONST_MONSTER_TIER_GOLD
end
end
function Player.createMonsterList(self)
-- Do not allow repeated monsters
local repeatedList = {}
for slot = CONST_PREY_SLOT_FIRST, CONST_PREY_SLOT_THIRD do
if (self:getPreyCurrentMonster(slot) ~= '') then
repeatedList[#repeatedList + 1] = self:getPreyCurrentMonster(slot)
end
if (self:getPreyMonsterList(slot) ~= '') then
local currentList = self:getPreyMonsterList(slot):split(";")
for i = 1, #currentList do
repeatedList[#repeatedList + 1] = currentList
end
end
end
-- Generating monsterList
local monsters = {}
while (#monsters ~= 9) do
local randomMonster = Prey.MonsterList[self:getMonsterTier()][math.random(#Prey.MonsterList[self:getMonsterTier()])]
-- Verify that monster actually exists
if MonsterType(randomMonster) and not table.contains(monsters, randomMonster) and not table.contains(repeatedList, randomMonster) then
monsters[#monsters + 1] = randomMonster
end
end
return table.concat(monsters, ";")
end
function Player.resetPreySlot(self, slot, from)
self:setPreyMonsterList(slot, self:createMonsterList())
self:setPreyState(slot, from)
return self:sendPreyData(slot)
end
function Player.getMinutesUntilFreeReroll(self, slot)
local currentTime = os.time()
if (self:getPreyNextUse(slot) <= currentTime) then
return 0
end
return math.floor((self:getPreyNextUse(slot) - currentTime) / 60)
end
function Player.getRerollPrice(self)
return (self:getLevel() / 2) * 100
end
function onRecvbyte(player, msg, byte)
if (byte == Prey.C_Packets.RequestData) then
player:sendPreyData(CONST_PREY_SLOT_FIRST)
player:sendPreyData(CONST_PREY_SLOT_SECOND)
player:sendPreyData(CONST_PREY_SLOT_THIRD)
elseif (byte == Prey.C_Packets.PreyAction) then
player:preyAction(msg)
end
end
function Player.preyAction(self, msg)
local slot = msg:getByte()
local action = msg:getByte()
if not slot then
return self:sendErrorDialog("Sorry, there was an issue, please relog-in.")
end
-- Verify whether the slot is unlocked
if (self:getPreyUnlocked(slot) ~= 1) then
return self:sendErrorDialog("Sorry, you don't have this slot unlocked yet.")
end
-- Listreroll
if (action == Prey.Actions.NEW_LIST) then
-- Verifying state
if (self:getPreyState(slot) ~= Prey.StateTypes.ACTIVE and self:getPreyState(slot) ~= Prey.StateTypes.SELECTION and self:getPreyState(slot) ~= Prey.StateTypes.SELECTION_CHANGE_MONSTER) then
return self:sendErrorDialog("This is slot is not even active.")
end
-- If free reroll is available
if (self:getMinutesUntilFreeReroll(slot) == 0) then
self:setPreyNextUse(slot, os.time() + 20 * 60 * 60)
elseif (not self:removeMoneyNpc(self:getRerollPrice())) then
return self:sendErrorDialog("You do not have enough money to perform this action.")
end
self:setPreyCurrentMonster(slot, "")
self:setPreyMonsterList(slot, self:createMonsterList())
self:setPreyState(slot, Prey.StateTypes.SELECTION_CHANGE_MONSTER)
-- Bonus reroll
elseif (action == Prey.Actions.NEW_BONUS) then
-- Verifying state
if (self:getPreyState(slot) ~= Prey.StateTypes.ACTIVE) then
return self:sendErrorDialog("This is slot is not even active.")
end
if (self:getPreyBonusRerolls() < 1) then
return self:sendErrorDialog("You don't have any bonus rerolls.")
end
-- Removing bonus rerolls
self:setPreyBonusRerolls(self:getPreyBonusRerolls() - 1)
-- Calculating new bonus
local oldType = self:getPreyBonusType(slot)
self:setPreyBonusType(slot, math.random(CONST_BONUS_DAMAGE_BOOST, CONST_BONUS_IMPROVED_LOOT))
self:setRandomBonusValue(slot, true, (oldType ~= self:getPreyBonusType(slot) and true or false))
-- Select monster from list
elseif (action == Prey.Actions.SELECT) then
local selectedMonster = msg:getByte()
local monsterList = self:getPreyMonsterList(slot):split(";")
-- Verify if the monster exists.
local monster = MonsterType(monsterList[selectedMonster + 1])
if not monster then
return self:sendPreyData(slot)
end
-- Verifying slot state
if (self:getPreyState(slot) ~= Prey.StateTypes.SELECTION and self:getPreyState(slot) ~= Prey.StateTypes.SELECTION_CHANGE_MONSTER) then
return self:sendErrorDialog("This slot can't select monsters.")
end
-- Proceeding to prey monster selection
self:selectPreyMonster(slot, monsterList[selectedMonster + 1])
end
-- Perfom slot update
return self:sendPreyData(slot)
end
function Player.selectPreyMonster(self, slot, monster)
-- Verify if the monster exists.
local monster = MonsterType(monster)
if not monster then
return self:sendPreyData(slot)
end
local msg = NetworkMessage()
-- Only first/expired selection list gets new prey bonus
if (self:getPreyState(slot) == Prey.StateTypes.SELECTION) then
-- Generating random prey type
self:setPreyBonusType(slot, math.random(CONST_BONUS_DAMAGE_BOOST, CONST_BONUS_IMPROVED_LOOT))
-- Generating random bonus stats
self:setRandomBonusValue(slot, false, false)
end
-- Setting current monster
self:setPreyCurrentMonster(slot, monster:getName())
-- Setting preySlot state
self:setPreyState(slot, Prey.StateTypes.ACTIVE)
-- Cleaning up monsterList
self:setPreyMonsterList(slot, "")
-- Time left
self:setPreyTimeLeft(slot, 7200) -- 2 hours
end
function Player.sendPreyData(self, slot)
if not slot then
return true
end
local slotState = self:getPreyState(slot)
local msg = NetworkMessage()
msg:addByte(Prey.S_Packets.PreyData) -- packet header
msg:addByte(slot) -- slot number
msg:addByte(slotState) -- slot state
-- This slot will preserve the same bonus and % but the monster might be changed
if slotState == Prey.StateTypes.SELECTION_CHANGE_MONSTER then
-- This values have to be stored on each slot
msg:addByte(self:getPreyBonusType(slot))
msg:addU16(self:getPreyBonusValue(slot))
msg:addByte(self:getPreyBonusGrade(slot))
-- MonsterList already exists in the slot
local monsterList = self:getPreyMonsterList(slot):split(";")
msg:addByte(#monsterList)
for i = 1, #monsterList do
local monster = MonsterType(monsterList)
if monster then
msg:addString(monster:getName())
msg:addU16(monster:getOutfit().lookType or 21)
msg:addByte(monster:getOutfit().lookHead or 0x00)
msg:addByte(monster:getOutfit().lookBody or 0x00)
msg:addByte(monster:getOutfit().lookLegs or 0x00)
msg:addByte(monster:getOutfit().lookFeet or 0x00)
msg:addByte(monster:getOutfit().lookAddons or 0x00)
else
-- Reset slot as it got bugged
return self:resetPreySlot(slot, Prey.StateTypes.SELECTION_CHANGE_MONSTER)
end
end
-- This slot will have a new monsterList and a random bonus
elseif slotState == Prey.StateTypes.SELECTION then
-- If list is empty, then we will create a new one and assign it to the monsterList or timeleft = 0
local preyMonsterList = self:getPreyMonsterList(slot)
if preyMonsterList == '' then
self:setPreyMonsterList(slot, self:createMonsterList())
-- Resending this preySlot as there was a change.
return self:sendPreyData(slot)
end
local monsterList = preyMonsterList:split(";")
msg:addByte(#monsterList)
for i = 1, #monsterList do
local monster = MonsterType(monsterList)
if monster then
msg:addString(monster:getName())
msg:addU16(monster:getOutfit().lookType or 21)
msg:addByte(monster:getOutfit().lookHead or 0x00)
msg:addByte(monster:getOutfit().lookBody or 0x00)
msg:addByte(monster:getOutfit().lookLegs or 0x00)
msg:addByte(monster:getOutfit().lookFeet or 0x00)
msg:addByte(monster:getOutfit().lookAddons or 0x00)
else
-- Reset slot as it got bugged
return self:resetPreySlot(slot, Prey.StateTypes.SELECTION)
end
end
-- This slot is active and will show current monster and bonus
elseif slotState == Prey.StateTypes.ACTIVE then
-- Getting current monster
local monster = MonsterType(self:getPreyCurrentMonster(slot))
if monster then
msg:addString(monster:getName())
msg:addU16(monster:getOutfit().lookType or 21)
msg:addByte(monster:getOutfit().lookHead or 0x00)
msg:addByte(monster:getOutfit().lookBody or 0x00)
msg:addByte(monster:getOutfit().lookLegs or 0x00)
msg:addByte(monster:getOutfit().lookFeet or 0x00)
msg:addByte(monster:getOutfit().lookAddons or 0x00)
msg:addByte(self:getPreyBonusType(slot))
msg:addU16(self:getPreyBonusValue(slot))
msg:addByte(self:getPreyBonusGrade(slot))
msg:addU16(self:getPreyTimeLeft(slot))
else
-- Reset slot as it got expired or bugged.
return self:resetPreySlot(slot, Prey.StateTypes.SELECTION)
end
-- This slot is inactive and will not take any extra bytes
elseif slotState == Prey.StateTypes.INACTIVE then
elseif slotState == Prey.StateTypes.LOCKED then
msg.addByte(Prey.UnlockTypes.PREMIUM_OR_STORE) -- Store unlock method
end
-- Resources and times are always sent
msg:addU16(self:getMinutesUntilFreeReroll(slot)) -- next prey reroll here
-- Client 11.9+ compat, feature unavailable.
if self:getClient().version >= 1190 then
msg:addByte(0x00) -- preyWildCards
end
msg:addByte(0xEC)
self:sendResource("prey", self:getPreyBonusRerolls())
self:sendResource("bank", self:getBankBalance())
self:sendResource("inventory", self:getMoney())
-- List reroll price
msg:addByte(Prey.S_Packets.PreyRerollPrice)
msg:addU32(self:getRerollPrice())
-- Client 11.9+ compat, feature unavailable.
if self:getClient().version >= 1190 then
msg:addByte(0x00)
msg:addByte(0x00)
end
-- Sending message to client
msg:sendToPlayer(self)
end
-
Por JuremaFox
Olá pessoal venho aqui postar o script de loteria mostrando os itens e os resultados na página do gesior, pesquisei no forum mas não achei o sistema com a página no gesior compatível com TFS 1.2 (os que achei não mostrava o resultado no site ou deu algum erro no distro). Achei o script em um forum gringo e a página do gesior aqui no forum, mas modifiquei porque haviam erros. Peço que se eu estiver enganado me avisem que removerei esse tópico. NÃO DAREI SUPORTE, PRA QUEM ENTENDE O BÁSICO DE SCRIPT SERÁ FÁCIL CONFIGURAR.
Vamos lá primeiramente crie um arquivo lua em globalevent/scripts com o nome lottery.lua e adicione
em seguida em globalevents.xml adicione
agora crie uma página no seu gesior com o nome lottery.php e coloque
agora vá na sua database e execute o comando SQL
pronto o sistema está ok, configurado para sortear 1 dos membros online de 3 em 3 horas, editar no globalevent e na página do gesior os itens que será sorteado. Agora a imagem de como ficará no site.
Créditos : Shyzoul do forum gringo pelo script.
WalaceBz pela página do gesior, que fiz uma pequena modificação, o script original dele é encontrado nesse post AQUI.
Eu por trazer ao forum e funcionando perfeitamente em TFS 1.2
-
Por JuremaFox
Não sou muito bom nisso, mas precisei desse sistema, procurei e não encontrei por aqui um que funcionasse em TFS 1.2, achei esse em um site gringo, não irei dar suporte nem formatar esse post, colocarei o sistema e algumas fotos.
vamos lá, peço que movam para área correta caso esteja no local errado.
primeiramente abra sua database e execute esse sql
depois vá na pasta das paginas do gesior e crie um arquivo php com nome sellchar.php e adicione
depois crie um arquivo chamado buychar.php
pronto o sistema está OK, agora basta criar as paginas no index.php ou layout.php do seu gesior, testado no gesior 2012 não sei se funcionará em outros.
CRÉDITOS: não lembro o nome do mlk lá.
-
-
Estatísticas dos Fóruns
96847
Tópicos519611
Posts
Posts Recomendados
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.