Ir para conteúdo

Rep Sistem


angeldoido

Posts Recomendados

Galera tipow keria um tipoe de rep sistem de mata monster ganha +rep mata player perde -rep e aparece o rep sistem no look, eu tenho uma versao aki

mais naum funciono assim...

 

(script do otland)

 

<?xml version="1.0" encoding="UTF-8"?>
<!-- To use this system, execute query:
ALTER TABLE `players` ADD COLUMN `rep` INT( 11 ) NOT NULL DEFAULT '0' COMMENT 'Cyber''s REPSystem © OTLand.net';
-->
<mod name="Cyber's REP System" revision="6.1" author="Cybermaster" web="otland.net" enabled="no" 
released="August2010" credits="Sync;Shawak;Chris;nsanee"><config name="repSystem"><![CDATA[
   rep = {
       --[[ CONFIG ]]--
	interval = 3 * 60, --This is [3] hours, in minutes. Time to be online to gain [1] Opinion Point.
       minLevel = 20, --From this level onwards player can use commands
       pvpLevel = 30, --Minimum level for PVP Rep'ing
       required = 5, --Opinion points required to repute with talkaction command
	exhaustion = 60, --Seconds to wait to be able to use !rep command again
	power = false, --Use RepPower Feature? OPTIONS 1:true 2:false
       --[[ STORAGES ]]--
	exhaust = 5045, --Exhaustion for !rep command.
	lastName = 5036, --Used to store the last repped's GUID
       lastKilled = 5037, --Used to store the last killed's GUID
       opinion = 5038, --Used to store the opinion points
       online = 5039, --Used to store online minutes

	autoOpinion = function(cid)
		if not isPlayer(cid) then 
			return true 
		end
		doCreatureSetStorage(cid, rep.online, getCreatureStorage(cid, rep.online)+1)
		if getCreatureStorage(cid, rep.online) >= rep.interval then
			doCreatureSetStorage(cid, rep.online, 0)
			doSendAnimatedText(getThingPos(cid), '+1', TEXTCOLOR_LIGHTBLUE)
			doCreatureSetStorage(cid, rep.opinion, getCreatureStorage(cid, rep.opinion)+1)
			doPlayerSendTextMessage(cid, 27, 'You have just obtained an opinion point.')
		end
		repEvent = addEvent(rep.autoOpinion, 60 * 1000, cid)
	end,

	getArticle = function(cid, uppercase)
           return (getPlayerSex(cid) ==  0 and (uppercase and 'Sh' or 'sh') or (uppercase and 'H' or 'h')) .. 'e'
       end,

       getPoints = function(cid)
           local result = db.getResult('SELECT `rep` FROM `players` WHERE `id` = '.. getPlayerGUID(cid))
		local data = result:getDataInt('rep')
		result:free()
		return data
       end,

       getPower = function(points)
           local power = {{0,1},{300,2},{500,3},{1000,4},{1500,5},{2000,6},{5000,7}}
           table.sort(power, function(a, b) return a[1] > b[1] end)
           for _, t in ipairs(power) do     
               if math.abs(points) >= t[1] then
                   return t[2]
               end
           end
           return power[1][2]
       end,

       getRank = function(points)
           local ranks = {
               {-5000, 'Power Abuser (*<<==========)'},
               {-2000, 'Evil (=*<==========)'},
               {-1500, 'Slayer (==*==========)'},
               {-1000, 'Killer (===|=========)'},
               {-500, 	'Villain (====|========)'},
               {-300, 	'Creeping (=====|=======)'},
               {0, 	'Unknown (======|======)'},
               {300, 	'Avowed (=======|=====)'},
               {500, 	'Popular (========|====)'},
               {1000, 	'Hailed (=========|===)'},
               {1500, 	'Acclaimed (==========+==)'},
               {2000, 	'Hero (==========>+=)'},
               {5000,	'Legend (==========>>+)'}
           }
           if points > -1 then
               table.sort(ranks, function(a, b) return a[1] > b[1] end)
               for _, t in ipairs(ranks) do if points >= t[1] then return t[2] end end
           else
               table.sort(ranks, function(a, b) return a[1] < b[1] end)
               for _, t in ipairs(ranks) do if points <= t[1] then return t[2] end end
           end        
           return ranks[1][2]
       end,

       set = function(cid, points)
           db.executeQuery('UPDATE `players` SET `rep` = ' .. points .. ' WHERE `id` = ' .. getPlayerGUID(cid))
       end,

       add = function(cid, amount, color)
           db.executeQuery('UPDATE `players` SET `rep` = `rep` + ' .. amount .. ' WHERE `id` = ' .. getPlayerGUID(cid))
           doSendAnimatedText(getThingPos(cid), '+REP', color and color or math.random(255))
           doPlayerSendCancel(cid, 'You have just been hailed and gained '.. amount ..' reputation points.')
       end,

       remove = function(cid, amount, color)
           db.executeQuery('UPDATE `players` SET `rep` = `rep` - ' .. amount .. ' WHERE `id` = ' .. getPlayerGUID(cid))
           doSendAnimatedText(getThingPos(cid), '-REP',  color and color or math.random(255))
           doPlayerSendCancel(cid, 'You have just been repudiated and lost '.. amount ..' reputation points.')
       end,

	format = function(str)
		str = tostring(str):reverse()
		str = str:gsub("(%d)(%d)(%d)", '%1%2%3' .. (',' or ' '), math.ceil(str:len() / 3)-1)
		return str:reverse()
	end,
   }
]]></config>

<event type="login" name="repRegister" event="script"><![CDATA[
   domodlib('repSystem')
   function onLogin(cid)
       repEvent = addEvent(rep.autoOpinion, 60 * 1000, cid)
	if getCreatureStorage(cid, rep.opinion) == -1 then
           doCreatureSetStorage(cid, rep.online, 0)
		doCreatureSetStorage(cid, rep.opinion, 0)
       end
       registerCreatureEvent(cid, "repLook")
	registerCreatureEvent(cid, "repKill")
	registerCreatureEvent(cid, "repMonster")
       return true
   end
]]></event>

<event type="logout" name="repCancel" event="script"><![CDATA[
domodlib('repSystem')
function onLogout(cid)
	stopEvent(repEvent)
	return true
end
]]></event>

<event type="look" name="repLook" event="script"><![CDATA[
   domodlib('repSystem')
   function onLook(cid, thing, position, lookDistance)
       if isPlayer(thing.uid) and thing.uid ~= cid then
           doPlayerSetSpecialDescription(thing.uid,'\n'.. rep.getArticle(thing.uid, true)..' is ' .. rep.getRank(rep.getPoints(thing.uid)) ..'.')
		return true
	elseif thing.uid == cid then     
		local string = 'You see yourself.'
		if getPlayerFlagValue(cid, PLAYERFLAG_SHOWGROUPINSTEADOFVOCATION) then
			string = string..' You are '.. getPlayerGroupName(cid) ..'.'
		elseif getPlayerVocation(cid) ~= 0 then
			string = string..' You are '.. getPlayerVocationName(cid) ..'.'
		else
			string = string..' You have no vocation.'
		end
		string = string..' You are '.. rep.getRank(rep.getPoints(cid)) ..'.'

		if getPlayerNameByGUID(getPlayerPartner(cid), false, false) ~= nil then
			string = string..' You are '.. (getPlayerSex(cid) == 0 and 'wife' or 'husband') ..' of '.. getPlayerNameByGUID(getPlayerPartner(cid)) ..'.'
		end

		if getPlayerGuildId(cid) > 0 then 
			string = string..' You are ' .. (getPlayerGuildRank(cid) == '' and 'a member' or getPlayerGuildRank(cid)) ..' of the '.. getPlayerGuildName(cid)
			string = getPlayerGuildNick(cid) ~= '' and string..' ('.. getPlayerGuildNick(cid) ..').' or string..'.'
		end 

		if getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEECREATUREDETAILS) then
			string = string..'\nHealth: ['.. getCreatureHealth(cid) ..' / '.. getCreatureMaxHealth(cid) ..'], Mana: ['.. getCreatureMana(cid) ..' / '.. getCreatureMaxMana(cid) ..'].'
			string = string..'\nIP: '.. doConvertIntegerToIp(getPlayerIp(cid)) ..'.'
		end

		if getPlayerFlagValue(cid, PLAYERCUSTOMFLAG_CANSEEPOSITION) then
			string = string..'\nPosition: [X:'.. position.x..'] [Y:'.. position.y..'] [Z:'.. position.z..'].'
		end
		doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, string)  
		return false
	end
	return true
   end]]>
