• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Solved !frags command problem

Galaxy

New Member
Joined
Feb 24, 2011
Messages
108
Reaction score
1
Location
Ireland/Carlow
Hello Otlanders

I have a problem with my !frags command.

I don't know how to say this but. It works only if a person have a certain amount of frags (i think it worked when I had from 0 to 17 frags). Then when I type in !frags in-game, an error shows up:
testy1.png


My frag script is:
Code:
local config = { 
    useFragHandler = getBooleanFromString(getConfigValue('useFragHandler')), 
    advancedFragList = getBooleanFromString(getConfigValue('advancedFragList')) 
} 

function onSay(cid, words, param, channel) 
    if(not config.useFragHandler) then 
        return false 
    end 

    local time = os.time() 
    local times = {today = (time - 86400), week = (time - (7 * 86400))} 

    local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") 
    if(result:getID() ~= -1) then 
        repeat 
            local content = { 
                name = result:getDataString("name"), 
                level = result:getDataInt("level"), 
                date = result:getDataInt("date") 
            } 
            if(content.date > times.today) then 
                table.insert(contents.day, content) 
            elseif(content.date > times.week) then 
                table.insert(contents.week, content) 
            else 
                table.insert(contents.month, content) 
            end 
        until not result:next() 
        result:free() 
    end 

    local size = { 
        day = table.maxn(contents.day), 
        week = table.maxn(contents.week), 
        month = table.maxn(contents.month) 
    } 
    if(config.advancedFragList) then 
        local result = "Frags gained today: " .. size.day .. "." 
        if(size.day > 0) then 
            for _, content in ipairs(contents.day) do 
                result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level 
            end 

            result = result .. "\n" 
        end 

        result = result .. "\nFrags gained this week: " .. (size.day + size.week) .. "." 
        if(size.week > 0) then 
            for _, content in ipairs(contents.week) do 
                result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level 
            end 

            result = result .. "\n" 
        end 

        result = result .. "\nFrags gained this month: " .. (size.day + size.week + size.month) .. "." 
        if(size.month > 0) then 
            for _, content in ipairs(contents.month) do 
                result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level 
            end 

            result = result .. "\n" 
        end 

        local skullEnd = getPlayerSkullEnd(cid) 
        if(skullEnd > 0) then 
            result = result .. "\nYour " .. (getCreatureSkullType(cid) == SKULL_RED and "red" or "black") .. " skull will expire at " .. os.date("%d %B %Y %X", skullEnd) 
        end 

        doPlayerPopupFYI(cid, result) 
    else 
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You currently have " .. size.day .. " frags today, " .. (size.day + size.week) .. " this week and " .. (size.day + size.week + size.month) .. " this month.") 
        if(size.day > 0) then 
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Last frag at " .. os.date("%d %B %Y %X", contents.day[1].date) .. " on level " .. contents.day[1].level .. " (" .. contents.day[1].name .. ").") 
        end 

        local skullEnd = getPlayerSkullEnd(cid) 
        if(skullEnd > 0) then 
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your " .. (getCreatureSkullType(cid) == SKULL_RED and "red" or "black") .. " skull will expire at " .. os.date("%d %B %Y %X", skullEnd)) 
        end 
    end 

    return true 
end

and of course I have a line in talkactions.xml...

I give rep++ for help :)

Please...

I'd actually appreciate if someone would give me a script and when i sawy !frags, something like:
"You have 7 frags today, 10 this week and 25 this month."
would appear in Default Channel... also Id appreciate if someone could make exhausted of 5 second to that.


EDIT:
Please don't look at the attached thumbnails because they are the wrong photos. I uploaded a wrong photo at first time and now it just stayed there. I dont know how to remove those attached thumbnails.
 

Attachments

Last edited:
Lua:
local config = {
	useFragHandler = getBooleanFromString(getConfigValue('useFragHandler')),
	advancedFragList = getBooleanFromString(getConfigValue('advancedFragList'))
}

function onSay(cid, words, param, channel)
	if(not config.useFragHandler) then
		return false
	end

	local time = os.time()
	local times = {today = (time - 86400), week = (time - (7 * 86400))}

	local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC")
	if(result:getID() ~= -1) then
		repeat
			local content = {
				name = result:getDataString("name"),
				level = result:getDataInt("level"),
				date = result:getDataInt("date")
			}
			if(content.date > times.today) then
				table.insert(contents.day, content)
			elseif(content.date > times.week) then
				table.insert(contents.week, content)
			else
				table.insert(contents.month, content)
			end
		until not result:next()
		result:free()
	end

	local size = {
		day = table.maxn(contents.day),
		week = table.maxn(contents.week),
		month = table.maxn(contents.month)
	}
	if(config.advancedFragList) then
		local result = "Frags gained today: " .. size.day .. "."
		if(size.day > 0) then
			for _, content in ipairs(contents.day) do
				result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level
			end

			result = result .. "\n"
		end

		result = result .. "\nFrags gained this week: " .. (size.day + size.week) .. "."
		if(size.week > 0) then
			for _, content in ipairs(contents.week) do
				result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level
			end

			result = result .. "\n"
		end

		result = result .. "\nFrags gained this month: " .. (size.day + size.week + size.month) .. "."
		if(size.month > 0) then
			for _, content in ipairs(contents.month) do
				result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level
			end

			result = result .. "\n"
		end

		local skullEnd = getPlayerSkullEnd(cid)
		if(skullEnd > 0) then
			result = result .. "\nYour " .. (getCreatureSkullType(cid) == SKULL_RED and "red" or "black") .. " skull will expire at " .. os.date("%d %B %Y %X", skullEnd)
		end

		doPlayerPopupFYI(cid, result)
	else
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You currently have " .. size.day .. " frags today, " .. (size.day + size.week) .. " this week and " .. (size.day + size.week + size.month) .. " this month.")
		if(size.day > 0) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Last frag at " .. os.date("%d %B %Y %X", contents.day[1].date) .. " on level " .. contents.day[1].level .. " (" .. contents.day[1].name .. ").")
		end

		local skullEnd = getPlayerSkullEnd(cid)
		if(skullEnd > 0) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your " .. (getCreatureSkullType(cid) == SKULL_RED and "red" or "black") .. " skull will expire at " .. os.date("%d %B %Y %X", skullEnd))
		end
	end

	return true
end
 
@up
????

here you go.. Galaxy

Lua:
local config = {
	useFragHandler = getBooleanFromString(getConfigValue('useFragHandler')),
	advancedFragList = getBooleanFromString(getConfigValue('advancedFragList'))
}

function onSay(cid, words, param, channel)
	if(not config.useFragHandler) then
		return false
	end

	local time = os.time()
	local times = {today = (time - 86400), week = (time - (7 * 86400))}

	local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `k`.`war` = 0 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC")
	if(result:getID() ~= -1) then
		repeat
			local content = {
				name = result:getDataString("name"),
				level = result:getDataInt("level"),
				date = result:getDataInt("date")
			}
			if(content.date > times.today) then
				table.insert(contents.day, content)
			elseif(content.date > times.week) then
				table.insert(contents.week, content)
			else
				table.insert(contents.month, content)
			end
		until not result:next()
		result:free()
	end

	local size = {
		day = table.maxn(contents.day),
		week = table.maxn(contents.week),
		month = table.maxn(contents.month)
	}
	if(config.advancedFragList) then
		local result = "Frags gained today: " .. size.day .. "."
		if(size.day > 0) then
			for _, content in ipairs(contents.day) do
				result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level
			end

			result = result .. "\n"
		end

		result = result .. "\nFrags gained this week: " .. (size.day + size.week) .. "."
		if(size.week > 0) then
			for _, content in ipairs(contents.week) do
				result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level
			end

			result = result .. "\n"
		end

		result = result .. "\nFrags gained this month: " .. (size.day + size.week + size.month) .. "."
		if(size.month > 0) then
			for _, content in ipairs(contents.month) do
				result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level
			end

			result = result .. "\n"
		end

		local skullEnd = getPlayerSkullEnd(cid)
		if(skullEnd > 0) then
			result = result .. "\nYour " .. (getCreatureSkullType(cid) == SKULL_RED and "red" or "black") .. " skull will expire at " .. os.date("%d %B %Y %X", skullEnd)
		end

		doPlayerPopupFYI(cid, result)
	else
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You currently have " .. size.day .. " frags today, " .. (size.day + size.week) .. " this week and " .. (size.day + size.week + size.month) .. " this month.")
		if(size.day > 0) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Last frag at " .. os.date("%d %B %Y %X", contents.day[1].date) .. " on level " .. contents.day[1].level .. " (" .. contents.day[1].name .. ").")
		end

		local skullEnd = getPlayerSkullEnd(cid)
		if(skullEnd > 0) then
			doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your " .. (getCreatureSkullType(cid) == SKULL_RED and "red" or "black") .. " skull will expire at " .. os.date("%d %B %Y %X", skullEnd))
		end
	end

	return true
