
icemirow
Membro
-
Registro em
-
Última visita
Histórico de Curtidas
-
icemirow recebeu reputação de Rimer Lathar em Download Clients 11+ IP 127.0.0.1dae irmão @JZDJ, me tira uma dúvida, se quiser alterar o ip para o otserv, é só alterar lá com o notepad, ou tem q fazer outro processo? valeu trabalho tá bom de mais!
-
icemirow deu reputação a JZDJ em Download Clients 11+ IP 127.0.0.1Olá galera do TK.
Hoje eu trago vários clientes de Tibia 11+ com IP 127.0.0.1.
Vi que alguns usuários não estão conseguindo algumas versões 11 então resolvi postar aqui.
Estou disponibilizando o EXECUTÁVEL DO CLIENTE.
Para que funcione é só colocar na pasta BIN da versão correspondente.
Também disponibilizei a pasta completa compactada.
Vamos ao que interessa.
Tibia 11.43.5504
127.0.0.1-11.43.5504.exe
SCAN do cliente
Pasta completa: Tibia 11.43.5504.rar
SCAN pasta completa
Tibia 11.44.5516
127.0.0.1-11.44.5516.exe
SCAN do cliente
Pasta completa: Tibia 11.44.5516.rar
SCAN pasta completa
Tibia 11.46.5556
127.0.0.1-11.46.5556.exe
SCAN do cliente
Pasta completa: Tibia 11.46.5556.rar
SCAN pasta completa
Tibia 11.47.5640
127.0.0.1-11.47.5640.exe
SCAN do cliente
Pasta completa: Tibia_11_47.5640.rar
SCAN pasta completa
Tibia 11.47.5674
127.0.0.1-11.47.5674.exe
SCAN do cliente
Pasta completa: Tibia_11_47.5674.rar
SCAN pasta completa
Tibia 11.48.5712
127.0.0.1-11.48.5712.exe
SCAN do cliente
Pasta completa: Tibia_11_48.5712.rar
SCAN pasta completa
Tibia 11.48.5753
127.0.0.1-11.48.5753.exe
SCAN do cliente
Pasta completa: Tibia_11_48.5753.rar
SCAN pasta completa
Tibia 11.49.5813
127.0.0.1-11.49.5813.exe
SCAN do cliente
Pasta completa: Tibia_11_49.5813.rar
SCAN pasta completa
Tibia 11.49.5884
127.0.0.1-11.49.5884.exe
SCAN do cliente
Pasta completa: Tibia_11_49.5884.rar
SCAN pasta completa
Tibia 11.49.5921
127.0.0.1-11.49.5921.exe
SCAN do cliente
Pasta completa: Tibia_11_49.5921.rar
SCAN pasta completa
Tibia 11.49.5983
127.0.0.1-11.49.5983.exe
SCAN do cliente
Pasta completa: Tibia_11_49.5983.rar
SCAN pasta completa
Tibia 11.49.6018
127.0.0.1-11.49.6018.exe
SCAN do cliente
Pasta completa: Tibia 11.49.6018.rar
SCAN pasta completa
Tibia 11.49.6030
127.0.0.1-11.49.6030.exe
SCAN do cliente
Tibia 11.49.6030.rar
SCAN pasta completa
Tibia 11.50.6055
127.0.0.1-11.50.6055.exe
SCAN do cliente
Tibia 11.50.6055.rar
SCAN pasta completa
Tibia 11.51.6099
127.0.0.1-11.51.6099.exe
SCAN do cliente
Tibia 11.51.6099.rar
SCAN pasta completa
Tibia 11.52.6104
127.0.0.1-11.52.6104.exe
SCAN do cliente
Tibia 11.52.6104.rar
SCAN pasta completa
Tibia 11.55.6239
127.0.0.1-11.55.6239.exe
SCAN do cliente
Tibia 11.55.6239.rar
SCAN pasta completa
Tibia 11.56.6239
127.0.0.1-11.56.6239.exe
SCAN do cliente
Tibia 11.56.6239.rar
SCAN pasta completa
Tibia 11.57.6239
127.0.0.1-11.57.6239.exe
SCAN do cliente
Tibia 11.57.6239.rar
SCAN pasta completa
Tibia 11.58.6239
127.0.0.1-11.58.6239.exe
SCAN do cliente
Tibia 11.58.6239.rar
SCAN pasta completa
Tibia 11.58.6239 ATUALIZADO
127.0.0.1-11_58.6239.exe ATUALIZADO
SCAN do cliente
Tibia 11.58.6239 ATUALIZADO.rar
SCAN pasta completa
Tibia 11.59.6424
127.0.0.1-11.59.6424.exe
SCAN do cliente
Tibia 11.59.6424.rar
SCAN pasta completa
Tibia 11.60.6457
127.0.0.1-11.60.6457.exe
SCAN do cliente
Tibia 11.60.6457.rar
SCAN pasta completa
Tibia 11.65.6492
127.0.0.1-11.65.6492.exe
SCAN do cliente
Tibia 11.65.6492.rar
SCAN pasta completa
Tibia 11.65.6507
127.0.0.1-11.65.6507.exe
SCAN do cliente
Tibia 11.65.6507.rar
SCAN pasta completa
Tibia 11.66.6516
127.0.0.1-11.66.6516.exe
SCAN do cliente
Tibia 11.66.6516.rar
SCAN pasta completa
Tibia 11.70.6535
127.0.0.1-11.70.6535.exe
SCAN do cliente
Tibia 11.70.6535.rar
SCAN pasta completa
Tibia 11.70.6543
127.0.0.1-11.70.6543.rar
SCAN do cliente
Tibia 11.70.6543.rar
SCAN pasta completa
Tibia 11.70.6548
127.0.0.1-11.70.6548.rar
SCAN do cliente
Tibia 11.70.6548.rar
SCAN pasta completa
Tibia 11.70.6555
127.0.0.1-11.70.6555.rar
SCAN do cliente
Tibia 11.70.6555.rar
SCAN pasta completa
Espero que eu tenha ajudado.
Créditos:
A Cip pelos clientes e a mim por ter alterado os ips nos mesmos.
REP+ é sempre bom e não dói.
Abraços.
ATT ,
Jaurez/JZDJ
-
icemirow deu reputação a luanluciano93 em [PESQUISA] Proteções contra ataques DDOSOlá pessoal, estou fazendo uma pesquisa com vários donos de OTS para ver qual os tipos de ataques que eles recebem e qual proteção eles usam ...
Você usa métodos de proteções contra ataques? Se sim, quais? Explique.
• Wallison (Aurera-global, 2300 online)
Utilizo serviço externo para proteger o servidor (servecore).
• Natanael (megatibia, 1521 online)
Em primeiro lugar contrate uma empresa que tenha um bom filtro pois sem isso impossivelmente ter "uma certa paz" e o iptables não faz milagres (uso OVH). Em seguida contrate alguém que entenda de proteção tem varios Sys Admin de qualidade e confiaveis no mercado, aconselho Pedro Sodré (@Nightz).
• Felipe (ImperialOT, 919 online, offine)
- Uso a proteção da OVH + a da servecore (hardware), o ataque passa por umas 5 maquinas ate chegar em mim, tipo um proxy. Mas pelo que sei, se souber configurar o firewall da OVH, vc não leva ataque.
Irei atualizando com o tempo ...
• Mod_avasive (proteção)
• cloudfire (proteção)
• OVH (servidor)
-
icemirow deu reputação a luanluciano93 em Novo Sistema de TrainerOlá, tudo bom? Peguei um sistema que o lobão criou e modifiquei para TFS 1.x (eu uso o 1.3 e funcionou certinho).
Lembrando que todos os créditos são do @xWhiteWolf.
Explicação:
O sistema escolhe automáticamente, entre todas as salas de trainers, aquela que está vazia pra te alocar.
Fiz em dois scripts de movements, um o action id no teleport para entrar na sala e outro no teleport para sair:
trainer_entrar.lua:
trainer_sair.lua:
É isso pessoal, para melhor entendimento de como funciona ou como instalar veja o tópico do lobão: http://www.tibiaking.com/forum/forums/topic/68031-novo-sistema-de-trainer-036~04/
-
icemirow deu reputação a Skydangerous em Mount Rent (NPC) TFS 1.2Está proibido postar em outros fóruns
Informação:
1. Sistema de Alugar montaria via NPC
1.0. Opções por apenas VIP , PREMIUM E FREE
1.1.0. Caso opte por VIP (Exemplo) a montaria não aparecerá para os demais jogadores.
2. Configurável o tempo, tipo da montaria, level e o preço da montaria.
2.1. Acabou o tempo automaticamente remove a montaria.
3.1 Totalmente limpo e fácil de configuração.
Instalação:
LIB: mount_rent.lua
MOUNT_H = { ["war horse"] = {price = 10000, hours = 2, mountid = 17, level = 10, vip = false, premium = false, storage = 500561}, ["fire war horse"] = {price = 30000, hours = 2, mountid = 23, level = 20, vip = true, premium = false, storage = 500562}, ["sandstone scorpion"] = {price = 50000, hours = 1, mountid = 21, level = 10, vip = false, premium = true, storage = 500563} } function Player.checkRentMounts(self) for name, v in pairs(MOUNT_H) do if (self:hasMount(v.mountid)) and (self:getStorageValue(v.storage) ~= -1) and (self:getStorageValue(v.storage) <= os.time()) then self:removeMount(v.mountid) local outfit = self:getOutfit() outfit.lookMount = 0 self:setOutfit(outfit) self:sendTextMessage(MESSAGE_STATUS_WARNING, "The time of your mount ".. name .." has ended.") self:setStorageValue(v.storage, -1) end end return true end TAG: dofile('data/lib/mount_rent.lua')
CREATURESCRIPT: mount_rent.lua
function onLogin(player) player:checkRentMounts() return true end TAG:
<event type="login" name="checkmounts" script="mount_rent.lua"/>
GLOBALEVENTS: mount_rent.lua
function onThink(interval, lastExecution) for _, player in pairs(Game.getPlayers()) do player:checkRentMounts() end return true end TAG:
<globalevent name="CheckMount" interval="60000" script="mount_rent.lua"/>
NPC: mount_rent.lua
local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local keywords = {"aluguel", "alugar", "rent", "mounts", "mount"} function Player.isVip(self) return false end npcHandler:addModule(FocusModule:new()) function creatureSayCallback(cid, type_, msg) if not npcHandler:isFocused(cid) then return false end local msg = string.lower(msg) local player = Player(cid) if isInArray(keywords, msg) then local str = "You can rent" local amount = 0 for name, v in pairs(MOUNT_H) do if not ((v.premium and player:getPremiumDays() < 1) or (v.vip and not player:isVip()) or (player:getLevel() < v.level) or (player:getStorageValue(v.storage) >= os.time())) then str = str .. " {".. name .. "}," amount = amount + 1 end end if amount > 0 then npcHandler:say(str:sub(1, #str - 1) .. "!", cid) npcHandler.topic[cid] = 1 else npcHandler:say("You are not allowed to rent any mount.", cid) end elseif npcHandler.topic[cid] == 1 and MOUNT_H[msg] then local mount = MOUNT_H[msg] if mount.premium and player:getPremiumDays() < 1 then npcHandler:say("You must be premium to rent this mount.", cid) return true elseif player:getLevel() < mount.level then npcHandler:say("You must be, at least, level " .. mount.level .. " to rent this mount.", cid) return true elseif player:getStorageValue(mount.storage) >= os.time() then npcHandler:say("You already have rented this mount!", cid) return true end local str = "You want to rent ".. msg .." for ".. mount.hours .. " hour".. (mount.hours > 1 and "s" or "") npcHandler:say(str .. " for ".. mount.price .. " gold pieces?", cid) npcHandler.topic[cid] = msg elseif type(npcHandler.topic[cid]) == "string" then local mount = MOUNT_H[npcHandler.topic[cid]] if player:removeMoney(mount.price) then player:addMount(mount.mountid) player:setStorageValue(mount.storage, os.time() + mount.hours * 60) npcHandler:say("Here is your ".. npcHandler.topic[cid] ..", it will last until ".. os.date("%d %B %Y %X", os.time() + mount.hours * 60) ..".", cid) else npcHandler:say("Sorry, you do not have enough money to rent the mount!", cid) end npcHandler.topic[cid] = 0 elseif msgcontains(msg, "no") then npcHandler:say("Ok then.", cid) npcHandler.topic[cid] = 0 end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new())
Divirta-se (:
-
icemirow deu reputação a Ivens Pontes em [PagSeguro] Novo Método de Retorno AutomáticoOlá amiguinhos! Esse é meu primeiro script que faço e trago para vocês.
Esse sistema usa a API PHP do PagSeguro, muito mais simples e seguro, sem muitas gambiarras.
Tentei deixar o mais fácil possível de se instalar, qualquer sugestão será bem vinda!
Requisitos:
PHP 5.4.27+
SPL
cURL
SimpleXml
Funcionalidades:
Double Points no config/config.php
Possibilidade de usar vários sites em uma unica conta do PagSeguro
Possibilidade de acrescentar mais funcionalidades ao Gesior ou outro AAC com a API do PagSeguro.
Primeiramente pegue seu token (AQUI) e desative todas as configurações.
Assim:
Feito isso, baixe a source no repositório do GitHub (AQUI).
Extraia o conteúdo e coloque na raiz do seu site (www ou htdocs).
Agora vamos colocar a mão na massa!
Abra config/config.php e coloque esse código onde achar melhor:
$config['pagSeguro']['email'] = "[email protected]"; // Email da conta pagseguro $config['pagSeguro']['token'] = "yourtokenhere"; // Seu TOKEN $config['pagSeguro']['urlRedirect'] = 'http://seusite.com/?subtopic=donate&action=final'; $config['pagSeguro']['urlNotification'] = 'http://seusite.com/retpagseguro.php'; $config['pagSeguro']['productName'] = 'Premium Points'; // Nome do produto que irá aparecer no pagseguro $config['pagSeguro']['productValue'] = 1.00; // valor de cada ponto ex.: 0.50 = R$ 0,50 / 1.50 = R$ 1,50 .... $config['pagSeguro']['doublePoints'] = false; // se true ativa double points / se false desativa $config['pagSeguro']['host'] = 'localhost'; // host banco de dados $config['pagSeguro']['database'] = 'tibiaking_db'; // nome do banco de dados $config['pagSeguro']['databaseUser'] = 'root'; // usuario banco de dados $config['pagSeguro']['databasePass'] = 'tibiaKing3321'; // senha banco de dados Preencha as configurações, não tem muita dificuldade.
Um passo importante para o sistema funcionar corretamente é preencher o ['urlRedirect'] e ['urlNotification'] corretamente.
['urlRedirect'] é a pagina que o PagSeguro irá mandar o comprador depois que ele pagar a solicitação.
Substitua o seusite.com pelo seu site eu se quiser o para outra pagina ex.: seusite.com/?subtopic=accountmanagement
['urlNotification'] é onde o retpagseguro.php está, tenha certeza que ele está na raiz do site, não o coloque em outro lugar para evitar problemas.
Com tudo preenchido vamos ao banco de dados e execute esse código sql:
CREATE TABLE IF NOT EXISTS `pagseguro_transactions` ( `transaction_code` varchar(36) NOT NULL, `name` varchar(200) DEFAULT NULL, `payment_method` varchar(50) NOT NULL, `status` varchar(50) NOT NULL, `item_count` int(11) NOT NULL, `data` datetime NOT NULL, UNIQUE KEY `transaction_code` (`transaction_code`,`status`), KEY `name` (`name`), KEY `status` (`status`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; Ou importe o arquivo pagseguro.sql que vem dentro da pasta schemas.
Feito isso entre em seusite.com/?subtopic=donate e prossiga normalmente como se fosse fazer uma doação.
Se ao clicar no botão de finalizar for levado a esta tela:
Provavelmente você fez tudo corretamente.
Qualquer bug ou dificuldade na instalação só comentar que irei ajudar. Até a próxima!
Scan mais recente: Link
Documentação da API: Link
Agradecimentos:
DexDev
Natanael e Abusolute e Matk (Os sistemas anteriores me fizeram entender a logica da coisa)
-
icemirow deu reputação a Jaurez em Usando RME em 10.00/11.xOlá galera do TK.
Depois de muito sufoco que eu passei tentando fazer "funcionar" o editor de mapa 10.x, descobri pesquisando aqui mesmo no Tibia King como resolver.
Só que os posts que eu acessei não descreviam, digamos, o passo a passo, então vou tentar explicar o mais resumido possível como utilizar.
Tutorial em fotos.
Bem, vamos lá.
Sigam os 10 passos após baixarem.
1- Descompactar o arquivo (dããããã);
2- Executar o RME;
3- Vai pedir a pasta do tibia 11.40;
4- Selecione o tibia 11.40 (Vem junto com o remeres no download);
5- Clique em OK----vai dar erro ( não se preocupe com isso );
6- Cancele a próxima janela;
7- Vai cancelando até parar de aparecer aquelas janelinhas chatas de erro;
8- Não feche o RME;
9- Clique em FILE-depois em PREFERENCES- depois em CLIENT VERSIONS, desmarque o quadrinho CHECK FILE SIGNATURES- clique APPLY-depois OK;
10- SEJA FELIZ e dê um REP bem bacana se te ajudei.
Remeres compatível com as versões atuais 10.00/11x
Scan:
FOTOS DO PASSO A PASSO, as fotos são da outra versão mas vale pro 11.40
ATT,
Jaurez
-
icemirow recebeu reputação de sdnjaks em Compilar DistroFala ai brother! blz?
Sim existe, microsoft visual studio 2012-2015, famoso MSV
Abraços! Se ajudei dá um rep ai
-
Preview
Script
data/spells/spells.xml
<instant name="Ice nova" words="exori gran mas frigo" lvl="45" mana="355" prem="0" exhaustion="2000" needlearn="0" script="ice nova.lua"/> data/spells/scripts/ice nova.lua
local acombat1 = createCombatObject() local acombat2 = createCombatObject() local acombat3 = createCombatObject() local acombat4 = createCombatObject() local acombat5 = createCombatObject() local acombat6 = createCombatObject() local acombat7 = createCombatObject() local acombat8 = createCombatObject() local combat1 = createCombatObject() setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat1, COMBAT_PARAM_EFFECT, 52) setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, 28) setCombatFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, -0.85, -80, -0.9, -127) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat2, COMBAT_PARAM_EFFECT, 52) setCombatParam(combat2, COMBAT_PARAM_DISTANCEEFFECT, 28) setCombatFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, -0.85, -80, -0.9, -127) local combat3 = createCombatObject() setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat3, COMBAT_PARAM_EFFECT, 52) setCombatParam(combat3, COMBAT_PARAM_DISTANCEEFFECT, 28) setCombatFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, -0.85, -80, -0.9, -127) local combat4 = createCombatObject() setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat4, COMBAT_PARAM_EFFECT, 52) setCombatParam(combat4, COMBAT_PARAM_DISTANCEEFFECT, 28) setCombatFormula(combat4, COMBAT_FORMULA_LEVELMAGIC, -0.85, -80, -0.9, -127) local combat5 = createCombatObject() setCombatParam(combat5, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat5, COMBAT_PARAM_EFFECT, 41) setCombatParam(combat5, COMBAT_PARAM_DISTANCEEFFECT, 36) setCombatFormula(combat5, COMBAT_FORMULA_LEVELMAGIC, -0.85, -80, -0.9, -127) local combat6 = createCombatObject() setCombatParam(combat6, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat6, COMBAT_PARAM_EFFECT, 41) setCombatParam(combat6, COMBAT_PARAM_DISTANCEEFFECT, 36) setCombatFormula(combat6, COMBAT_FORMULA_LEVELMAGIC, -0.85, -80, -0.9, -127) local combat7 = createCombatObject() setCombatParam(combat7, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat7, COMBAT_PARAM_EFFECT, 41) setCombatParam(combat7, COMBAT_PARAM_DISTANCEEFFECT, 36) setCombatFormula(combat7, COMBAT_FORMULA_LEVELMAGIC, -0.85, -80, -0.9, -127) local combat8 = createCombatObject() setCombatParam(combat8, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE) setCombatParam(combat8, COMBAT_PARAM_EFFECT, 41) setCombatParam(combat8, COMBAT_PARAM_DISTANCEEFFECT, 36) setCombatFormula(combat8, COMBAT_FORMULA_LEVELMAGIC, -0.0, -80, -0, -127) local condition = createConditionObject(CONDITION_PARALYZE) setConditionParam(condition, CONDITION_PARAM_TICKS, 20000) --setConditionParam(condition, CONDITION_PARAM_SPEED, -200) setConditionFormula(condition, -0.9, 0, -0.9, 0) setCombatCondition(combat1, condition) setCombatCondition(combat2, condition) setCombatCondition(combat3, condition) setCombatCondition(combat4, condition) setCombatCondition(combat5, condition) setCombatCondition(combat6, condition) setCombatCondition(combat7, condition) setCombatCondition(combat8, condition) arr1 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } arr2 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } arr3 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } arr4 = { {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1}, {1, 1, 0, 0, 0, 2, 0, 0, 0, 1, 1}, {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0} } arr5 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } arr6 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 2, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } arr7 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} } arr8 = { {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1}, {1, 1, 0, 0, 0, 2, 0, 0, 0, 1, 1}, {1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0} } local area1 = createCombatArea(arr1) local area2 = createCombatArea(arr2) local area3 = createCombatArea(arr3) local area4 = createCombatArea(arr4) local area5 = createCombatArea(arr5) local area6 = createCombatArea(arr6) local area7 = createCombatArea(arr7) local area8 = createCombatArea(arr8) setCombatArea(acombat1, area1) setCombatArea(acombat2, area2) setCombatArea(acombat3, area3) setCombatArea(acombat4, area4) setCombatArea(acombat5, area5) setCombatArea(acombat6, area6) setCombatArea(acombat7, area7) setCombatArea(acombat8, area8) function onTargetTile(cid, pos) doCombat(cid,combat1,positionToVariant(pos)) end function onTargetTile2(cid, pos) doCombat(cid,combat2,positionToVariant(pos)) end function onTargetTile3(cid, pos) doCombat(cid,combat3,positionToVariant(pos)) end function onTargetTile4(cid, pos) doCombat(cid,combat4,positionToVariant(pos)) end function onTargetTile5(cid, pos) doCombat(cid,combat5,positionToVariant(pos)) end function onTargetTile6(cid, pos) doCombat(cid,combat6,positionToVariant(pos)) end function onTargetTile7(cid, pos) doCombat(cid,combat7,positionToVariant(pos)) end function onTargetTile8(cid, pos) doCombat(cid,combat8,positionToVariant(pos)) end setCombatCallback(acombat1, CALLBACK_PARAM_TARGETTILE, "onTargetTile") setCombatCallback(acombat2, CALLBACK_PARAM_TARGETTILE, "onTargetTile2") setCombatCallback(acombat3, CALLBACK_PARAM_TARGETTILE, "onTargetTile3") setCombatCallback(acombat4, CALLBACK_PARAM_TARGETTILE, "onTargetTile4") setCombatCallback(acombat5, CALLBACK_PARAM_TARGETTILE, "onTargetTile5") setCombatCallback(acombat6, CALLBACK_PARAM_TARGETTILE, "onTargetTile6") setCombatCallback(acombat7, CALLBACK_PARAM_TARGETTILE, "onTargetTile7") setCombatCallback(acombat8, CALLBACK_PARAM_TARGETTILE, "onTargetTile8") local function onCastSpell1(parameters) doCombat(parameters.cid, acombat1, parameters.var) end local function onCastSpell2(parameters) doCombat(parameters.cid, acombat2, parameters.var) end local function onCastSpell3(parameters) doCombat(parameters.cid, acombat3, parameters.var) end local function onCastSpell4(parameters) doCombat(parameters.cid, acombat4, parameters.var) end local function onCastSpell5(parameters) doCombat(parameters.cid, acombat5, parameters.var) end local function onCastSpell6(parameters) doCombat(parameters.cid, acombat6, parameters.var) end local function onCastSpell7(parameters) doCombat(parameters.cid, acombat7, parameters.var) end local function onCastSpell8(parameters) doCombat(parameters.cid, acombat8, parameters.var) end function onCastSpell(cid, var) local parameters = { cid = cid, var = var} addEvent(onCastSpell1, 0, parameters) addEvent(onCastSpell2, 200, parameters) addEvent(onCastSpell3, 400, parameters) addEvent(onCastSpell4, 600, parameters) addEvent(onCastSpell5, 700, parameters) addEvent(onCastSpell6, 900, parameters) addEvent(onCastSpell7, 1100, parameters) addEvent(onCastSpell8, 1300, parameters) end Créditos: orzeleagle
-
icemirow deu reputação a xWhiteWolf em New Library v. 1.2Fala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal)
Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro:
Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha
Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório.
Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20)
Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros.
Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir)
Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu.
Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira.
Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS.
EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida.
EDIT 2: Duas novas funções adicionas, espero que gostem!
EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.
-
icemirow recebeu reputação de Drazyn1291 em Erro ao CompilarFala ai brother! blz?
Seguinte, coloca o passa-a-passo que você está fazendo, pra ver se está tudo certo!
Abraços e fico no aguardo
-
icemirow deu reputação a DeCarvalho em [TFS 1.1+] /namelock /unlockFeito por Sir Islam e é bem simples..
Caso você nbão tenha na db execute a query
db.query("INSERT INTO `player_namelocks`(`player_id`, `reason`, `namelocked_at`, `namelocked_by`) VALUES (".. PlayerGUID.."," .. db.escapeString(reason) .. ","..timeNow.."," .. player:getGuid() .. ")") NameLock
Em talkactions.xml adicione
<talkaction words="/namelock" separator=" " script="namelock.lua" /> <talkaction words="/unlock" separator=" " script="unlock.lua"/ Em namelock.lua adicione
function onSay(player, words, param) if not player:getGroup():getAccess() then return true end local name = param local reason = '' local separatorPos = param:find(',') if separatorPos ~= nil then name = param:sub(0, separatorPos - 1) reason = string.trim(param:sub(separatorPos + 1)) end local PlayerGUID = getPlayerGUIDByName(name) if PlayerGUID == 0 then return false end local timeNow = os.time() db.query("INSERT INTO `player_namelocks`(`player_id`, `reason`, `namelocked_at`, `namelocked_by`) VALUES (".. PlayerGUID.."," .. db.escapeString(reason) .. ","..timeNow.."," .. player:getGuid() .. ")") local target = Player(name) if target ~= nil then player:sendTextMessage(MESSAGE_EVENT_ADVANCE, target:getName() .. " has been Namelock.") target:remove() else player:sendTextMessage(MESSAGE_EVENT_ADVANCE, name .. " has been Namelock.") end end Em unlock.lua adicione
function onSay(player, words, param) if not player:getGroup():getAccess() then return true end local resultId = db.storeQuery("SELECT `id` FROM `players` WHERE `name` = " .. db.escapeString(param)) if resultId == false then return false end db.asyncQuery("DELETE FROM `player_namelocks` WHERE `player_id` = " .. result.getDataInt(resultId, "id")) result.free(resultId) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, param .. " has been unlock.") return false end .~> Como usar
/namelock nome, motivo
/unlock nome
Ajudei? serviu para você? de um rep ae não arranca um pedaço e mostra que esta valendo a pena trazer conteúdo para cá
-
icemirow deu reputação a DeCarvalho em [TFS 1.2] Removendo Inbox/Market & Não Enviar Parcel Para No VocationIsso não é um tutorial mas pode ser entendido como.. são os passos que levaram ao funcionamento do sistema da forma que eu precisava. Funcional em TFS 1.2
Bem semanas atrás eu estava procurando alguém que me ajudasse a bloquear recebimento de parcel por personagens sem vocação (por costumo o povo fala char de rook)
Tentei em lua remover parcel mas só removia 1 e só se o player pegasse, tentei bloquear e nada.. até o Razor tentou com lua e chegou a conclusão que não dava para fazer por lua
Depois de um bom tempo luanluciano93 veio com essa possibilidade (imagino que se era fácil qualquer um poderia ter me ajudado, para mostrar que nem todo mundo curte ajudar)
Procura essa função no arquivo player.cpp.
adicionando uma verificação aqui
depotLocker->internalAddThing(Item::CreateItem(ITEM_MARKET)); Uma condição que verifique se o player tem vocação, tipo assim:
if (vocation->getId() != VOCATION_NONE) { depotLocker->internalAddThing(Item::CreateItem(ITEM_MARKET)); } No meu caso eu queria bloquear tanto o market quanto inbox (onde recebe parcel, item, carta) e só fiz colocar o inbox dentro do if
Parte referente ao meu player.cpp alterado
Resultando nisso
Depois disso informei nos forums que participo sobre ja ter resolvido metade do problema quando Razor comentou que tinha uma ideia para bloquear o envio.. tentamos o hack na source mas estava gerando erro e não compilava, logo depois o Ninja veio com uma ajuda que deu erro no começo mas resolvido finalmente..
A alteração gera uma warning, mas não foi algo que atrapalhou.. o proposto que funcionou foi esse, lembrando que a alteração deve ser feita no mailbox.cpp cru e a adição no mailbox.h
é um arquivo diff, não sei como funciona no windows, mas eu fiz a alteração de forma manual. link para o diff e o conteudo do diff abaixo
mailbox.diff
Meu mailbox.cpp alterado
Meu mailbox.h com a adição
Que resultou nisso
Se o jogador não tem vocação, ele não conseguirá mandar parcel para player algum.. não importa se o player tem vocação
Se o jogador tem vocação ele consegue mandar parcel para quem tem vocação, mas não manda para quem não tem vocação
Bem você pode perguntar, mas se ja bloqueou o envio de parcel, por que bloquear o inbox? .. bem o inbox eu havia feito primeiro mas o bloqueio no envio de parcel previne que o jogador acabe perdendo o item..
Digo caso ele envie o jogador só podera receber quando tiver vocação.. E SE o jogador nunca pegar vocação? foi pensando nisso que o segundo código foi feito, a ideia era que ao receber se fosse sem vocação o objeto retornaria e a label seria destruida.. mas estava gerando erros na build, foi quando Ninja veio com a ideia de bloquear o envio.. após 2as tentativas falhas a terceira gerou um warning simples e compilou.
-
icemirow recebeu reputação de aleknnto em NPTO, Convoca os MelhoresBoa noite galera!
Estamos procurando Spriter!
Deixem seus contatos ou mandem MP!
Abraç Ice
-
icemirow deu reputação a aleknnto em NPTO, Convoca os MelhoresSeguinte Pessoal Venho lhes falar do NPTO,Novamente, Uma Atualizaçao do Antigo Post... Os Sistemas do Servidor sao as Seguintes :
* Clan System ( Contando com Level do Clan e os Shinys dos seus clans )
* Bike System
* Pokedex Estilo Pxg
* Sprites do Novo PXG ( 2015, Contando com as Remakes,CP,Market, Todas as Sprites )
* Novas Balls
* System de DUEL
* Arenas
* TV System e Boost ( Perfeitos )
* Icon System
* OUTLANDS
* Novas Quests
* Pokemons Ate 4 Geraçao COMPLETA
* E Outros Sistemas Diversos para seu divertimento !
Recruto Spriter e Scripter, Equipe ja Conta com HOSTER,WEBMASTER,MAPPER, Entrar pra equipe add skype : alekjsrk !
-
icemirow deu reputação a Summ em Compilando OTserver em Linux Ubuntu 14.04Com o avanço do TFS outras versões como 10.04, 12.04, 13.10... pararam de oferecer uma boa estabilidade para os otserv tfs 1.0 +, então várias pessoa estão migrando para o linux 14.04 e sentem algumas dificuldades com instalação de libs, compilamento e instalação de um banco de dados, então a pedido de um amigo meu fiz um breve tutorial, para alem de ajuda-lo ajudar outros com eventuais dúvidas.
Então vamos ao que interessa :
Downloads necessarios:
SSH Secure Shell
WinSCP
Acessando Shell SSH veja os passos a seguir :
Proxima vez que você for acessa sua maquina por Shell clique em Profile sem ter necessidade de clicar em Quick Connect:
(Comandos para copiar e colar no shell [Copia: ctrl+insert] [Colar: shift+insert]).
Para visualizar ou enviar sua source por ftp vamos usar o WinSCP acesse ele:
Certo!
Enviou a pasta do OTserver para a pasta home? renomeie ela com o f2 para o nome otserver. Feito? Vamos inciar:
Sempre espere terminar por completo o processamento de instalação após executa o comando:
Se aparecer algo (Y or N?) digita Y e da enter.
apt-get update ...
apt-get install git cmake build-essential liblua5.2-dev libgmp3-dev libmysqlclient-dev libboost-system-dev ...
escreva o diretório de onde se encontra sua sources : que no meu caso se encontra em "cd /home/otserv/"
cd /home/otserv/ ...
mkdir build && cd build ...
cmake .. ...
make Pronto só esperar terminar de compilar, quando terminar via ftp use ctrl+r (atualizar) que seu arquivo se encontra na pasta "build" nome o nome "tfs" e o mova para sua pasta "cd /home/otserv".
Agr vamos instalar apache + mysql + phpmyadmin e deixar seu site online.
Via SHELL digite :
apt-get update ...
apt-get install apache2 ...
apt-get install php5 Aqui você irá escolher um senha pro seu apache...
apt-get install mysql-server ...
apt-get install libapache2-mod-auth-mysql Aqui você vai escolher uma senha pro seu phpmyadmin :
apt-get install phpmyadmin ...
echo "include /etc/phpmyadmin/apache.conf" | sudo tee -a /etc/apache2/apache2.conf ...
/etc/init.d/apache2 restart Pronto verifique se está tudo correto, http://ip.da.maquina/phpmyadmin acesse seu phpmyadmin usando user: root e a senha é a que você botou na instalação do mysql, crie o seu banco de dados e upe a sua database.
Via FTP, vá em var/www e exclua a pasta html e mova a seu website para lá, após isso configure o seu config.php e config.lua com os dados corretos e já será possível acessar seu site via http://ipdamaquina.
Agora vamos deixar seu otserv online, via SHELL digite :
cd /home/otserv/ ...
chmod 777 -R tfs ...
./tfs "Para fecha-lo basta dar ctrl + C"
Pronto seu serve está online!!
Créditos : Natanael Beckman
Otland TEAM
Summ
-
icemirow deu reputação a Summ em Compilando Tfs 0.4 em Debian 6am ? como assim os criadores não recomenda ? o tfs tem seu melhor desempenho em Debian, não vou citar quais são os pontos positivos porque 5 minutos de google basta pra ver isso.
o melhor tutorial de debian que tem no fórum é esse http://www.tibiaking.com/forum/topic/44389-linux-montando-otserver-em-debian-perfeito/pode seguir os passos normalmente que ira funcionar na versão debian 6 também.
-
icemirow deu reputação a leozynho123 em Compilando Tfs 0.4 em Debian 6não recomendo, como os criadores também não recomendam a compilação em Debian, o melhor s.o para tfs 0.4 é o Ubuntu 10.04 pois é uma rev antiga já, a mais atual está aqui no meu tópico; http://www.tibiaking.com/forum/topic/48024-tfs-04-377721/ e o tutorial de compilação está aqui ; http://www.tibiaking.com/forum/topic/32118-compilar-otserver-em-linux-ubuntu-1004/
-
icemirow deu reputação a Fir3element em Compilando Tfs 0.4 em Debian 6sai dessa de q n recomendam, o talaturen usava debian até no desktop lol, e continua recomendando ate hj pro tfs 1.0
o método de compilação é o mesmo, no máximo deve mudar algo pra configurar website...
-
icemirow deu reputação a ServerCore em (Resolvido)TFS 1.1https://github.com/otland/forgottenserver/wiki/Compiling-on-Ubuntu
-
icemirow deu reputação a Summ em (Resolvido)TFS 1.1Funciona no ubuntu 14.04 e se não me falha a memória já rodei no debian 7.5
-
icemirow deu reputação a luanluciano93 em [TFS 1.x] Blessing Protect para lowlevelOlá pessoal, esse script é simples, ele deixa o player que for menor ou igual a X com as 5 bless automáticas (se ele morrer ele recebe novamente, se estiver no level menor que o X). Basta configurar o level X.
Em creaturescript/scripts/ cria um arquivo com o nome bless_protect.lua e coloque o seguinte código dentro:
local blessLevel = 30 function onLogin(player) if player:getLevel() <= blessLevel then for i = 1, 5 do player:addBlessing(i) end player:getPosition():sendMagicEffect(CONST_ME_HOLYDAMAGE) end return true end Script TFS 0.4
Agora em creaturescript/script/ no arquivo login.lua add o evento:
registerCreatureEvent(cid, "BlessProtect") E por fim coloque a tag em creaturescripts/creaturescripts.xml:
<event type="login" name="BlessProtect" script="bless_protect.lua"/> E é isso pessoal, agora basta editar o level no primeiro código aqui : local blessLevel = 30
Qualquer dúvida poste aqui. Abraços! -
icemirow deu reputação a luanluciano93 em [TFS 1.x] TK Vip SystemOlá pessoal, estou desenvolvendo esse sistema vip para TFS 1.x, se precisarem de alguma função nova é só comentar, criei para usar em um servidor meu e resolvi postar, bom proveito a todos.
É só ir no arquivo data/lib/core/player.lua e adicionar esse código no começo do script:
-- ALTER TABLE `accounts` ADD `vip_time` BIGINT(20) NOT NULL DEFAULT 0; -- player:getVipTime() function Player.getVipTime(self) local resultId = db.storeQuery("SELECT `vip_time` FROM `accounts` WHERE `id` = '".. self:getAccountId() .."';") local time = resultId ~= false and result.getNumber(resultId, "vip_time") or 0 result.free(resultId) return time end -- player:isVip() function Player.isVip(self) return self:getVipTime() > os.time() and true or false end -- player:addVipDays(days) function Player.addVipDays(self, days) return(self:isVip() and tonumber((days * 86400))) and db.query("UPDATE `accounts` SET `vip_time` = '".. (self:getVipTime() + (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") or db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() + (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:removeVipDays(days) function Player.removeVipDays(self, days) return(self:isVip() and tonumber((days * 86400))) and db.query("UPDATE `accounts` SET `vip_time` = '".. (self:getVipTime() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") or db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:setVipDays(days) function Player.setVipDays(self, days) return db.query("UPDATE `accounts` SET `vip_time` = '".. (os.time() - (days * 86400)) .."' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:removeVip() function Player.removeVip(self) db.query("UPDATE `accounts` SET `vip_time` = '0' WHERE `id` ='".. self:getAccountId() .."' LIMIT 1 ;") end -- player:sendVipDaysMessage() function Player.sendVipDaysMessage(self) if self:isVip() then local vipTime = self:getVipTime() - os.time() local vipDays = 1 + (math.floor(vipTime / 86400)) return self:getVipTime() ~= false and self:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'You have '.. vipDays .. ' vip day(s) in your account.') end end -- player:checkVipLogin() function Player.checkVipLogin(self) if self:getVipTime() > 0 and not self:isVip() then return self:removeVip() and self:teleportTo(self:getTown():getTemplePosition()) end end
As funções são:
• player:getVipTime() - Retorna o valor da tabela vip_time (igual esta na database).
• player:isVip() - Retorna se o player é vip ou não.
• player:addVipDays(days) - Usa-se em algum script para para adicionar dias de vip ao player (parâmetro de entrada "days").
• player:removeVipDays(days) - Usa-se em algum script para para remover dias de vip do player (parâmetro de entrada "days").
• player:setVipDays(days) - Usa-se em algum script para para mudar os dias de vip do player (parâmetro de entrada "days").
• player:removeVip() - Usa-se em algum script para para remover todo tempo de vip do player.
• player:sendVipDaysMessage() - Retorna uma mensagem no player mostrando os dias de vip que ainda restam ao player.
• player:checkVipLogin() - Checa se a vip do player acabou, se sim teleporta ele para o templo.
Qualquer dúvida ou erro/bug poste aqui.
-
icemirow deu reputação a Liane em Gesior 1.0 Moderado Por Min -V1Irei Posta a Versão 2 Desse Gersior, Vai Vim Já Sem Os Bugs Que VoÇês Citaram Ai
Mas afinal, o que esse Gesior tem de diferente?
É completamente seguro e estável. Página "createaccount" Sem Bug. Possui um Helpdesk avançado. Possui diversas páginas explicativas. Página de donate personalizada e funcional. Shopping completamente Moderado Layout impecável e completamente perfeito. Entre outras diversas características. Algumas Prints
Latest News
Shop System Moderado Por Min
Pagina De Compra Points Moderado Por Min
Essa versão do Gesior só funciona na versão 1.0 do TFS!
OBS: Se For Postar Em Outros Forum Coloca Meus Credito Por Favor!!!
Créditos:
Base Por Victor Fasano Raful Modificado e Configurado Por Min Liane. Download:
http://www.speedyshare.com/hS82t/htdocs.rar
Obs: A Database Podem Usa A Do Victor Fasano Raful v2
Scan --> https://www.virustot...sis/1420379894/
Se Curtiu o Meu Gesior Clica Em Gostei e da o Rep++
-
icemirow deu reputação a MaXwEllDeN em Boas práticas para ProgramarObrigado, é realmente a minha intenção ao criar esse tópico foi inspirar a galera para criar os códigos com uma beleza não só na execução mas também no código em sí para ser lído, o que eu mais ví em outros forums foram scripts sem indentação nenhuma, muita gambiarra mesmo, dá até desânimo para ler esses códigos, muito chato ter que ler as gambiarras...