</event>

<event type="kill" name="repKill" event="script"><![CDATA[
   domodlib('repSystem')
   local t = {
       [sKULL_WHITE] = 15,
       [sKULL_RED] = 20,
       [sKULL_BLACK] = 40,
       [sKULL_NONE] = -30,
   }

   function onKill(cid, target, lastHit)
       if isPlayer(cid) and isPlayer(target) and getPlayerIp(cid) ~= getPlayerIp(target) and getCreatureStorage(cid, rep.lastKilled) ~= getPlayerGUID(target) and not getTileInfo(getThingPos(cid)).nopvp or not getTileInfo(getThingPos(cid)).optional then
       --THE KILLER
           if t[getCreatureSkullType(target)] and getPlayerLevel(target) >= rep.pvpLevel then
               doSendAnimatedText(getThingPos(cid), getCreatureSkullType(target) == 0 and '-REP' or '+REP', math.random(255))
               doCreatureSetStorage(cid, rep.lastKilled, getPlayerGUID(target))
			rep.set(cid, rep.getPoints(cid)+t[getCreatureSkullType(target)])
               doPlayerSendCancel(cid, 'You '.. (getCreatureSkullType(target) == 0 and 'lose' or 'gain') ..' reputation because you killed a player.')
           end
       --THE VICTIM
           if rep.getPoints(target) == 0 then
               return true
           elseif rep.getPoints(target) > 0 then
               rep.remove(target, 5, TEXTCOLOR_RED)
               doPlayerSendCancel(target, 'You lose reputation because you were killed by a player.')
           else
               rep.add(target, 5, TEXTCOLOR_LIGHTBLUE)
               doPlayerSendCancel(target, 'You lose reputation because you were killed by a player.')
           end
       end
       return true
   end]]>
</event>

<event type="kill" name="repMonster" event="script"><![CDATA[
   domodlib('repSystem')
   local monster = { --add monsters names only in lowercase
       ['demon'] = 3,
       ['behemoth'] = 4,
       ['hellfire fighter'] = 5,
       ['orshabaal'] = 10,
   }
   function onKill(cid, target, lastHit)
       if isPlayer(cid) and isMonster(target) and monster[getCreatureName(target):lower()] and lastHit then
           rep.add(cid, monster[getCreatureName(target):lower()])
       end
       return true
   end]]>
</event>

