Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function harmfulStatesDetector(cid, bucle)
- local str, t = '', {}
- for key, var in pairs (bucle) do
- if getPlayerStorageValue(cid, key) == 0 then
- local sms = var.state[getPlayerStorageValue(cid, LENGUAGE_STORAGE)]
- table.insert(t, sms)
- end
- end
- if table.maxn(t) > 0 then
- for i = 1, table.maxn(t) do
- str = str .. t[i]
- if i == table.maxn(t) - 1 then
- str = str .. " & "
- elseif i ~= table.maxn(t) then
- str = str .. ', '
- end
- end
- end
- return str
- end
- function harmfulStatesCost(cid, bucle)
- local str, mon = "", 0
- for key, var in pairs (bucle) do
- if getPlayerStorageValue(cid, key) == 0 then
- mon = mon + var.price
- end
- end
- return mon
- end
- function doSendTranslateMessage(cid, tab)
- local sms = tab[getPlayerStorageValue(cid, LENGUAGE_STORAGE)]
- return (sms and doPlayerSendCancel(cid, sms) or print("ERROR: " .. getCreatureName(cid) .. " no tiene lenguage seleccionado."))
- end
- function doDeterioratingWeapon(cid, item, tabla, tries)
- local Translate = {
- [ENG_VALUE] = "With use your " .. getItemNameById(item.itemid) .. " has broken.",
- [ESP_VALUE] = "Con el uso tu " .. getItemNameById(item.itemid) .. " se ha roto.",
- [POR_VALUE] = "Com o uso sua " .. getItemNameById(item.itemid) .. " rompeu-se.",
- }
- local sms = Translate[getPlayerStorageValue(cid, LENGUAGE_STORAGE)]
- if string.find(getItemSpecialDescription(item.uid), "Quality") then
- local qualityNow = string.gsub(getItemSpecialDescription(item.uid), "Quality: ", "")
- if tonumber(qualityNow) > 0 then
- doSetItemSpecialDescription(item.uid, "Quality: " .. (qualityNow - 1))
- if tonumber(qualityNow) == 1 then
- doTransformItem(item.uid, tabla.broken)
- if sms then doPlayerSendCancel(cid, sms) end
- doSetItemSpecialDescription(item.uid, "Quality: Broken")
- doSendMagicEffect(getThingPos(item.uid), CONST_ME_POFF)
- end
- else
- if sms then doPlayerSendCancel(cid, sms) end
- return true
- end
- else
- doSetItemSpecialDescription(item.uid, "Quality: " .. tries)
- end
- return true
- end
- ---------- Crafting Food, Armory, etc... ----------
- function table.get(t) -- Adquiere Arrays
- local msg = ''
- for num = 1, table.maxn(t) do
- msg = msg .. t[num]
- if num == 1 then
- msg = '{' .. msg .. ', '
- elseif num ~= table.maxn(t) then
- msg = msg .. ', '
- else
- msg = msg .. '}'
- end
- end
- return msg
- end
- function getTabItemsId(recipe) -- Adquiere el Id de todos los objetos de la tabla del script.
- local t = {}
- for _, v in ipairs(recipe) do
- table.insert(t, v[1])
- end
- return t
- end
- function getTabItemsCount(recipe) -- Adquiere las cantidad de todos los objetos de la tabla del script.
- local t = {}
- for _, v in ipairs(recipe) do
- table.insert(t, v[2])
- end
- return t
- end
- function getBagItemsId(uid, recipe) -- Adquiere el Id de todos los objetos de la mochila.
- local t = {}
- for i = 0, #recipe do
- local item = getContainerItem(uid, i)
- if item.itemid ~= 0 then
- table.insert(t, item.itemid)
- end
- end
- return t
- end
- function getBagItemsUid(uid, recipe) -- Adquiere el uid de todos los objetos de la mochila. (Para removerlos)
- local t = {}
- for i = 0, #recipe do
- local item = getContainerItem(uid, i)
- if item.itemid ~= 0 then
- table.insert(t, item.uid)
- end
- end
- return t
- end
- function getBagItemsCount(uid, recipe) -- Adquiere las cantidad de todos los objetos de la mochila.
- local t = {}
- for i = 0, #recipe do
- local item = getContainerItem(uid, i)
- if item.itemid ~= 0 then
- table.insert(t, (not isItemStackable(item.itemid) and 1 or item.type))
- end
- end
- return t
- end
- --------------------------------------------------
- function getItemCountName(id, count) -- Imprime la cantidad del objeto, y su nombre en singular/plural dependiendo de su cantidad.
- return (count and count .. " " .. (count ~= 1 and getItemPluralNameById(id) or getItemNameById(id)) or getItemNameById(id))
- end
- function getInaccessMsg(cid, t, key, leng) -- Se envia un mensaje u otro dependiendo de si el jugador aún no empezó la misión, o si ya la terminó.
- local msg = {}
- if getPlayerStorageValue(cid, key) < t[1] then -- Misión inempezada.
- msg = leng.Unbegun
- elseif getPlayerStorageValue(cid, key) > table.maxn(t) then -- Misión finalizada.
- msg = leng.Finished
- end
- return msg
- end
- function isNpcAvailable(cid, t, key) -- El NPC envia un mensaje u otro dependiendo de si el jugador aún no puede cumplir ninguna misión, o si ya las ha terminado todas.
- local minKey = {}
- for k in pairs(t) do if tonumber(k) then minKey = k break end end
- if getPlayerStorageValue(cid, key) < minKey then -- Npc no empezado.
- minKey = t.Unbegun
- elseif getPlayerStorageValue(cid, key) > table.maxn(t) then -- Npc finalizado.
- minKey = t.AllOver
- end
- if t.Standby then
- for k, v in pairs(t.Standby) do
- if isInArray(k, getPlayerStorageValue(cid, key)) then
- minKey = v -- Npc inactivo.
- break
- end
- end
- end
- return minKey
- end
- function titleCase(first, rest) -- Pone la primera letra mayúscula de la palabra.
- return first:upper()..rest:lower()
- end
- function setRecipeList(ingredients) -- Adquiere una lista de los ingredientes de las recetas dependiendo de los Id en una tabla.
- local str = ''
- if table.maxn(ingredients) > 0 then
- for i = 1, table.maxn(ingredients) do
- str = str .. (ingredients[i][2] > 1 and ingredients[i][2] .. " " .. string.gsub(getItemPluralNameById(ingredients[i][1]), "(%a)([%w_']*)", titleCase) .. "." or ingredients[i][2] .. " " .. string.gsub(getItemNameById(ingredients[i][1]), "(%a)([%w_']*)", titleCase) .. ".")
- if i ~= table.maxn(ingredients) then
- str = str .. '\n'
- end
- end
- end
- return str
- end
- function getItemsFromList(items) -- by Vodka // Adquiere una lista de objetos dependiendo de los Id en una tabla.
- local str = ''
- if table.maxn(items) > 0 then
- for i = 1, table.maxn(items) do
- str = str .. (items[i][2] > 1 and items[i][2] .. " " .. string.gsub(getItemPluralNameById(items[i][1]), "(%a)([%w_']*)", titleCase) or string.gsub(getItemNameById(items[i][1]), "(%a)([%w_']*)", titleCase))
- if i == table.maxn(items) - 1 then
- str = str .. " & "
- elseif i ~= table.maxn(items) then
- str = str .. ', '
- end
- end
- end
- return str
- end
- ---------------------------------------------------------------
- function getAllItemsBySlot(cid, slot, id)
- local containers = {}
- local items = {}
- local sitem = getPlayerSlotItem(cid, slot)
- if sitem.uid > 0 then
- if isContainer(sitem.uid) then
- table.insert(containers, sitem.uid)
- elseif not(id) or id == sitem.itemid then
- table.insert(items, sitem)
- end
- end
- while #containers > 0 do
- for k = (getContainerSize(containers[1]) - 1), 0, -1 do
- local tmp = getContainerItem(containers[1], k)
- if isContainer(tmp.uid) then
- table.insert(containers, tmp.uid)
- elseif not(id) or id == tmp.itemid then
- table.insert(items, tmp)
- end
- end
- table.remove(containers, 1)
- end
- return items
- end
- function doPlayerAddMissionItem(cid, item, count, desc) -- "Otorga" objeto de misión.
- local Translate = {
- [ENG_VALUE] = "You've received " .. getItemCountName(item, count) .. " in your briefcase missions.",
- [ESP_VALUE] = "Has recibido " .. getItemCountName(item, count) .. " en tu maletín de misiones.",
- [POR_VALUE] = "Tem recebido " .. getItemCountName(item, count) .. " em seu mala do missões.",
- }
- local function confirm()
- local bag, t = getPlayerSlotItem(cid, CONST_SLOT_RING), {}
- for slot = 0, getContainerSize(bag.uid) - 1 do
- local found = getContainerItem(bag.uid, slot)
- if isItemStackable(found.itemid) then
- if found.itemid == item and string.find(getItemSpecialDescription(found.uid), desc) then
- return found
- end
- end
- if found.itemid == SLOT_MISSION then
- return found
- end
- end
- return false
- end
- if confirm() then
- local conf = confirm()
- doTransformItem(conf.uid, item, (conf.itemid == item and (isItemStackable(conf.itemid) and (conf.type + count) or (count == 1 and 0 or count)) or count))
- doSetItemSpecialDescription(conf.uid, "Objeto de misión. Entregar a " .. desc .. ".")
- local sms = Translate[getPlayerStorageValue(cid, LENGUAGE_STORAGE)]
- if sms then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, sms) end
- end
- return true
- end
- function getPlayerMissionItem(cid, item, desc) -- Devuelve número con la cantidad de objeto de misión.
- local bag, count = getPlayerSlotItem(cid, CONST_SLOT_RING), 0
- for slot = 0, getContainerSize(bag.uid) - 1 do
- local found = getContainerItem(bag.uid, slot)
- if found.itemid == item and string.find(getItemSpecialDescription(found.uid), desc) then
- count = (isItemStackable(found.itemid) and (found.type + count) or 1)
- end
- end
- return count
- end
- function takePlayerMissionItem(cid, item, count, desc) -- "Remueve" objeto de misión.
- local function confirm()
- count = (count == 1 and 0 or count)
- local bag = getPlayerSlotItem(cid, CONST_SLOT_RING)
- for slot = 0, getContainerSize(bag.uid) - 1 do
- local found = getContainerItem(bag.uid, slot)
- if found.itemid == item and found.type == count and string.find(getItemSpecialDescription(found.uid), desc) then
- return found -- quizás añadirle found.type == (isItemStackable(found.itemid) and count or 0)
- end
- end
- end
- if confirm() then
- item = confirm()
- doTransformItem(item.uid, SLOT_MISSION)
- doSetItemSpecialDescription(item.uid, "")
- end
- return true
- end
- ---------------------------------------------------------------
- function doBartering(cid, offer, desc, reward, guide) -- "Remueve" objetos de misión y añade objetos.
- takePlayerMissionItem(cid, offer[1], offer[2], desc)
- if guide then
- local addRecipe = doPlayerAddItem(cid, guide.ItemId)
- doItemSetAttribute(addRecipe, "aid", guide.ActionId)
- doItemSetAttribute(addRecipe, "name", guide.Name)
- end
- if reward then
- for _, items in pairs(reward) do
- doPlayerAddItem(cid, items[1], items[2])
- end
- end
- return true
- 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 doPlayerBuyItem(cid, itemid, count, cost, charges)
- return doPlayerRemoveMoney(cid, cost) and doPlayerGiveItem(cid, itemid, count, charges)
- end
- function doPlayerBuyItemContainer(cid, containerid, itemid, count, cost, charges)
- return doPlayerRemoveMoney(cid, cost) and doPlayerGiveItemContainer(cid, containerid, itemid, count, charges)
- 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 isPremium(cid)
- return (isPlayer(cid) and (getPlayerPremiumDays(cid) > 0 or getBooleanFromString(getConfigInfo('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 isNumber(str)
- return tonumber(str) ~= nil
- end
- function doPlayerAddAddons(cid, addon)
- for i = 0, table.maxn(maleOutfits) do
- doPlayerAddOutfit(cid, maleOutfits[i], addon)
- end
- for i = 0, table.maxn(femaleOutfits) do
- doPlayerAddOutfit(cid, femaleOutfits[i], addon)
- end
- end
- function doPlayerWithdrawAllMoney(cid)
- return doPlayerWithdrawMoney(cid, getPlayerBalance(cid))
- end
- function doPlayerDepositAllMoney(cid)
- return doPlayerDepositMoney(cid, getPlayerMoney(cid))
- end
- function doPlayerTransferAllMoneyTo(cid, target)
- return doPlayerTransferMoneyTo(cid, target, getPlayerBalance(cid))
- end
- function playerExists(name)
- return getPlayerGUIDByName(name) ~= 0
- end
- function getTibiaTime()
- local minutes = getWorldTime()
- local hours = 0
- while (minutes > 60) do
- hours = hours + 1
- minutes = minutes - 60
- end
- return {hours = hours, minutes = 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)
- setConditionParam(condition, CONDITION_PARAM_TICKS, time * 1000)
- return doAddCondition(cid, condition)
- end
- function getPlayerGroupName(cid)
- return getGroupInfo(getPlayerGroupId(cid)).name
- end
- function getPlayerVocationName(cid)
- return getVocationInfo(getPlayerVocation(cid)).name
- end
- function getPromotedVocation(vid)
- return getVocationInfo(vid).promotedVocation
- end
- function doPlayerRemovePremiumDays(cid, days)
- return doPlayerAddPremiumDays(cid, -days)
- end
- function getPlayerMasterPos(cid)
- return getTownTemplePosition(getPlayerTown(cid))
- end
- function getHouseOwner(houseId)
- return getHouseInfo(houseId).owner
- end
- function getHouseName(houseId)
- return getHouseInfo(houseId).name
- end
- function getHouseEntry(houseId)
- return getHouseInfo(houseId).entry
- end
- function getHouseRent(houseId)
- return getHouseInfo(houseId).rent
- end
- function getHousePrice(houseId)
- return getHouseInfo(houseId).price
- end
- function getHouseTown(houseId)
- return getHouseInfo(houseId).town
- end
- function getHouseTilesCount(houseId)
- return getHouseInfo(houseId).tiles
- end
- function getItemNameById(itemid)
- return getItemDescriptionsById(itemid).name
- end
- function getItemPluralNameById(itemid)
- return getItemDescriptionsById(itemid).plural
- end
- function getItemArticleById(itemid)
- return getItemDescriptionsById(itemid).article
- end
- function getItemName(uid)
- return getItemDescriptions(uid).name
- end
- function getItemPluralName(uid)
- return getItemDescriptions(uid).plural
- end
- function getItemArticle(uid)
- return getItemDescriptions(uid).article
- end
- function getItemText(uid)
- return getItemDescriptions(uid).text
- end
- function getItemSpecialDescription(uid)
- return getItemDescriptions(uid).special
- end
- function getItemWriter(uid)
- return getItemDescriptions(uid).writer
- end
- function getItemDate(uid)
- return getItemDescriptions(uid).date
- end
- function getTilePzInfo(pos)
- return getTileInfo(pos).protection
- end
- function getTileZoneInfo(pos)
- local tmp = getTileInfo(pos)
- if(tmp.pvp) then
- return 2
- end
- if(tmp.nopvp) then
- return 1
- end
- return 0
- end
- function doShutdown()
- return doSetGameState(GAMESTATE_SHUTDOWN)
- end
- function doSummonCreature(name, pos, displayError)
- local displayError, cid = displayError or true, doCreateMonster(name, pos, displayError)
- if(not cid) then
- cid = doCreateNpc(name, pos, displayError)
- end
- return cid
- end
- function getOnlinePlayers()
- local tmp = getPlayersOnline()
- local players = {}
- for i, cid in ipairs(tmp) 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)
- if(not isPlayer(cid)) then
- return false
- end
- return getCreatureCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) or getPlayerFlagValue(cid, PLAYERFLAG_CANNOTBESEEN)
- end
- function isMonster(cid)
- return isCreature(cid) and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS
- end
- function isNPC(cid)
- return isCreature(cid) and (not isMonster(cid) and not isPlayer(cid))
- end
- function isNpc(cid)
- return isCreature(cid) and cid >= AUTOID_NPCS
- end
- function doPlayerSetExperienceRate(cid, value)
- return doPlayerSetRate(cid, SKILL__LEVEL, value)
- end
- function doPlayerSetMagicRate(cid, value)
- return doPlayerSetRate(cid, SKILL__MAGLEVEL, value)
- end
- function doPlayerAddLevel(cid, amount, round)
- local experience, level = 0, getPlayerLevel(cid)
- 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)
- for i = 1, amount do
- doPlayerAddSpentMana(cid, (getPlayerRequiredMana(cid, getPlayerMagLevel(cid, true) + 1) - getPlayerSpentMana(cid)) / getConfigInfo('rateMagic'))
- end
- return true
- end
- function doPlayerAddSkill(cid, skill, amount, round)
- if(skill == SKILL__LEVEL) then
- return doPlayerAddLevel(cid, amount, round)
- elseif(skill == SKILL__MAGLEVEL) then
- return doPlayerAddMagLevel(cid, amount)
- end
- return doPlayerAddSkillTry(cid, skill, (getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill)) / getConfigInfo('rateSkill'))
- end
- function getPartyLeader(cid)
- local party = getPartyMembers(cid)
- if(type(party) ~= 'table') then
- return 0
- end
- return party[1]
- end
- function isInParty(cid)
- return type(getPartyMembers(cid)) == 'table'
- end
- function isPrivateChannel(channelId)
- return channelId >= CHANNEL_PRIVATE
- end
- function doPlayerResetIdleTime(cid)
- return doPlayerSetIdleTime(cid, 0)
- 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
- local players = getPlayersOnline()
- for _, pid in ipairs(players) 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
- local players = getPlayersOnline()
- for _, pid in ipairs(players) do
- doCreatureSay(cid, text, class, ghost, pid)
- end
- print("> " .. getCreatureName(cid) .. " broadcasted message: \"" .. text .. "\".")
- return true
- end
- function getBooleanFromString(input)
- local tmp = type(input)
- if(tmp == 'boolean') then
- return input
- end
- if(tmp == 'number') then
- return input > 0
- end
- local str = string.lower(tostring(input))
- return (str == "yes" or str == "true" or (tonumber(str) ~= nil and tonumber(str) > 0))
- end
- function doCopyItem(item, attributes)
- local attributes = attributes or false
- local ret = doCreateItemEx(item.itemid, item.type)
- if(attributes) then
- if(item.actionid > 0) then
- doItemSetAttribute(ret, "aid", item.actionid)
- 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 doRemoveThing(uid)
- if(isCreature(uid)) then
- return doRemoveCreature(uid)
- end
- return doRemoveItem(uid)
- end
- function setAttackFormula(combat, type, minl, maxl, minm, maxm, min, max)
- local min, max = min or 0, max or 0
- return setCombatFormula(combat, type, -1, 0, -1, 0, minl, maxl, minm, maxm, min, max)
- end
- function setHealingFormula(combat, type, minl, maxl, minm, maxm, min, max)
- local min, max = min or 0, max or 0
- return setCombatFormula(combat, type, 1, 0, 1, 0, minl, maxl, minm, maxm, min, max)
- end
- function doChangeTypeItem(uid, subtype)
- local thing = getThing(uid)
- if(thing.itemid < 100) then
- return false
- end
- local subtype = subtype or 1
- return doTransformItem(thing.uid, thing.itemid, subtype)
- 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 getFluidSourceType(itemid)
- local item = getItemInfo(itemid)
- return item and item.fluidSource or false
- end
- function getDepotId(uid)
- return getItemAttribute(uid, "depotid") or false
- end
- function getItemDescriptions(uid)
- local thing = getThing(uid)
- if(thing.itemid < 100) then
- return false
- end
- local item = getItemInfo(thing.itemid)
- return {
- name = getItemAttribute(uid, "name") or item.name,
- plural = getItemAttribute(uid, "pluralname") or item.plural,
- article = getItemAttribute(uid, "article") or item.article,
- special = getItemAttribute(uid, "description") or "",
- text = getItemAttribute(uid, "text") or "",
- writer = getItemAttribute(uid, "writer") or "",
- date = getItemAttribute(uid, "date") or 0
- }
- 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
- --[[if(precision) then
- return weight
- end
- local t = string.explode(tostring(weight), ".")
- if(table.maxn(t) == 2) then
- return tonumber(t[1] .. "." .. string.sub(t[2], 1, 2))
- end]]--
- return weight
- end
- function getItemWeaponType(uid)
- local thing = getThing(uid)
- if(thing.itemid < 100) then
- return false
- end
- return getItemInfo(thing.itemid).weaponType
- end
- function getItemRWInfo(uid)
- local thing = getThing(uid)
- if(thing.itemid < 100) then
- return false
- end
- local item, flags = getItemInfo(thing.itemid), 0
- if(item.readable) then
- flags = 1
- end
- if(item.writable) then
- flags = flags + 2
- end
- return flags
- end
- function getItemLevelDoor(itemid)
- local item = getItemInfo(itemid)
- return item and item.levelDoor or false
- end
- function isItemStackable(itemid)
- local item = getItemInfo(itemid)
- return item and item.stackable or false
- end
- function isItemRune(itemid)
- local item = getItemInfo(itemid)
- return item and item.clientCharges or false
- end
- function isItemDoor(itemid)
- local item = getItemInfo(itemid)
- return item and item.type == 5 or false
- end
- function isItemContainer(itemid)
- local item = getItemInfo(itemid)
- return item and item.group == 2 or false
- end
- function isItemFluidContainer(itemid)
- local item = getItemInfo(itemid)
- return item and item.group == 12 or false
- end
- function isItemMovable(itemid)
- local item = getItemInfo(itemid)
- return item and item.movable or false
- end
- function isCorpse(uid)
- local thing = getThing(uid)
- if(thing.itemid < 100) then
- return false
- end
- local item = getItemInfo(thing.itemid)
- return item and item.corpseType ~= 0 or false
- end
- function getContainerCapById(itemid)
- local item = getItemInfo(itemid)
- if(not item or item.group ~= 2) then
- return false
- end
- return item.maxItems
- end
- function getMonsterAttackSpells(name)
- local monster = getMonsterInfo(name)
- return monster and monster.attacks or false
- end
- function getMonsterHealingSpells(name)
- local monster = getMonsterInfo(name)
- return monster and monster.defenses or false
- end
- function getMonsterLootList(name)
- local monster = getMonsterInfo(name)
- return monster and monster.loot or false
- end
- function getMonsterSummonList(name)
- local monster = getMonsterInfo(name)
- return monster and monster.summons or false
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement