-
Total de itens
1599 -
Registro em
-
Última visita
-
Dias Ganhos
7
Tudo que caotic postou
-
Ola galera xtibia. Eu resolvi fazer o Trainer OFF 1.0 o antigo trainer off beta tinha algumas limitações. Segue o link do Trainer off beta: http://www.xtibia.com/forum/topic/199659-trainer-off-sytem-beta-by-caotic/ Como o próprio nome diz e um treinamento quando o player está off. Ele paga uma taxa para treinar uma certa quantidade de horas e depois suas skills são upadas. Na versão superior foi adicionado Vamos ao sistema lets go: Crie um arquivo lua chamado de trainer em talkactions e coloque isto: local Train = { skill = 0, quant = 0, time = 0, vocations = {}, money = 0, player = 0 } local table = { ["fist"] = SKILL_FIST, ["sword"] = SKILL_SWORD, ["axe"] = SKILL_AXE, ["distance"] = SKILL_DISTANCE, ["shild"] = SKILL_SHIELD, ["fishing"] = SKILL_FISHING } local x = {"First Skill", "Sword Skill", "Axe Skill", "Distance Skill", "Shild Skill", "Fishing Skill"} function Train:new(cid, param, vocations, money, quant) local trainer = { vocations = {}, param = param, player = cid, money = tonumber(money), quant = tonumber(quant) } return setmetatable(trainer, {__index = self}) end function Train:start() cid = self.player local t = string.explode(self.param, ",") if not t[1] or not isNumeric(t[1]) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Diga o tempo que você quer treinar") and false end self.skill = table[t[2]] self.time = t[1]*36000*1000 self.money = self.money*t[1] self.quant = self.quant*t[1] if not t[2] or not table[t[2]] then str = "Lista de skills(Diga a sua skill)\nPara dizer e só escrever /treiner (tempo do treiner,skill)\n" for i = 1, #x do str = ""..str.."\n"..x[i].."" end doShowTextDialog(cid, 1397, str) return true end if isInArray(self.vocations, getPlayerVocation(cid)) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua vocação não permite o trainer") and false end if self.money >= getPlayerMoney(cid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem "..self.money.." de money") and false end if self.time <= 36000*1000 then self.time = 36000*1000 end exhaustion.set(cid, 44226, self.time) doPlayerAddSkill(cid, self.skill, self.quant) doPlayerRemoveMoney(cid, self.money) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Pronto você esta em treinamento") doRemoveCreature(cid) end function onSay(cid, words, param, channel) local voc = {} ---- Vocações QUE NÃO SE PERMITIDAS TRAINER OFF(Se não tiver deixe sem nenhuma) local money = 200000 ----- Quanto de money PARA CADA hora local quant = 4 ------ Quantidade de skill que ele ganha PARA CADA HORA local trainer = Train:new(cid, param, voc, money, quant) trainer:start() return true end Agora vá em talkactions.xml e coloque esta tag: <talkaction words="/treiner" event="script" value="trainer.lua"/> Agora vá em creaturescripts e crie um arquivo lua chamado de treiner e coloque este codigo: function onLogin(cid) if exhaustion.get(cid, 44226) then doPlayerPopupFYI(cid, "Não e permitido logar enquanto esta treinando") return addEvent(doRemoveCreature, 180, cid) end return true end Registre o evento em login.lua colocando isto antes do ultimo return true: registerCreatureEvent(cid, "treiner") E coloque esta tag em creaturescripts.xml: <event type="login" name="treiner" register = "1" event="script" value="treiner.lua"/>
- 6 respostas
-
- trainer
- trainer system
- (e 4 mais)
-
creatureevent Trainer Off Sytem Beta By Caotic
tópico respondeu ao caotic de caotic em Globalevents e Spells
Ele precisa terminar as horas de treinos para ele pode logar. Ate mais- 18 respostas
-
- trainer off
- trainer off by caotic
- (e 6 mais)
-
Ola galerinha xtibiana. Eu resolvi fazer uma versão superior do report system usando db. Segue o link da versão demo: http://www.xtibia.com/forum/topic/198470-report-sytem-beta/ Esta versão utiliza banco de dados assim fica mais fácil de manipular e o administrador poderá ver os reports "In-Game" além de que eles serão excluídos apos serem lidos. A lista e ordenada pelo level do player "evitando as vezes você ler primeiros possíveis floods". Vamos a instalação. Vá em lib e crie um arquivo lua chamado de report e coloque isto: function getReportByGuid(guid) local shop = db.getResult("SELECT * FROM `report` WHERE `id` = ".. guid ..";") return shop:getDataString("report") end function doPlayerAddReport(cid, report) db.executeQuery("INSERT INTO `report` (`id`, `report`, `level`) VALUES (" .. getPlayerGUID(cid) .. ", '" .. report .. "', " .. getPlayerLevel(cid) .. ");") return true end function showReports(cid) local rep = db.getResult("SELECT * FROM `report` WHERE `id` ORDER BY `level`") str = "Reports Ativos:\n\n" if rep:getID() == -1 then doShowTextDialog(cid, 1387, "Não ha reports disponiveis!") return true end while true do local list = rep:getDataString("report") local players = rep:getDataInt("id") local name = getPlayerNameByGUID(players) str = str .. list .. " -("..players..")- Name ("..name..")]\n\n" db.executeQuery("DELETE FROM `report` WHERE `id` = ".. players.." and `report` = '".. list .."';") if not rep:next() then doShowTextDialog(cid, 1397, str) break end end end Agora vá em talkactions e crie um arquivo LUA chamado de report e coloque este codigo: function onSay(cid, words, param, channel) local time = 4 ---- Exhaustion cada numeral equivale a 1 hora. if param == "" or not param or param == " " then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "E necessario escrever o report") and false end if exhaustion.get(cid, 23246) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você atingiu o limite de reports espere o limite sair") and false end if #param <= 4 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O seu report deve conter mais de 4 caracteres") and false end exhaustion.set(cid, 23246, time*36000*1000) doPlayerAddReport(cid, param) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Parabéns seu report foi enviado para nosso banco de dados logo ele sera visto\nA equipe agradece") return true end Agora continue em talkactions e crie um arquivo lua chamado de logreport e coloque isto: function onSay(cid, words, param, channel) showReports(cid) return true end Agora vá em talkactions.xml e coloque esta tags: Dicas:
- 3 respostas
-
- report system
- denuncias system
- (e 3 mais)
-
Área Incorreta Tópico Moved
-
Que nada. Eu postei para compartilhar. Não ligo para estas coisas.
- 8 respostas
-
- sumons system
- pet system
- (e 3 mais)
-
Ain. Eu nem citei nome . @topic A organização esta razoável como foi dito só falto trabalhar mais nas perguntas
-
Eehuaheaueh' Agora que vi que tem uma tag com meu nick.
-
Eu não curto entrevista "arranjadas" que foram feitas a pedidos do usuário. Tem que ser algo "merecedor"
-
creatureevent CheckPoint(Multiplas vidas)
tópico respondeu ao caotic de caotic em Globalevents e Spells
Ehaueheu. O script ja ta bagunçado se ainda quer mais? Eu queria "Pogar" ele um pouco só que não achei nenhuma utilidade para usar o pog. -
Estava sem nada para fazer e resolvi fazer este script. A ideia e que quando o player morre ele tem "vidas" e ele volta para a posição de onde estava. Você deve alterar somente a quantidade de vidas que cada player terá. Vá em creaturescripts crie um arquivo lua chamado de checkpoint e coloque isto: function onDeath(cid, corpse, killer) if getPlayerStorageValue(cid, 43242) == -1 then if getPlayerStorageValue(cid, 26124) ~= -1 then doPlayerSetLossSkill(cid, getPlayerStorageValue(cid, 26124)) end return true end function recordPos(cid) local pos = getThingPos(cid) setPlayerStorageValue(cid, 12356, pos.x) setPlayerStorageValue(cid, 12367, pos.y) setPlayerStorageValue(cid, 12378, pos.z) end function noLoseAttr(cid, corpse) setPlayerStorageValue(cid, 26124, getPlayerLossSkill(cid)) doPlayerSetLossSkill(cid, 0) doRemoveItem(corpse.uid) end recordPos(cid) noLoseAttr(cid, corpse) return true end function onLogin(cid) local vidas = 3 ---Quantas vidas o player vai ter function returnCheckPoint(cid) local record_pos = {x=getPlayerStorageValue(cid, 12356), y=getPlayerStorageValue(cid, 12367), z=getPlayerStorageValue(cid, 12378)} doTeleportThing(cid, record_pos) end function sendMens(cid) local vidas = getPlayerStorageValue(cid, 43242) local x = {"Você esta com "..vidas.." vidas","Resta "..vidas.." vidas para você", "Cuidado resta "..vidas.." vidas para você"} return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, x[math.random(1, #x)]) end if getPlayerStorageValue(cid, 43242) == -1 then return setPlayerStorageValue(cid, 43242, vidas) and true end sendMens(cid) returnCheckPoint(cid) setPlayerStorageValue(cid, 43242, getPlayerStorageValue(cid, 43242)-1) return true end Coloque esta tags em creaturescripts.xml: <event type="death" name="check" event="script" value="checkpoint.lua"/> <event type="login" name="record"" event="script" value="checkpoint.lua"/> Registre o evento em login.lua colocando isto antes do ultimo return true:
-
lerme você acabou de reviver um tópico de 2011. Leia as regras
-
Ola galera xtibiana!!! O summon system e um sistema de sumonar sistema com algumas novidades. A configuração fica dentro de arquivo xml ficando mais fácil e pratico de modificar. Para sumonar diga /sum(nome do monstro) Para ver a lista de sumons /sumons Então lets go. Dentro de sua pasta "Data" crie um nova pasta chamado de sumon. Depois dentro da pasta sumon crie um novo arquivo XML e coloque isto dentro: <monster name="Demon" mana="3000" level="300" item="2323" health="100" />< <monster name="Bug" mana="2" level="2" item="0" health="0" />< <monster name="Hydra" mana="2000" level="50" item="2323" health="0" />< Esta e minha configuração se quiser pode alterar. Depois vá em talkactions e crie um arquivo lua chamado de sumon e coloque isto: function onSay(cid, words, param, channel) function getSumonInFile() local x = {} local events = io.open("data/sumon/sumon.xml", "r") for i in events:read("*a"):gmatch('<monster name="(.-)" ') do table.insert(x, i) end return x end local function getExistSumonInFile(monster) for i = 1, #getSumonInFile() do if monster == getSumonInFile()[i] then return true end end return false end function getSumonRequiresInFile(monster, attr) local x = {} local events = io.open("data/sumon/sumon.xml", "r") for i in events:read("*a"):gmatch('<monster name="'..monster..'" (.-)/') do local req = tonumber(i:match(''..attr..'="(.-)" ')) table.insert(x, req) end return x[1] or 0 end local mana,level,item,health = getSumonRequiresInFile(param, "mana"),getSumonRequiresInFile(param, "level"),getSumonRequiresInFile(param, "item"),getSumonRequiresInFile(param, "health") local x = {"Vá "..param.." e derrote estes malditos","Seja bem vindo "..param.."","Váaaaa "..param.."","Eae "..param.." esta pronto?!","Vaii "..param.." você e realmente forte"} if param == "" or not param or param == " " then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Precisa de dizer o nome do monsto") and false end if not getExistSumonInFile(param) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este monstro não pode ser sumado") end if getCreatureMana(cid) <= mana then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem "..mana.."de mana para sumonar") and false end if getPlayerLevel(cid) <= level then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem "..level.." de level para summonar") and false end if getPlayerItemCount(cid, item) < 0 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem o item "..item.." para summonar") and false end if getCreatureHealth(cid) <= health then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não "..health.."de health para summonar") and false end doSummonMonster(cid, param) doCreatureAddHealth(cid, -health) doCreatureAddMana(cid, -mana) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, x[math.random(1, #x)]) return true end Agora de novo em talkactions crie um arquivo lua chamado de sumons e coloque isto: function onSay(cid, words, param, channel) function getSumonInFile() local x = {} local events = io.open("data/sumon/sumon.xml", "r") for i in events:read("*a"):gmatch('<monster name="(.-)" ') do table.insert(x, i) end return x end function getSumonRequiresInFile(monster, attr) local x = {} local events = io.open("data/sumon/sumon.xml", "r") for i in events:read("*a"):gmatch('<monster name="'..monster..'" (.-)/') do local req = tonumber(i:match(''..attr..'="(.-)" ')) table.insert(x, req) end return x[1] or 0 end str = "" for i = 1, #getSumonInFile() do local sum = getSumonInFile()[i] local mana,level,item,health = getSumonRequiresInFile(sum, "mana"),getSumonRequiresInFile(sum, "level"),getSumonRequiresInFile(sum, "item"),getSumonRequiresInFile(sum, "health") str = ""..str.."\n"..getSumonInFile()[i].." Level - "..level.." health - "..health.." mana - "..mana.."" end doPlayerPopupFYI(cid, str) return true end E prontinho vou ensinar a configuração no seu arquivo xml:
- 8 respostas
-
- sumons system
- pet system
- (e 3 mais)
-
Boa boa. Vou testar aki e ve como funciona. Parabéns.
-
eu também não concordo nem discordo, muito pelo contrário
tópico respondeu ao Prezyoso de caotic em Lixeira Pública
Gay gay -
Vou mover para a área de programação. Movido
-
Tem certeza que segui o procedimento certo. Crie um arquivo de TEXTO chamado de mensagens na pasta data do seu otserv
- 8 respostas
-
- mensagens off
- sistema de mensagens off
- (e 5 mais)
-
Ola galera xtibiana O radio system eu ja tinha feito numa versão "beta" mais estava muito limitado. O link do sistema beta http://www.xtibia.com/forum/topic/190386-radio-sytem/ Então resolvi fazer uma versão superior O radio sytem e um sistema de (channel ou estações). Um player cria uma nova radio e depois outro player "sincroniza" a partir disso o dono da radio pode mandar mensagens a todos os participantes Para procurar uma radio e exibido uma janela que monstra o (Id da radio, dono da radio, radio esta online ou offline) Vamos aos códigos: function getRadPlayer(cid) local rad = db.getResult("SELECT `rad` FROM `players` WHERE `id` = "..getPlayerGUID(cid)) return rad:getID() ~= -1 and rad:getDataInt("rad") or false end function setPlayerRad(cid, rad) db.executeQuery("UPDATE `players` SET `rad` = "..rad.." WHERE `id` = "..getPlayerGUID(cid)) end function createNewRad(cid) db.executeQuery("INSERT INTO `rad` VALUES (".. getPlayerGUID(cid) ..", ".. 1 ..")") db.executeQuery("UPDATE `players` SET `rad` = "..getPlayerGUID(cid).." WHERE `id` = "..getPlayerGUID(cid)) end function getOwnerIdRad(cid) local rad = db.getResult("SELECT * FROM `rad` WHERE `id` = ".. getPlayerGUID(cid) ..";") return rad:getID() ~= -1 and rad:getDataInt("id") or false end function getRadMens(cid) local rad = db.getResult("SELECT * FROM `rad` WHERE `id` = ".. getPlayerGUID(cid) ..";") return rad:getID() ~= -1 and rad:getDataInt("mens") or 0 end function getPlayerOwnerRad(cid) local rad = db.getResult("SELECT * FROM `rad` WHERE `id` = ".. getPlayerGUID(cid) ..";") return rad:getID() ~= -1 and true or false end function getExistRad(id) local rad = db.getResult("SELECT * FROM `rad` WHERE `id` = ".. id ..";") return rad:getID() ~= -1 and true or false end function sendTextForRad(cid, text) local rad = db.getResult("SELECT * FROM `rad` WHERE `id` = ".. getPlayerGUID(cid) ..";") local mens = getRadMens(cid)+1 for i =1, #getPlayersOnline() do if getRadPlayer(getPlayersOnline()[i]) == getPlayerGUID(cid) then doPlayerSendTextMessage(getPlayersOnline()[i], MESSAGE_INFO_DESCR, text) db.executeQuery("UPDATE `rad` SET `mens` = "..mens.." WHERE `id` = "..getPlayerGUID(cid)) end end end Vá em talkactions e crie um arquivo lua chamado de rad e coloque isto: function onSay(cid, words, param, channel) local t = string.explode(param, ",") if not t[1] then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque o id da radio para participar dela") and false end if getOwnerIdRad(cid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode participar de outras radios porque você ja tem uma") and false end if not getExistRad(tonumber(t[1])) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Esta radio não existe") and false end setPlayerRad(cid, tonumber(t[1])) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você esta sincronizado na radio "..t[1].."") return true end Continue em talkactions e crie um arquivo lua chamado de list e coloque isto: function onSay(cid, words, param, channel) local rad = db.getResult("SELECT * FROM `rad` WHERE `id` ORDER BY `mens`") str = "Radio Ons:\n\n" if rad:getID() == -1 then doShowTextDialog(cid, 1387, "Não ha radio online") return true end while true do local id = rad:getDataInt("id") local name = getPlayerByNameWildcard(getPlayerNameByGUID(id)) and getPlayerNameByGUID(id) or "offline" str = str .. id .. " - Dono da Radio - ("..name..")\n\n" if not rad:next() then doShowTextDialog(cid, 1397, str) break end end return true end Depois em talkactions de novo crie um arquivo lua chamado de createrad e coloque isto: function onSay(cid, words, param, channel) local price = 22220 -- Preço para criar a radio (detalhe coloque um preço bem alto para o otserv não ficar com muitas radios) if getPlayerMoney(cid) <= price then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem dinheiro suficiente para criar uma radio") and false end if getPlayerOwnerRad(cid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você ja tem uma radio ID "..getOwnerIdRad(cid).."") and false end createNewRad(cid) doPlayerRemoveMoney(cid, price) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua radio foi criado seu ID é "..getOwnerIdRad(cid).." convide suas amigos para participar dela") return true end Terminado na mesma pasta(talkactions) crie um arquivo lua chamado de txt e coloque isto: function onSay(cid, words, param, channel) local t = string.explode(param, ",") if not t[1] then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloca a mensagem que deseja enviar para os participantes da sua radio") and false end if not getPlayerOwnerRad(cid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não tem radio") and false end if #param < 4 then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua mensagem deve ser maior") and false end sendTextForRad(cid, "("..getOwnerIdRad(cid)..") "..getPlayerName(cid).." - "..t[1].." ") return true end Coloque esta tags em talkactions.xml: Para usar e simples:
- 1 resposta
-
- radio
- radio em otserv
- (e 4 mais)
-
retireCharactersInArrayString(string, array)
tópico respondeu ao caotic de caotic em Mods, funções e outros
Ja que ele repete todas as caracteres da string ele acaba retirando o "O". -
Eu curti a função nextHorario. Teve que ate separar os valores do ":" e depois transformar tudo em numero para depois comparar valores numa tabela. E isto ai slicer gostei
-
E isto ai slicer. Foda-se o processamento da maquina e viva o pog
-
Boa smix. E uma boa usar módulos. Seria interessante retornar booleanos para ficar mais fácil de manipular.
-
retireCharactersInArrayString(string, array)
tópico respondeu ao caotic de caotic em Mods, funções e outros
Ja sabia... Eu fiz ela so para desafiar o sub. Ate mais.
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.