<talkaction log="yes" words="/hail;/fuck;/set" access="4" event="buffer">
<![CDATA[
	domodlib('repSystem')
       if param == '' then
           doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,'[REP_SYSTEM] You must write a player\'s name.')
           return true
       end

       local t = string.explode(param, ',')
       local tid = getPlayerByNameWildcard(t[1])

       if not isPlayer(tid) then
           doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] Player ' .. param .. ' not found.')
           return true
       end

       if not t[2] and isPlayer(tid) then  
           if words == '/hail' then
               rep.add(tid, 5, TEXTCOLOR_TEAL)
               doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] You added +5 rep points to ' .. getPlayerName(tid) .. ', and now ' .. rep.getArticle(tid, false) .. ' has ' .. rep.getPoints(tid) .. ' points.')
               return true
           end

           if words == '/fuck' then
               rep.remove(tid, 5, TEXTCOLOR_RED)
               doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] You removed -5 rep points to ' .. getPlayerName(tid) .. ', and now ' .. rep.getArticle(tid, false) .. ' has ' .. rep.getPoints(tid) .. ' points.')
               return true
           end
       end

       if t[2] and isInArray({'/set','/hail','fuck'}, words) then
           if not tonumber(t[2]) then
               doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] Reputation amount is invalid.')
			return true
           end                                    
       end

       if words == '/hail' then
           rep.add(tid, t[2], TEXTCOLOR_TEAL)
           doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] You added ' .. t[2] .. ' rep points to ' .. getPlayerName(tid) .. ', and now ' .. rep.getArticle(tid, false) .. ' has ' .. rep.getPoints(tid) .. ' points.')
		return true
       end

       if words == '/fuck' then
           rep.remove(tid, t[2], TEXTCOLOR_RED)
           doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] You removed ' .. t[2] .. ' rep points to ' .. getPlayerName(tid) .. ', and now ' .. rep.getArticle(tid, false) .. ' has ' .. rep.getPoints(tid) .. ' points.')
		return true
       end

       if t[2] and words == '/set' then
           rep.set(tid, t[2])
           doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] You have set ' .. getPlayerName(tid) .. '\'s points to ' .. rep.getPoints(tid))
       else
           doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] Absolute reputation amount not specified.')
		return true
       end

       if not t[2] then
           doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, '[REP_SYSTEM] Absolute reputation amount not specified.')
		return true
       end    
   return true]]>
</talkaction>

<talkaction words="!rep" event="buffer"><![CDATA[
   domodlib('repSystem')
if exhaustion.check(cid, rep.exhaust) then
	doPlayerSendCancel(cid, 'You can\'t use this command yet['..exhaustion.get(cid, rep.exhaust)..'].')
	return true
else
	exhaustion.set(cid, rep.exhaust, rep.exhaustion)
end

if param ~= '' then
	local str, value, name, result = '', '',' ', 0, nil
	if isInArray({'hero','pos','1','+'}, param) then
		str,value,name = '[#]-[Name]-[Points]-[Rank]\n--[Positive Reputation Highscores]--\n','rep','name'
		result = db.getResult('SELECT `name`, `rep` FROM `players` WHERE `rep` > 0 AND `name` NOT LIKE "%Sample" AND `name`!= "Account Manager" AND `deleted` = 0 AND `group_id` = 1 ORDER BY `rep` DESC LIMIT 10;')
	elseif isInArray({'evil','neg','2','-'}, param) then
		str,value,name = '[#]-[Name]-[Points]-[Rank]\n--[Negative Reputation Highscores]--\n','rep','name'
		result = db.getResult('SELECT `name`, `rep` FROM `players` WHERE `rep` < 0 AND `name` NOT LIKE "%Sample" AND `name`!= "Account Manager" AND `deleted` = 0 AND `group_id` = 1 ORDER BY `rep` ASC LIMIT 10;')
	else
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Unknown parameter, use only +, -, 1, 2.')
		return true
	end

	if isInArray({-1,nil,false,''},result:getID()) then
		doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'No results were found.')
		return true
	end
	local i = 1
	while true do
		str = str .. '\n ' .. i .. '. ' .. result:getDataString('name') .. ' - [' .. result:getDataInt(value) .. '] - ' .. rep.getRank(result:getDataInt(value))
		i = i + 1
		if not(result:next()) then
			break
		end
	end
	result:free()
	doPlayerPopupFYI(cid, str)
	return true
elseif param == '' then
	local points, action, name = rep.getPoints(cid), false, getPlayerNameByGUID(getCreatureStorage(cid, rep.lastName), false, false)
	doPlayerSendTextMessage(cid, 27, 'You have '.. rep.format(points) ..' reputation points. You have ' .. getCreatureStorage(cid, rep.opinion) .. ' opinion points and you will gain one '.. (getCreatureStorage(cid, rep.opinion) > 0 and 'more ' or '') ..'in '.. rep.interval - getCreatureStorage(cid, rep.online) ..' minutes.'.. (rep.power and ' Your Rep Power is ' .. rep.getPower(points) ..'.' or '')..(name ~= nil and ' You last reputed ' .. name .. '.' or ''))
	if points > 4999 then --female rep+++ queen outfit
		disguise, text, action = getPlayerSex(cid) == 0 and 331 or 332, getPlayerSex(cid) == 0 and 'Queen!!' or 'King!!', true
	elseif points > 1999 then --rep++ cm outfit
		disguise, text, action = 73, 'Hero!!', true
	elseif points > 1499 then --rep+ hero outfit
		disguise, text, action = 63, 'Acclaimed!!', true
	elseif points < -4999 then --rep*** devil outfit
		disguise, text, action = 334, 'P.O.!', true
	elseif points < -1999  then --rep** pig outfit
		disguise, text, action = 306, 'Evil!!', true
	elseif points < -1499 then --rep* orc outfit
		disguise, text, action = 5, "Slayer!!", true  
	end

	if action and getCreatureOutfit(cid).lookType ~= disguise then
		doSetCreatureOutfit(cid, {lookType = disguise}, -1)
		doSendAnimatedText(getThingPos(cid), text, math.random(255))
		return true
	end
end
return true]]>
</talkaction>

