Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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 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 isNumeric(str)
- return tonumber(str) ~= nil
- 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[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) ~= nil
- end
- function getTibiaTime()
- local minutes, hours = getWorldTime(), 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 == -1 and time or 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 getHouseDoorsCount(houseId)
- return table.maxn(getHouseInfo(houseId).doors)
- end
- function getHouseBedsCount(houseId)
- return table.maxn(getHouseInfo(houseId).beds)
- end
- function getHouseTilesCount(houseId)
- return table.maxn(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 doSetItemSpecialDescription(uid, str)
- return doItemSetAttribute(uid, "description", str)
- 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, false, false, displayError)
- if(not cid) then
- cid = doCreateNpc(name, pos, displayError)
- end
- return cid
- end
- function getOnlinePlayers()
- 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) 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 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, 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 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
- 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 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 = ((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 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 doItemSetActionId(uid, aid)
- return doItemSetAttribute(uid, "aid", aid)
- 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 isContainer(uid)
- local thing = getThing(uid)
- return thing.uid > 0 and thing.items ~= nil
- 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.type == ITEM_TYPE_RUNE or false
- end
- function isItemDoor(itemid)
- local item = getItemInfo(itemid)
- return item and item.type == ITEM_TYPE_DOOR or false
- end
- function isItemContainer(itemid)
- local item = getItemInfo(itemid)
- return item and item.group == ITEM_GROUP_CONTAINER or false
- end
- function isItemFluidContainer(itemid)
- local item = getItemInfo(itemid)
- return item and item.group == ITEM_GROUP_FLUID 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
- function choose(...)
- local arg = {...}
- return arg[math.random(1, table.maxn(arg))]
- end
- function doSendAnimatedText(...)
- error("doSendAnimatedText is now a deprecated function.")
- end
- --Guild stuff
- function setGuildLevel(guild,lvl)
- return db.executeQuery("UPDATE `guilds` SET `Level` = ".. lvl.." WHERE `id` = ".. guild .. " LIMIT 1;")
- end
- function getGuildLevel(guild)
- local res = db.getResult("SELECT `Level` FROM `guilds` WHERE `id` = ".. guild .. " LIMIT 1;")
- local value = 0
- if(res:getID() ~= -1) then
- value = res:getDataInt("Level")
- res:free()
- end
- return value
- end
- function addGuildExp(guild,exp)
- local curLevel =getGuildLevel(guild)
- local nextLevel =curLevel+1
- local nextExp =getGuildExpForLevel(nextLevel)
- local curExp =getGuildExp(guild)
- local maxLevel = tonumber(getConfigValue('guildMaxLevel'))
- local maxExp = getGuildExpForLevel(maxLevel)
- local newExp = (curExp + exp ) > maxExp and math.abs((maxExp - exp) - exp) or exp
- local levelAdd = false
- if nextLevel == maxLevel then return false end
- db.executeQuery("UPDATE `guilds` SET `Experience` = Experience + ".. newExp.." WHERE `id` = ".. guild .. " LIMIT 1;")
- local newExpp = getGuildExp(guild)
- if newExpp >= nextExp then
- setGuildLevel(guild,nextLevel)
- levelAdd =true
- end
- local strSame = "Guild system : your guild gained "..newExp.." experience points at level ".. getGuildLevel(guild)..". Needs "..getGuildExpForLevel(getGuildLevel(guild)+1) - getGuildExp(guild).." exp to next level!"
- local strNew = "Guild system : your guild gained "..newExp.." experience points and advanced to level "..getGuildLevel(guild)..". Needs "..getGuildExpForLevel(getGuildLevel(guild)+1) - getGuildExp(guild).." exp to next level!"
- for _,cid in ipairs(getPlayersOnline()) do
- if getPlayerGuildId(cid) == guild then
- doPlayerSendChannelMessage(cid,"", levelAdd and strNew or strSame, (levelAdd and TALKTYPE_GAMEMASTER_CHANNEL or TALKTYPE_CHANNEL_HIGHLIGHT), CHANNEL_GUILD)
- doPlayerSendTextMessage(cid,(levelAdd and MESSAGE_INFO_DESCR or MESSAGE_EVENT_ORANGE),levelAdd and strNew or strSame)
- end
- end
- return true
- end
- function getGuildExpForLevel(lvl)
- local base = tonumber(getConfigValue('guildBaseExp'))
- if lvl == 1 then return base end
- return math.ceil(((base* lvl * lvl * lvl) + ((base-350) * lvl * lvl) + ((base-200) * lvl)) / 3)
- end
- function getGuildExp(guild)
- local res = db.getResult("SELECT `Experience` FROM `guilds` WHERE `id` = ".. guild .. " LIMIT 1;")
- local value = 0
- if(res:getID() ~= -1) then
- value = res:getDataInt("Experience")
- res:free()
- end
- return value
- end
- function isGuild(guild)
- local res = db.getResult("SELECT `Experience` FROM `guilds` WHERE `id` = ".. guild .. " LIMIT 1;")
- local value = false
- if(res:getID() ~= -1) then
- value = true
- res:free()
- end
- return value
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement