Tudo que OtsBr postou
- Como usar o mesmo IP em dois servidores separados?
- Como usar o mesmo IP em dois servidores separados?
-
Recomendamos: Lançamento OtsBr 24h Online em Data Center no Brasil (ZERO LAG)
Obrigado Tibia King pela força! Para os players novos, qualquer dúvida é só falar com GOD EuTeSalvo. Também podem enviar dúvidas/sugestões para nosso email: [email protected]
-
Sistema de Loteria diferenciado
Bom dia! Estou precisando fazer um sistema de LOTERIA que de o ITEM "Lottery ticket". ItemID = 5957 Porém preciso que o item tenha DATA de validade. Minha ideia é toda semana dar premios para os players que tiverem juntado mais LOTTERY TICKET no server, porém eu precisaria que cada LOTTERY TICKET ficasse ativo por no máximo 10 dias. Ou seja, se eu ganhei um Lottery Ticket hoje, ao dar LOOK ele me mostraria que o item só é válido por mais 10 dias. Quando o time chegar ao fim, ou o item some, ou o LOOK dele diga uma frase tipo: ESSE ITEM JÁ NÃO É MAIS VÁLIDO. Alguém faz ideia de como eu poderia fazer esse script?
-
Account VIP System por Killua
Como eu descubro o STORAGE desse sistema? Uso um sistema VIP por PLAYERS que quero trocar para este de ACCOUNT's, mas várias ações em meu ot precisam de storage. Por exemplo, usuário sem VIP só tem 4 outfits... Fiz isso por consulta em STORAGE, só o PLAYER está VIP ele possui a tal STORAGE vip no banco de dados...
- Pedido: Mostrar dia VIP no CLIENTE 8.6
- Pedido: Mostrar dia VIP no CLIENTE 8.6
-
Pedido: Mostrar dia VIP no CLIENTE 8.6
data/lib/vipAccount.lua: --[[ Name: Vip System by Account Version: 1.0 Author: Kydrai Forum: http://www.xtibia.com/forum/topic/136543-vip-system-by-account-v10/ [Functions] -- Install installVip() -- By Account doTeleportPlayersByAccount(acc, topos) getVipTimeByAccount(acc) setVipTimeByAccount(acc, time) getVipDaysByAccount(acc) isVipAccount(acc) addVipDaysByAccount(acc, days) doRemoveVipDaysByAccount(acc, days) getVipDateByAccount(acc) -- By Player doTeleportPlayers(cid, topos) getVipTime(cid) setVipTime(cid, time) getVipDays(cid) isVip(cid) addVipDays(cid, days) doRemoveVipDays(cid, days) getVipDate(cid) ]]-- -- Install function installVip() if db.executeQuery("ALTER TABLE `accounts` ADD viptime INT(15) NOT NULL DEFAULT 0;") then print("[Vip System] Vip System instalado com sucesso!") return TRUE end print("[Vip System] Não foi possível instalar o Vip System!") return FALSEend -- By Account function doTeleportPlayersByAccount(acc, topos) if db.executeQuery("UPDATE `players` SET `posx` = "..topos.x..", `posy` = "..topos.y..", `posz` = "..topos.z.." WHERE `account_id` = "..acc..";") then return TRUE end return FALSEend function getVipTimeByAccount(acc) local vip = db.getResult("SELECT `viptime` FROM `accounts` WHERE `id` = "..acc..";") if vip:getID() == -1 then print("[Vip System] Account not found!") return FALSE end return vip:getDataInt("viptime") end function setVipTimeByAccount(acc, time) if db.executeQuery("UPDATE `accounts` SET `viptime` = "..time.." WHERE `id` = "..acc..";") then return TRUE end return FALSEend function getVipDaysByAccount(acc) local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60)) return days <= 0 and 0 or daysend function isVipAccount(acc) return getVipDaysByAccount(acc) > 0 and TRUE or FALSEend function addVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local timeNow = os.time() local time = getVipDaysByAccount(acc) == 0 and (timeNow + daysValue) or (vipTime + daysValue) setVipTimeByAccount(acc, time) return TRUE end return FALSEend function doRemoveVipDaysByAccount(acc, days) if days > 0 then local daysValue = days * 24 * 60 * 60 local vipTime = getVipTimeByAccount(acc) local time = vipTime - daysValue setVipTimeByAccount(acc, (time <= 0 and 1 or time)) return TRUE end return FALSEend function getVipDateByAccount(acc) if isVipAccount(acc) then local vipTime = getVipTimeByAccount(acc) return os.date("%d/%m/%y %X", vipTime) end return FALSEend -- By Player function doTeleportPlayers(cid, topos) doTeleportPlayersByAccount(getPlayerAccountId(cid), topos) end function getVipTime(cid) return getVipTimeByAccount(getPlayerAccountId(cid)) end function setVipTime(cid, time) return setVipTimeByAccount(getPlayerAccountId(cid), time) end function getVipDays(cid) return getVipDaysByAccount(getPlayerAccountId(cid)) end function isVip(cid) return isVipAccount(getPlayerAccountId(cid)) end function addVipDays(cid, days) return addVipDaysByAccount(getPlayerAccountId(cid), days) end function doRemoveVipDays(cid, days) return doRemoveVipDaysByAccount(getPlayerAccountId(cid), days) end function getVipDate(cid) return getVipDateByAccount(getPlayerAccountId(cid)) end data/talkactions/scripts/vipaccgod.lua: function onSay(cid, words, param, channel) local t = param:explode(",") local name, days = t[1], tonumber(t[2]) if words == "/installvip" then if installVip() then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Vip System instalado com sucesso!") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Não foi possível instalar o Vip System!") end elseif words == "/addvip" then if name then if days then local acc = getAccountIdByName(name) if acc ~= 0 then addVipDaysByAccount(acc, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip ao "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar essa quantidade de dia(s) de vip.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode adicionar dia(s) de vip a este player.") end elseif words == "/removevip" then if name then if days then local acc = getAccountIdByName(name) if acc ~= 0 then doRemoveVipDaysByAccount(acc, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você retirou "..days.." dia(s) de vip do "..name..", agora ele possui "..getVipDaysByAccount(acc).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar essa quantidade de dia(s) de vip.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode retirar dia(s) de vip a este player.") end elseif words == "/checkvip" then if name then local acc = getAccountIdByName(name) if acc ~= 0 then local duration = getVipDateByAccount(acc) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "O "..name.." possui "..getVipDaysByAccount(acc).." dias de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Este player não existe.") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você não pode visualizar os dias de vip a este player.") end end return TRUEend data/talkactions/scripts/vipaccplayer.lua: function onSay(cid, words, param, channel) if words == "/buyvip" then local price = 1000000 local days = 30 if doPlayerRemoveMoney(cid, price) then addVipDays(cid, days) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você adicionou "..days.." dia(s) de vip, agora você possui "..getVipDays(cid).." dia(s) de vip.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de "..price.." para adicionar "..days.." dia(s) de vip.") end elseif words == "/vipdays" then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUEend data/movements/scripts/viptile.lua: function onStepIn(cid, item, position, fromPosition) if isVip(cid) == FALSE then doTeleportThing(cid, fromPosition, false) doSendMagicEffect(position, CONST_ME_MAGIC_BLUE) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Somente players vip podem passar.") end return TRUEend data/creaturescripts/scripts/viplogin.lua: function onLogin(cid) local vip = isVip(cid) if getVipTime(cid) > 0 and vip == FALSE then local townid = 1 doPlayerSetTown(cid, townid) local templePos = getTownTemplePosition(getPlayerTown(cid)) doTeleportThing(cid, templePos, false) setVipTime(cid, 0) doTeleportPlayers(cid, templePos) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Sua Vip acabou!") elseif vip == TRUE then local duration = getVipDate(cid) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você possui "..getVipDays(cid).." dia(s) de vip."..(duration and (" Ela irá durar até "..duration..".") or "")) end return TRUEend
- Pedido: Mostrar dia VIP no CLIENTE 8.6
- Pedido: Mostrar dia VIP no CLIENTE 8.6
- Pedido: Mostrar dia VIP no CLIENTE 8.6
-
Outfit não muda na primeira vez...
Funcionou! OBRIGADO...
-
Outfit não muda na primeira vez...
Remover: else str = str .. " Please choose your outfit." doPlayerSendOutfitWindow(cid) end Ou apenas: doPlayerSendOutfitWindow(cid)
-
Outfit não muda na primeira vez...
Aqui está meu LOGIN.LUA: local config = { loginMessage = getConfigValue('loginMessage'), useFragHandler = getBooleanFromString(getConfigValue('useFragHandler')) } function onLogin(cid) local loss = getConfigValue('deathLostPercent') if(loss ~= nil) then doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, loss * 10) end local accountManager = getPlayerAccountManager(cid) if(accountManager == MANAGER_NONE) then local lastLogin, str = getPlayerLastLoginSaved(cid), config.loginMessage if(lastLogin > 0) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str) str = "Your last visit was on " .. os.date("%a %b %d %X %Y", lastLogin) .. "." else str = str .. " Please choose your outfit." doPlayerSendOutfitWindow(cid) end doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str) elseif(accountManager == MANAGER_NAMELOCK) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, it appears that your character has been namelocked, what would you like as your new name?") elseif(accountManager == MANAGER_ACCOUNT) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to manage your account and if you want to start over then type 'cancel'.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to create an account or type 'recover' to recover an account.") end if(not isPlayerGhost(cid)) then doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT) end registerCreatureEvent(cid, "Mail") registerCreatureEvent(cid, "GuildMotd") registerCreatureEvent(cid, "Idle") if(config.useFragHandler) then registerCreatureEvent(cid, "SkullCheck") registerCreatureEvent(cid, "Reward") end registerCreatureEvent(cid, "ReportBug") registerCreatureEvent(cid, "ExpBonus") registerCreatureEvent(cid, "BlessDrop") registerCreatureEvent(cid, "AdvanceSave") registerCreatureEvent(cid, "advance") registerCreatureEvent(cid, "FimVip") registerCreatureEvent(cid, "SkullCheck") registerCreatureEvent(cid, "ReportBug") registerCreatureEvent(cid, VipReceive) registerCreatureEvent(cid, "PlayerKill") if (InitArenaScript ~= 0) then InitArenaScript = 1 -- make arena rooms free for i = 42300, 42309 do setGlobalStorageValue(i, 0) setGlobalStorageValue(i+100, 0) end end -- if he did not make full arena 1 he must start from zero if getPlayerStorageValue(cid, 42309) < 1 then for i = 42300, 42309 do setPlayerStorageValue(cid, i, 0) end end -- if he did not make full arena 2 he must start from zero if getPlayerStorageValue(cid, 42319) < 1 then for i = 42310, 42319 do setPlayerStorageValue(cid, i, 0) end end -- if he did not make full arena 3 he must start from zero if getPlayerStorageValue(cid, 42329) < 1 then for i = 42320, 42329 do setPlayerStorageValue(cid, i, 0) end end if getPlayerStorageValue(cid, 42355) == -1 then setPlayerStorageValue(cid, 42355, 0) -- did not arena level end setPlayerStorageValue(cid, 42350, 0) -- time to kick 0 setPlayerStorageValue(cid, 42352, 0) -- is not in arena -- attribute system by draky lucas if getPlayerStorageValue(cid,storagesUtilizadas.storageLevelJaPego) == -1 then for i = storagesUtilizadas.storageLevelJaPego,storagesUtilizadas.storageMana do setPlayerStorageValue(cid,i,0) end end registerCreatureEvent(cid,"avancarGanharPontos") -- return true end Muito obrigado pela força, você está me ajudando MUITO!
- Pedido: Mostrar dia VIP no CLIENTE 8.6
- Pedido: Mostrar dia VIP no CLIENTE 8.6
-
Outfit não muda na primeira vez...
Quando um PLAYER se cadastra, ao entrar pela 1ª vez aparece a tela para CONFIGURAR A OUTFIT do character, certo? Bom, nesse momento as mudanças da OUTFIT não são salvas. Mesmo que o player MUDE a outfit, cor da roupa, cabelo... Nada fica salvo, quando ele clica em OK a outfit continua a original. Vale lembrar que só da esse bug na PRIMEIRA vez que o player entra e tenta mudar a OUTFIT...
-
Outfit não muda na primeira vez...
Toda vez que alguem cria um char, na primeira CONFIGURAÇÃO de OUTFIT simplesmente o sistema não funciona. O player muda toda sua OUTFIT e ao clicar em OK ela mantem a OUTFIT original de criação. Sabem me dizer o que pode ser? Como posso arrumar? Obs: É só na primeira vez que esse bug acontece, depois disso o player pode mudar a vontade... Meu ot é 8.6.
- Pedido: Mostrar dia VIP no CLIENTE 8.6
-
Pedido: Mostrar dia VIP no CLIENTE 8.6
- Pedido: Mostrar dia VIP no CLIENTE 8.6
- Pedido: Mostrar dia VIP no CLIENTE 8.6
- Pedido: Mostrar dia VIP no CLIENTE 8.6
Meu OT 8.60 possui sistema de VIP, porém configuramos para a PREMMY ser de graça. Então quando o player abre sua conta aparece no cliente "GRATIS PREMIUM ACCOUNT". Queria que em vez de mostrar o status de PREMIUM ele mostrasse os DIAS VIP que o player possui. Outra obs: Meu sistema VIP é por PLAYER e não por ACCOUNT. Teria como bolar algum script que funcione? Meu servidor é 8.60 para Windows.- Erro Sistema de Casamento (8.6)
- Erro Sistema de Casamento (8.6)
Informação Importante
Confirmação de Termo