<talkaction words="!hail;!fuck" event="buffer"><![CDATA[
   domodlib('repSystem')
   if param == '' then
	doPlayerSendCancel(cid, 'Command requires a player\'s name.')
	return true
   end

   local target = getPlayerByNameWildcard(param)

   if not isPlayer(target) then
	doPlayerSendCancel(cid, 'That player does not exist or is offline.')
	return true
   end

   if getPlayerLevel(cid) < rep.minLevel then
	doPlayerSendCancel(cid,'You may repute from level ' .. rep.minLevel ..' onwards.')
	return true
   end

   if getPlayerIp(cid) == getPlayerIp(target) then
       doPlayerSendCancel(cid, 'You may not repute neither yourself nor anyone in your IP.')  
	return true
   end

if getPlayerGUID(target) == getCreatureStorage(cid, rep.lastName) then
       doPlayerSendCancel(cid, 'You may not repute that player two times in a row.')  
	return true
   end

   if getCreatureStorage(cid, rep.opinion) < rep.required then
	doPlayerSendCancel(cid, 'You do not have enough opinion points to repute.')  
	return true
   end

   if words == '!hail' then
       doCreatureSetStorage(cid, rep.lastName, getPlayerGUID(target))
	doCreatureSetStorage(cid, rep.opinion, getCreatureStorage(cid, rep.opinion)-rep.required)
       doPlayerSendCancel(cid, 'You have just reputed ' .. getCreatureName(target) .. '. You have ' .. getCreatureStorage(cid, rep.opinion) .. ' opinion points left.')
	rep.add(target, rep.power and rep.getPower(rep.getPoints(cid)) or 5, TEXTCOLOR_LIGHTBLUE)
   elseif words == '!fuck' then
       doCreatureSetStorage(cid, rep.lastName, getPlayerGUID(target))
	doCreatureSetStorage(cid, rep.opinion, getCreatureStorage(cid, rep.opinion)-rep.required)
       doPlayerSendCancel(cid, 'You have just reputed ' .. getCreatureName(target) .. '. You have ' .. getCreatureStorage(cid, rep.opinion) .. ' opinion points left.')
	rep.remove(target, rep.power and rep.getPower(rep.getPoints(cid)) or 5, TEXTCOLOR_RED)
   end
return true
]]></talkaction>
</mod>

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...