Ir para conteúdo
  • Cadastre-se

[Bugs] Varios Ajuda Urgente


Posts Recomendados

Pessoal estou com alguns bugs no meu servidor, bom vou direto ao assunto 1 deles eu nao faço a minima ideia mais o 3° eu posto os script.

 

 

Bug Otservlist

O servidor nao aparece na lista, mais aparece como "Server been added"

 

2e3o9ix.png

 

 

E tem o das portas, que ela abre mais nao fecha.

 

1g3or9.png

 

050-function.lua

function isInArray(array, value, caseSensitive)
if(caseSensitive == nil or caseSensitive == false) and type(value) == "string" then
local lowerValue = value:lower()
for _, _value in ipairs(array) do
if type(_value) == "string" and lowerValue == _value:lower() then
return true
end
end
else
for _, _value in ipairs(array) do
if (value == _value) then return true end
end
end
 
return false
end
 
function doPlayerGiveItem(cid, itemid, amount, subType)
local item = 0
if(isItemStackable(itemid)) then
item = doCreateItemEx(itemid, amount)
if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
return false
end
else
for i = 1, amount do
item = doCreateItemEx(itemid, subType)
if(doPlayerAddItemEx(cid, item, true) ~= RETURNVALUE_NOERROR) then
return false
end
end
end
 
return true
end
 
function doPlayerGiveItemContainer(cid, containerid, itemid, amount, subType)
for i = 1, amount do
local container = doCreateItemEx(containerid, 1)
for x = 1, getContainerCapById(containerid) do
doAddContainerItem(container, itemid, subType)
end
 
if(doPlayerAddItemEx(cid, container, true) ~= RETURNVALUE_NOERROR) then
return false
end
end
 
return true
end
 
function doPlayerTakeItem(cid, itemid, amount)
return getPlayerItemCount(cid, itemid) >= amount and doPlayerRemoveItem(cid, itemid, amount)
end
 
function doPlayerSellItem(cid, itemid, count, cost)
if(not doPlayerTakeItem(cid, itemid, count)) then
return false
end
 
if(not doPlayerAddMoney(cid, cost)) then
error('[doPlayerSellItem] Could not add money to: ' .. getPlayerName(cid) .. ' (' .. cost .. 'gp).')
end
 
return true
end
 
function doPlayerWithdrawMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end
 
local balance = getPlayerBalance(cid)
if(amount > balance or not doPlayerAddMoney(cid, amount)) then
return false
end
 
doPlayerSetBalance(cid, balance - amount)
return true
end
 
function doPlayerDepositMoney(cid, amount)
if(not getBooleanFromString(getConfigInfo('bankSystem'))) then
return false
end
 
if(not doPlayerRemoveMoney(cid, amount)) then
return false
end
 
doPlayerSetBalance(cid, getPlayerBalance(cid) + amount)
return true
end
 
function doPlayerAddStamina(cid, minutes)
return doPlayerSetStamina(cid, getPlayerStamina(cid) + minutes)
end
 
function isPremium(cid)
return (isPlayer(cid) and (getPlayerPremiumDays(cid) > 0 or getBooleanFromString(getConfigValue('freePremium'))))
end
 
function getMonthDayEnding(day)
if(day == "01" or day == "21" or day == "31") then
return "st"
elseif(day == "02" or day == "22") then
return "nd"
elseif(day == "03" or day == "23") then
return "rd"
end
 
return "th"
end
 
function getMonthString(m)
return os.date("%B", os.time{year = 1970, month = m, day = 1})
end
 
function getArticle(str)
return str:find("[AaEeIiOoUuYy]") == 1 and "an" or "a"
end
 
function doNumberFormat(i)
local str, found = string.gsub(i, "(%d)(%d%d%d)$", "%1,%2", 1), 0
repeat
str, found = string.gsub(str, "(%d)(%d%d%d),", "%1,%2,", 1)
until found == 0
return str
end
 
function doPlayerAddAddons(cid, addon)
for i = 0, table.maxn(maleOutfits) do
doPlayerAddOutfit(cid, maleOutfits, addon)
end
 
for i = 0, table.maxn(femaleOutfits) do
doPlayerAddOutfit(cid, femaleOutfits, addon)
end
end
 
function getTibiaTime(num)
local minutes, hours = getWorldTime(), 0
while (minutes > 60) do
hours = hours + 1
minutes = minutes - 60
end
 
if(num) then
return {hours = hours, minutes = minutes}
end
 
return {hours =  hours < 10 and '0' .. hours or '' .. hours, minutes = minutes < 10 and '0' .. minutes or '' .. minutes}
end
 
function doWriteLogFile(file, text)
local f = io.open(file, "a+")
if(not f) then
return false
end
 
f:write("[" .. os.date("%d/%m/%Y %H:%M:%S") .. "] " .. text .. "\n")
f:close()
return true
end
 
function getExperienceForLevel(lv)
lv = lv - 1
return ((50 * lv * lv * lv) - (150 * lv * lv) + (400 * lv)) / 3
end
 
function doMutePlayer(cid, time)
local condition = createConditionObject(CONDITION_MUTED, (time == -1 and time or time * 1000))
return doAddCondition(cid, condition, false)
 