end
 
its not bug in the script :w00t:
open config.lua
search for
Code:
advancedFragList = true
change it to
Code:
advancedFragList = false
 
command !frags with exhausted
Code:
local config = { 
    useFragHandler = getBooleanFromString(getConfigValue('useFragHandler')), 
    advancedFragList = getBooleanFromString(getConfigValue('advancedFragList')) 
} 

local useExhausted = true -- use exhausted or not
local wait = 5 -- 5 second exhausted
local str = 5221 -- put empty storage
function onSay(cid, words, param, channel) 
    if(not config.useFragHandler) then 
        return false 
    end 
	
	if(useExhausted and exhaustion.check(cid, str)) then
		return doPlayerSendCancel(cid, "you are exhausted for ".. exhaustion.get(cid, str) .." second")
	end

    local time = os.time() 
    local times = {today = (time - 86400), week = (time - (7 * 86400))} 

    local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") 
    if(result:getID() ~= -1) then 
        repeat 
            local content = { 
                name = result:getDataString("name"), 
                level = result:getDataInt("level"), 
                date = result:getDataInt("date") 
            } 
            if(content.date > times.today) then 
                table.insert(contents.day, content) 
            elseif(content.date > times.week) then 
                table.insert(contents.week, content) 
            else 
                table.insert(contents.month, content) 
            end 
        until not result:next() 
        result:free() 
    end 

    local size = { 
        day = table.maxn(contents.day), 
        week = table.maxn(contents.week), 
        month = table.maxn(contents.month) 
    } 
    if(config.advancedFragList) then 
        local result = "Frags gained today: " .. size.day .. "." 
        if(size.day > 0) then 
            for _, content in ipairs(contents.day) do 
                result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level 
            end 

            result = result .. "\n" 
        end 

        result = result .. "\nFrags gained this week: " .. (size.day + size.week) .. "." 
        if(size.week > 0) then 
            for _, content in ipairs(contents.week) do 
                result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level 
            end 

            result = result .. "\n" 
        end 

        result = result .. "\nFrags gained this month: " .. (size.day + size.week + size.month) .. "." 
        if(size.month > 0) then 
            for _, content in ipairs(contents.month) do 
                result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level 
            end 

            result = result .. "\n" 
        end 

        local skullEnd = getPlayerSkullEnd(cid) 
        if(skullEnd > 0) then 
            result = result .. "\nYour " .. (getCreatureSkullType(cid) == SKULL_RED and "red" or "black") .. " skull will expire at " .. os.date("%d %B %Y %X", skullEnd) 
        end 

        doPlayerPopupFYI(cid, result) 
    else 
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You currently have " .. size.day .. " frags today, " .. (size.day + size.week) .. " this week and " .. (size.day + size.week + size.month) .. " this month.") 
		exhaustion.set(cid, str, wait)
        if(size.day > 0) then 
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Last frag at " .. os.date("%d %B %Y %X", contents.day[1].date) .. " on level " .. contents.day[1].level .. " (" .. contents.day[1].name .. ").") 
        end 

        local skullEnd = getPlayerSkullEnd(cid) 
        if(skullEnd > 0) then 
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your " .. (getCreatureSkullType(cid) == SKULL_RED and "red" or "black") .. " skull will expire at " .. os.date("%d %B %Y %X", skullEnd))
        end 
    end 

    return true 
end
 
@Ahmed30
I got this when I use ur script
errorjb.jpg


:S i know what is wrong but i dont know how to solve it xd


AHMED30, you helped me with that line "advancedFragList" coz it worked with old script. So i give u rep for that. But i would appreciate if u could help me with the exhausted script :))
 
Last edited:
well
the first one which i gave you is working but you don't have in data/lib exhaustion.set ~~etc
anyway this will work :p
Code:
local config = { 
    useFragHandler = getBooleanFromString(getConfigValue('useFragHandler')), 
    advancedFragList = getBooleanFromString(getConfigValue('advancedFragList')) 
} 

local useExhausted = true -- use exhausted or not
local wait = 5 -- 5 second exhausted
local str = 5221 -- put empty storage
function onSay(cid, words, param, channel) 
    if(not config.useFragHandler) then 
        return false 
    end 
	
	 if useExhausted and getCreatureStorage(cid, str) > os.time() then
        return doPlayerSendCancel(cid, 'sorry you are exhausted for '.. exhaustion.get(cid, str) ..' second.')
	end

    local time = os.time() 
    local times = {today = (time - 86400), week = (time - (7 * 86400))} 

    local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") 
    if(result:getID() ~= -1) then 
        repeat 
            local content = { 
                name = result:getDataString("name"), 
                level = result:getDataInt("level"), 
                date = result:getDataInt("date") 
            } 
            if(content.date > times.today) then 
                table.insert(contents.day, content) 
            elseif(content.date > times.week) then 
                table.insert(contents.week, content) 
            else 
                table.insert(contents.month, content) 
            end 
        until not result:next() 
        result:free() 
    end 

    local size = { 
        day = table.maxn(contents.day), 
        week = table.maxn(contents.week), 
        month = table.maxn(contents.month) 
    } 
    if(config.advancedFragList) then 
        local result = "Frags gained today: " .. size.day .. "." 
        if(size.day > 0) then 
            for _, content in ipairs(contents.day) do 
                result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level 
            end 

            result = result .. "\n" 
        end 

        result = result .. "\nFrags gained this week: " .. (size.day + size.week) .. "." 
        if(size.week > 0) then 
            for _, content in ipairs(contents.week) do 
                result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level 
            end 

            result = result .. "\n" 
        end 

        result = result .. "\nFrags gained this month: " .. (size.day + size.week + size.month) .. "." 
        if(size.month > 0) then 
            for _, content in ipairs(contents.month) do 
                result = result .. "\n* " .. os.date("%d %B %Y %X at ", content.date) .. content.name .. " on level " .. content.level 
            end 

            result = result .. "\n" 
        end 

        local skullEnd = getPlayerSkullEnd(cid) 
        if(skullEnd > 0) then 
            result = result .. "\nYour " .. (getCreatureSkullType(cid) == SKULL_RED and "red" or "black") .. " skull will expire at " .. os.date("%d %B %Y %X", skullEnd) 
        end 

        doPlayerPopupFYI(cid, result) 
    else 
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You currently have " .. size.day .. " frags today, " .. (size.day + size.week) .. " this week and " .. (size.day + size.week + size.month) .. " this month.") 
		setPlayerStorageValue(cid, str, time + wait)
        if(size.day > 0) then 
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Last frag at " .. os.date("%d %B %Y %X", contents.day[1].date) .. " on level " .. contents.day[1].level .. " (" .. contents.day[1].name .. ").") 
        end 

        local skullEnd = getPlayerSkullEnd(cid) 
        if(skullEnd > 0) then 
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your " .. (getCreatureSkullType(cid) == SKULL_RED and "red" or "black") .. " skull will expire at " .. os.date("%d %B %Y %X", skullEnd))
        end 
    end 

    return true 
end
 
Ahmed30:
There are few mistakes in this script but I just changed it a little bit.

First of all, this line:
return doPlayerSendCancel(cid, 'sorry you are exhausted for '.. exhaustion.get(cid, str) ..' second.')
I marked wrong signs with red. Instead of ' there should be " but it is a very small mistake xD

Second problem is, that it didn't show the exhausted in-game. So I just changed this line:
return doPlayerSendCancel(cid, 'sorry you are exhausted for '.. exhaustion.get(cid, str) ..' second.')

to this:
return doPlayerSendCancel(cid, "Sorry, there is a 5 second exhaustment.")

Anyway, thanks for the script :) That's what I needed :))))

ofc, another REP for you :))
 
it's not mistake you can use ' or "
if exhaustion.get(cid, str) doesn't work then it seems like you don't have this in data/lib/034-exhaustion.lua
Code:
exhaustion =
{
	check = function (cid, storage)
		if(getPlayerFlagValue(cid, PLAYERFLAG_HASNOEXHAUSTION)) then
			return false
		end

		return getPlayerStorageValue(cid, storage) >= os.time(t)
	end,

	get = function (cid, storage)
		if(getPlayerFlagValue(cid, PLAYERFLAG_HASNOEXHAUSTION)) then
			return false
		end

		local exhaust = getPlayerStorageValue(cid, storage)
		if(exhaust > 0) then
			local left = exhaust - os.time(t)
			if(left >= 0) then
				return left
			end
		end

		return false
	end,

	set = function (cid, storage, time)
		setPlayerStorageValue(cid, storage, os.time(t) + time)
	end,

	make = function (cid, storage, time)
		local exhaust = exhaustion.get(cid, storage)
		if(not exhaust) then
			exhaustion.set(cid, storage, time)
			return true
		end

		return false
	end
}
 
Back
Top