end
 
function doSummonCreature(name, pos)
local cid = doCreateMonster(name, pos, false, false)
if(not cid) then
cid = doCreateNpc(name, pos)
end
 
return cid
end
 
function getPlayersOnlineEx()
local players = {}
for i, cid in ipairs(getPlayersOnline()) do
table.insert(players, getCreatureName(cid))
end
 
return players
end
 
function getPlayerByName(name)
local cid = getCreatureByName(name)
return isPlayer(cid) and cid or nil
end
 
function isPlayer(cid)
return isCreature(cid) and cid >= AUTOID_PLAYERS and cid < AUTOID_MONSTERS
end
 
function isPlayerGhost(cid)
return isPlayer(cid) and (getCreatureCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE, CONDITIONID_DEFAULT) or getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBESEEN))
end
 
function isMonster(cid)
return isCreature(cid) and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS
end
 
function isNpc(cid)
-- Npc IDs are over int32_t range (which is default for lua_pushnumber),
-- therefore number is always a negative value.
return isCreature(cid) and (cid < 0 or cid >= AUTOID_NPCS)
end
 
function isUnderWater(cid)
return isInArray(underWater, getTileInfo(getCreaturePosition(cid)).itemid)
end
 
function doPlayerAddLevel(cid, amount, round)
local experience, level, amount = 0, getPlayerLevel(cid), amount or 1
if(amount > 0) then
experience = getExperienceForLevel(level + amount) - (round and getPlayerExperience(cid) or getExperienceForLevel(level))
else
experience = -((round and getPlayerExperience(cid) or getExperienceForLevel(level)) - getExperienceForLevel(level + amount))
end
 
return doPlayerAddExperience(cid, experience)
end
 
function doPlayerAddMagLevel(cid, amount)
local amount = amount or 1
for i = 1, amount do
doPlayerAddSpentMana(cid, getPlayerRequiredMana(cid, getPlayerMagLevel(cid, true) + 1) - getPlayerSpentMana(cid), false)
end
 
return true
end
 
function doPlayerAddSkill(cid, skill, amount, round)
local amount = amount or 1
if(skill == SKILL__LEVEL) then
return doPlayerAddLevel(cid, amount, round)
elseif(skill == SKILL__MAGLEVEL) then
return doPlayerAddMagLevel(cid, amount)
end
 
for i = 1, amount do
doPlayerAddSkillTry(cid, skill, getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill), false)
end
 
return true
end
 
function isPrivateChannel(channelId)
return channelId >= CHANNEL_PRIVATE
end
 
function doBroadcastMessage(text, class)
local class = class or MESSAGE_STATUS_WARNING
if(type(class) == 'string') then
local className = MESSAGE_TYPES[class]
if(className == nil) then
return false
end
 
class = className
elseif(class < MESSAGE_FIRST or class > MESSAGE_LAST) then
return false
end
 
for _, pid in ipairs(getPlayersOnline()) do
doPlayerSendTextMessage(pid, class, text)
end
 
print("> Broadcasted message: \"" .. text .. "\".")
return true
end
 
function doPlayerBroadcastMessage(cid, text, class, checkFlag, ghost)
local checkFlag, ghost, class = checkFlag or true, ghost or false, class or TALKTYPE_BROADCAST
if(checkFlag and not getPlayerFlagValue(cid, PLAYERFLAG_CANBROADCAST)) then
return false
end
 
if(type(class) == 'string') then
local className = TALKTYPE_TYPES[class]
if(className == nil) then
return false
end
 
class = className
elseif(class < TALKTYPE_FIRST or class > TALKTYPE_LAST) then
return false
end
 
for _, pid in ipairs(getPlayersOnline()) do
doCreatureSay(cid, text, class, ghost, pid)
end
 
print("> " .. getCreatureName(cid) .. " broadcasted message: \"" .. text .. "\".")
return true
end
 
function doCopyItem(item, attributes)
local attributes = ((type(attributes) == 'table') and attributes or { "aid" })
 
local ret = doCreateItemEx(item.itemid, item.type)
for _, key in ipairs(attributes) do
local value = getItemAttribute(item.uid, key)
if(value ~= nil) then
doItemSetAttribute(ret, key, value)
end
end
 
if(isContainer(item.uid)) then
for i = (getContainerSize(item.uid) - 1), 0, -1 do
local tmp = getContainerItem(item.uid, i)
if(tmp.itemid > 0) then
doAddContainerItemEx(ret, doCopyItem(tmp, true).uid)
end
end
end
 
return getThing(ret)
end
 
function doSetItemText(uid, text, writer, date)
local thing = getThing(uid)
if(thing.itemid < 100) then
return false
end
 
doItemSetAttribute(uid, "text", text)
if(writer ~= nil) then
doItemSetAttribute(uid, "writer", tostring(writer))
if(date ~= nil) then
doItemSetAttribute(uid, "date", tonumber(date))
end
end
 
return true
end
 
function getItemWeightById(itemid, count, precision)
local item, count, precision = getItemInfo(itemid), count or 1, precision or false
if(not item) then
return false
end
 
if(count > 100) then
-- print a warning, as its impossible to have more than 100 stackable items without "cheating" the count
print('[Warning] getItemWeightById', 'Calculating weight for more than 100 items!')
end
 
local weight = item.weight * count
return precission and weight or math.round(weight, 2)
end
 
function choose(...)
local arg, ret = {...}
 
if type(arg[1]) == 'table' then
ret = arg[1][math.random(#arg[1])]
else
ret = arg[math.random(#arg)]
end
 
return ret
end
 
function doPlayerAddExpEx(cid, amount)
if(not doPlayerAddExp(cid, amount)) then
return false
end
 
local position = getThingPosition(cid)
doPlayerSendTextMessage(cid, MESSAGE_EXPERIENCE, "You gained " .. amount .. " experience.", amount, COLOR_WHITE, position)
 
local spectators, name = getSpectators(position, 7, 7), getCreatureName(cid)
for _, pid in ipairs(spectators) do
if(isPlayer(pid) and cid ~= pid) then
doPlayerSendTextMessage(pid, MESSAGE_EXPERIENCE_OTHERS, name .. " gained " .. amount .. " experience.", amount, COLOR_WHITE, position)
end
end
 
return true
end
 
function getItemTopParent(uid)
local parent = getItemParent(uid)
if(not parent or parent.uid == 0) then
return nil
end
 
while(true) do
local tmp = getItemParent(parent.uid)
if(tmp and tmp.uid ~= 0) then
parent = tmp
else
break
end
end
 
return parent
end
 
function getItemHolder(uid)
local parent = getItemParent(uid)
if(not parent or parent.uid == 0) then
return nil
end
 
local holder = nil
while(true) do
local tmp = getItemParent(parent.uid)
if(tmp and tmp.uid ~= 0) then
if(tmp.itemid == 1) then -- a creature
holder = tmp
break
end
 
parent = tmp
else
break
end
end
 
return holder
end
 
function valid(f)
return function(p, ...)
if(isCreature(p)) then
return f(p, ...)
end
end
end
 
function addContainerItems(container,items)
local items_mod = {}
for _, it in ipairs(items) do
if( isItemStackable(it.id) and it.count > 100) then
local c = it.count
while( c > 100 ) do
table.insert(items_mod,{id = it.id,count = 100})
c = c - 100
end
if(c > 0) then
table.insert(items_mod,{id = it.id,count = c})
end
else
table.insert(items_mod,{id = it.id,count = 1})
end
end
 
local free = getContainerCap(container.uid) - (getContainerSize(container.uid) )
local count = math.ceil(#items_mod/ free)
local main_bp = container.uid
local insert_bp = main_bp
local counter = 1
for c,it in ipairs(items_mod) do
local _c = isItemStackable(it.id) and (it.count > 100 and 100 or it.count) or 1
if count > 1 then
if (counter < free) then
doAddContainerItem(insert_bp, it.id, _c)
else
insert_bp = doAddContainerItem(insert_bp, container.itemid, 1)
count = (#items_mod)-(free-1)
free = getContainerCap(insert_bp) 
count = math.ceil(count/ free)
doAddContainerItem(insert_bp, it.id, _c)
counter = 1
end
counter = counter + 1
else
doAddContainerItem(insert_bp, it.id, _c)
end
end
 
return main_bp
end

 
closingdoor.lua

function onStepOut(cid, item, position, lastPosition)
if(getTileInfo(position).creatures > 0) then
return true
end
 
local newPosition = {x = position.x + 1, y = position.y, z = position.z}
local query = doTileQueryAdd(cid, newPosition)
if(query == RETURNVALUE_NOTENOUGHROOM) then
newPosition.x = newPosition.x - 1
newPosition.y = newPosition.y + 1
query = doTileQueryAdd(cid, newPosition) -- repeat until found
end
 
if(query == RETURNVALUE_NOERROR and query == RETURNVALUE_NOTENOUGHROOM) then
doRelocate(position, newPosition)
end
 
position.stackpos = -1
local i, tileItem, tileCount = 1, {uid = 1}, getTileThingByPos(position)
while(tileItem.uid ~= 0 and i < tileCount) do
position.stackpos = i
tileItem = getTileThingByPos(position)
if(tileItem.uid ~= 0 and tileItem.uid ~= item.uid and isMovable(tileItem.uid)) then
doRemoveItem(tileItem.uid)
else
i = i + 1
end
end
 
local itemInfo = getItemInfo(item.itemid)
doTransformItem(item.uid, itemInfo.transformUseTo)
return true
end
 
function onStepOut(cid, item, position, lastPosition)
local itemInfo = getItemInfo(item.itemid)
doTransformItem(item.uid, itemInfo.transformUseTo)
return true
end
 

 

 

Link para o post
Compartilhar em outros sites

O tópico foi movido para a área correta, preste mais atenção da próxima vez!

Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680

Este tópico foi movido:

De: "OTServSuporte OTServSuporte de OTServ Geral"

Para: "OTServSuporte OTServSuporte de Scripts"

Atenciosamente,

Bruno Minervino

Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo