⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sheepwatch.lua

📁 时间太紧了
💻 LUA
📖 第 1 页 / 共 2 页
字号:
-- The idea of SheepWatch is orginally based on StunWatch by Vector.---- The actual version got a rewrite in all relevant parts by-- Andreas 'zapi' Broecking (Asmodean on Turalyon & Ania on Darksorrow)---- Credits:-- I hereby want to thank the authors of StunWatch, CastTime, MezHelper-- and CTRA for some hints I got from their codes. The first version of-- SheepWatch was released by Veighflo who resigned from developing it-- after version 1.5---- Version: 	11000.1-- Date:		2006-03-38---------------------------------------------------------- myAddOns support--------------------------------------------------------SheepWatchDetails = {	name = "SheepWatch",	version = "11000.1",	releaseDate = "March 28, 2006",	author = "zapi",	email = "wow@gzipped.org",	website = "http://www.curse-gaming.com/",	category = MYADDONS_CATEGORY_CLASS,	optionsframe = "SheepWatchConfig"};SheepWatchHelp = {};---------------------------------------------------------- Initialization functions--------------------------------------------------------function SheepWatch_OnLoad()	SheepWatch_Initialize();	SheepWatch_EventRegister();endfunction SheepWatch_Initialize()	SLASH_SHEEPWATCH1 = "/sheepwatch";	SLASH_SHEEPWATCH2 = "/sheep";	SLASH_SHEEPWATCH3 = "/sw";	SlashCmdList["SHEEPWATCH"] = function(msg)		SheepWatch_SlashCommandHandler(msg);	endend---------------------------------------------------------- Register the necessary UI API events.--------------------------------------------------------function SheepWatch_EventRegister()--	this:RegisterEvent("ADDON_LOADED");	this:RegisterEvent("PLAYER_LOGIN");	this:RegisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE");--	this:RegisterEvent("UNIT_AURA");	this:RegisterEvent("CHAT_MSG_SPELL_BREAK_AURA");	this:RegisterEvent("CHAT_MSG_SPELL_AURA_GONE_OTHER");--	this:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE");--	this:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE");--	this:RegisterEvent("CHAT_MSG_COMBAT_HOSTILE_DEATH");	this:RegisterEvent("PLAYER_REGEN_ENABLED");	this:RegisterEvent("PLAYER_DEAD");	this:RegisterEvent("SPELLCAST_START");	this:RegisterEvent("SPELLCAST_STOP");	this:RegisterEvent("SPELLCAST_FAILED");	this:RegisterEvent("SPELLCAST_INTERUPTED");	this:RegisterEvent("PLAYER_TARGET_CHANGED");	this:RegisterEvent("VARIABLES_LOADED");end---------------------------------------------------------- DEBUG Logging--------------------------------------------------------function SheepWatch_DebugLog(message)	message = GetTime() .. " " .. message;	DEFAULT_CHAT_FRAME:AddMessage("SW LOG: " .. message);	local nn = table.getn(SheepWatch_Log);	SheepWatch_Log[nn+1] = message;end---------------------------------------------------------- Handler for /sheepwatch--------------------------------------------------------function SheepWatch_SlashCommandHandler(msg)	local a, b, command = string.find( msg, "(%w+)" );	if( command == nil ) then		SheepWatchConfig:Show();		return;	else		command = string.lower( msg );	end	if( command == "unlock" ) then		SHEEPWATCH.STATUS = 3;		SheepWatch:Show();		SheepWatchCounterText:SetText( "00.0s" );		SheepWatchCounterText:Show();		DEFAULT_CHAT_FRAME:AddMessage(SHEEPWATCH_TEXT_UNLOCKED);	elseif( command == "lock" ) then		SHEEPWATCH.STATUS = 1;		SheepWatch:Hide();		SheepWatchCounterText:Hide();		DEFAULT_CHAT_FRAME:AddMessage(SHEEPWATCH_TEXT_LOCKED);	elseif( command == "clear" ) then		local pn = UnitName("player");		if(pn ~= nil and pn ~= UNKNOWNBEING and pn ~= UKNOWNBEING and pn ~= UNKNOWNOBJECT) then			SheepWatch_ClearProfile();		else			DEFAULT_CHAT_FRAME:AddMessage("SheepWatch: " .. SHEEPWATCH_TEXT_WORLD_NOT_LOADED);		end	elseif( command == "resetpos" ) then		SHEEPWATCH.ALPHA = 1;		SheepWatch_Settings.alpha = SHEEPWATCH.ALPHA;		SheepWatch:ClearAllPoints();		SheepWatch:SetPoint("CENTER", 0, 120);		DEFAULT_CHAT_FRAME:AddMessage( SHEEPWATCH_TEXT_RESETPOS );	elseif( command == "status" ) then		SheepWatch_PrintStatus();	elseif( command == "debug" ) then		SHEEPWATCH.DEBUG = true;		DEFAULT_CHAT_FRAME:AddMessage("SheepWatch: Debugging enabled for this session.");	else		SheepWatchConfig:Show();	endend---------------------------------------------------------- Event handling-- (Event handling rewritten and inspired by StunWatch)--------------------------------------------------------function SheepWatch_OnEvent(event)	-- Don't do anything if SheepWatch isn't enabled	if( SHEEPWATCH.STATUS == 0 and event ~= "PLAYER_LOGIN") then		return	end	-- DEBUG	--DEFAULT_CHAT_FRAME:AddMessage("SheepWatch: Event "..event);	--SheepWatch_EventHandler[event](arg1, arg2, arg3, arg4, arg5);	SheepWatch_EventHandler[event](arg1, arg2);endSheepWatch_EventHandler = {}SheepWatch_EventHandler["PLAYER_LOGIN"] = function()		-- Register in myAddons		if(myAddOnsFrame_Register) then			myAddOnsFrame_Register(SheepWatchDetails, SheepWatchHelp);		end		-- Load the saved config		SheepWatch_LoadVariables();endSheepWatch_EventHandler["VARIABLES_LOADED"] = function()	SW_Register();endSheepWatch_EventHandler["UNIT_AURA"] = function()	DEFAULT_CHAT_FRAME:AddMessage("UNIT_AURA triggered. Arg1: "..arg1);endSheepWatch_EventHandler["CHAT_MSG_SPELL_SELF_DAMAGE"] = function()		local _, _, spell, mobname = string.find(arg1, SHEEPWATCH_EVENT_CAST);		if ( (spell ~= nil) and (mobname ~= nil) and (not string.find(spell, SHEEPWATCH_SPELL)) and string.find(mobname, SHEEPWATCH_SPELL) ) then			local temp = mobname;			mobname = spell;			spell = temp;		end		if( (mobname ~= nil and string.find(spell, SHEEPWATCH_SPELL) ) and ( UnitName("target") == mobname or ( SHEEPWATCH_TARGETCHANGED and SHEEPWATCH_POLYCASTED  ) ) ) then			SHEEPWATCH_TARGETCHANGED = nil;			SHEEPWATCH_POLYCASTED = nil;			-- DEBUG			if( SHEEPWATCH.DEBUG ) then		 		DEFAULT_CHAT_FRAME:AddMessage("SheepWatch Debug:\nEvent CHAT_MSG_SPELL_SELF_DAMAGE triggered\nArgument: " .. arg1);		 		SheepWatch_DebugLog("Event CHAT_MSG_SPELL_SELF_DAMAGE triggered. Argument: " .. arg1);			end			-- END DEBUG		  if( SHEEPWATCH.VERBOSE ) then		   	DEFAULT_CHAT_FRAME:AddMessage("SheepWatch: 你对" .. mobname .. SHEEPWATCH_TEXT_ANNOUNCE_CAST .. SHEEPWATCH_SPELL .. "(" .. SHEEPWATCH.RANK .. ")。");		  end		  if( SHEEPWATCH.ANNOUNCE and SHEEPWATCH.ANNOUNCE_TIME_ID == 2) then		  	SheepWatch_SendAnnounce(mobname, UnitLevel("target"));		  end			if( GetTime() > SHEEPWATCH.TIMER_END + 15 or mobname ~= SHEEPWATCH.MOBNAME ) then				SHEEPWATCH.DIMINISH = 1;				if( SHEEPWATCH.DEBUG ) then					DEFAULT_CHAT_FRAME:AddMessage("SheepWatch Debug: Diminish set to: " .. SHEEPWATCH.DIMINISH);				end			end			SHEEPWATCH.MOBNAME = mobname;			SHEEPWATCH.PLAYER = UnitIsPlayer("target");			SHEEPWATCH.ACTIVE = 1;			if( SHEEPWATCH.STATUS == 1 ) then				SheepWatch:Show();			else				SheepWatch_OnShow();			end		endendSheepWatch_EventHandler["CHAT_MSG_SPELL_BREAK_AURA"] = function()		local currentTime = GetTime();		local  _, _, mobname, spell = string.find(arg1, SHEEPWATCH_EVENT_BREAK);		if( (mobname ~= nil and string.find(spell, SHEEPWATCH_SPELL) ) and mobname == SHEEPWATCH.MOBNAME ) then			if ( SHEEPWATCH_TARGETCHANGED and SHEEPWATCH_POLYCASTED ) then				SHEEPWATCH_TARGETCHANGED = nil;				SHEEPWATCH_POLYCASTED = nil;				return			end			-- DEBUG			if( SHEEPWATCH.DEBUG ) then		 		DEFAULT_CHAT_FRAME:AddMessage("SheepWatch Debug:\nEvent CHAT_MSG_SPELL_BREAK_AURA triggered\nArgument: " .. arg1);			end			-- END DEBUG		  if( SHEEPWATCH.VERBOSE ) then		  	DEFAULT_CHAT_FRAME:AddMessage("SheepWatch: " .. mobname .. "的" .. SHEEPWATCH_TEXT_ANNOUNCE_BREAK);		  end			SHEEPWATCH.TIMER_END = currentTime;			if( SHEEPWATCH.PLAYER ) then				SHEEPWATCH.DIMINISH = SHEEPWATCH.DIMINISH * 2;				if( SHEEPWATCH.DEBUG ) then					DEFAULT_CHAT_FRAME:AddMessage("SheepWatch Debug: Diminish set to: " .. SHEEPWATCH.DIMINISH);				end			end			if( SHEEPWATCH.ACTIVE == 1 ) then				SHEEPWATCH.ACTIVE = 0;			end		endendSheepWatch_EventHandler["CHAT_MSG_SPELL_AURA_GONE_OTHER"] = function()		local currentTime = GetTime();		local  _, spell, mobname = string.find(arg1, SHEEPWATCH_EVENT_FADE);		if( (mobname ~= nil and string.find(spell, SHEEPWATCH_SPELL) ) and mobname == SHEEPWATCH.MOBNAME ) then			-- DEBUG			if( SHEEPWATCH.DEBUG ) then		 		DEFAULT_CHAT_FRAME:AddMessage("SheepWatch Debug:\nEvent CHAT_MSG_SPELL_AURA_GONE_OTHER triggered\nArgument: " .. arg1);			end			-- END DEBUG		  if( SHEEPWATCH.VERBOSE ) then		  	DEFAULT_CHAT_FRAME:AddMessage("SheepWatch: " .. SHEEPWATCH_TEXT_ANNOUNCE_FADE .. mobname .. "身上消失了。");		  end		  SHEEPWATCH.TIMER_END = currentTime;		  if( SHEEPWATCH.PLAYER ) then				SHEEPWATCH.DIMINISH = SHEEPWATCH.DIMINISH * 2;				if( SHEEPWATCH.DEBUG ) then					DEFAULT_CHAT_FRAME:AddMessage("SheepWatch Debug: Diminish set to: " .. SHEEPWATCH.DIMINISH);				end			end			if( SHEEPWATCH.ACTIVE == 1 ) then				SHEEPWATCH.ACTIVE = 0;			end		endendSheepWatch_EventHandler["PLAYER_REGEN_ENABLED"] = function()		-- DEBUG		if( SHEEPWATCH.DEBUG ) then			DEFAULT_CHAT_FRAME:AddMessage("SheepWatch Debug:\nEvent PLAYER_REGEN_ENABLED triggered");		end		-- END DEBUG	  if( SHEEPWATCH.PLAYER and SHEEPWATCH.ACTIVE == 1 ) then			-- DEBUG			if( SHEEPWATCH.DEBUG ) then				DEFAULT_CHAT_FRAME:AddMessage("SheepWatch Debug: Target is PLAYER. Not resetting..");			end			-- END DEBUG			-- Returning, as we most likely didn't leave combat			return;		end		if( SHEEPWATCH.ACTIVE == 1 ) then			SHEEPWATCH.ACTIVE = 0;			SHEEPWATCH.TIMER_END = GetTime();		  if( SHEEPWATCH.VERBOSE ) then		  	DEFAULT_CHAT_FRAME:AddMessage( SHEEPWATCH_TEXT_ANNOUNCE_LEAVECOMBAT );		  end		endendSheepWatch_EventHandler["PLAYER_DEAD"] = function()		-- DEBUG		if( SHEEPWATCH.DEBUG ) then			DEFAULT_CHAT_FRAME:AddMessage("SheepWatch Debug:\nEvent PLAYER_DEAD triggered");		end		-- END DEBUG		if( SHEEPWATCH.ACTIVE == 1 ) then			SHEEPWATCH.ACTIVE = 0;			SHEEPWATCH.TIMER_END = GetTime();		  if( SHEEPWATCH.VERBOSE ) then		  	DEFAULT_CHAT_FRAME:AddMessage( SHEEPWATCH_TEXT_ANNOUNCE_LEAVECOMBAT );		  end		endendSheepWatch_EventHandler["SPELLCAST_START"] = function()		local spell = arg1;		if( SHEEPWATCH.DEBUG ) then			DEFAULT_CHAT_FRAME:AddMessage("SheepWatch Debug:\nEvent SPELLCAST_START triggered");			DEFAULT_CHAT_FRAME:AddMessage("Arg1: "..spell.." Arg2: "..arg2.."Spell: " .. SHEEPWATCH_SPELL );		end		if ( string.find(spell, SHEEPWATCH_SPELL) ) then			SHEEPWATCH_CASTING = true;			SHEEPWATCH_POLYCASTED = true;			SHEEPWATCH.SHEEPTYPE = spell;			if ( SHEEPWATCH.ANNOUNCE and SHEEPWATCH.ANNOUNCE_TIME_ID == 1 ) then				SheepWatch_SendAnnounce(UnitName("target"), UnitLevel("target"));			end		endendSheepWatch_EventHandler["PLAYER_TARGET_CHANGED"] = function()		SHEEPWATCH_TARGETCHANGED = true;endSheepWatch_EventHandler["SPELLCAST_STOP"] = function()		SHEEPWATCH_CASTING = nil;endSheepWatch_EventHandler["SPELLCAST_FAILED"] = SheepWatch_EventHandler["SPELLCAST_STOP"];SheepWatch_EventHandler["SPELLCAST_INTERRUPTED"] = SheepWatch_EventHandler["SPELLCAST_STOP"];---------------------------------------------------------- Shows the statusbar--------------------------------------------------------function SheepWatch_OnShow()	local isPlayer = ""	local Status = GetTime()	if( SHEEPWATCH.ACTIVE ~= 0 ) then		SHEEPWATCH.TIMER_START = Status;		if( SHEEPWATCH.PLAYER ) then			SHEEPWATCH.TIMER_END = SHEEPWATCH.TIMER_START + (SHEEPWATCH.PVPLENGTH / SHEEPWATCH.DIMINISH);		else			SHEEPWATCH.TIMER_END = SHEEPWATCH.TIMER_START + (SHEEPWATCH.LENGTH / SHEEPWATCH.DIMINISH);		end		if( SHEEPWATCH.DEBUG ) then			if ( SHEEPWATCH.PLAYER ) then isPlayer="Yes" else isPlayer="No" end			DEFAULT_CHAT_FRAME:AddMessage("SheepWatch Debug:\nPlayer: "..isPlayer.."\nStart: "..SHEEPWATCH.TIMER_START.."\nLength: "..SHEEPWATCH.LENGTH.."\nEnd: "..SHEEPWATCH.TIMER_END);		end	end	if( SHEEPWATCH.STATUS ~= 3 ) then		SHEEPWATCH.STATUS = 2;	end	SheepWatch:SetScale(UIParent:GetScale() * SHEEPWATCH.SCALE);	SheepWatch:SetAlpha( SHEEPWATCH.ALPHA );	SheepWatchFrameStatusBar:SetStatusBarColor(SheepWatch_Settings["barcolor"].r, SheepWatch_Settings["barcolor"].g, SheepWatch_Settings["barcolor"].b);	SheepWatchSpark:SetPoint("CENTER", "SheepWatchFrameStatusBar", "LEFT", 0, 0);	SheepWatchText:SetText( SHEEPWATCH.SHEEPTYPE );	if( SHEEPWATCH.COUNTER ) then		SheepWatchCounterText:Show();	endend---------------------------------------------------------- Update handler--------------------------------------------------------function SheepWatch_OnUpdate()	if( SHEEPWATCH.STATUS == 3 ) then		return;	end	local Status = GetTime();	local Elapsed = SHEEPWATCH.TIMER_END - Status;	if( SHEEPWATCH.DECIMALS ) then		decimalcut = 0;	else		decimalcut = 2;	end	local subto = 4 - decimalcut;	if (Elapsed < 10) then		subto = 3 - decimalcut;	end	local seconds = string.sub(math.max(Elapsed,0)+0.001, 1, subto);	if( SHEEPWATCH.ACTIVE > 0 and Status < SHEEPWATCH.TIMER_END ) then		SheepWatchFrameStatusBar:SetMinMaxValues(SHEEPWATCH.TIMER_START, SHEEPWATCH.TIMER_END);		if( SHEEPWATCH.COUNTER ) then			SheepWatchCounterText:SetText( seconds .. "s");		end		local sparkPosition = ((Status - SHEEPWATCH.TIMER_START) / (SHEEPWATCH.TIMER_END - SHEEPWATCH.TIMER_START)) * 195;		if( SHEEPWATCH.DIRECTION == 2 )then			sparkPosition = 195 - sparkPosition;			SheepWatchFrameStatusBar:SetValue(SHEEPWATCH.TIMER_START + SHEEPWATCH.TIMER_END - Status);		else			SheepWatchFrameStatusBar:SetValue(Status);		end		if( sparkPosition < 1 ) then			sparkPosition = 1;		end		SheepWatchSpark:SetPoint("CENTER", "SheepWatchFrameStatusBar", "LEFT", sparkPosition, 0);	elseif( this:GetAlpha() > 0 ) then		if( SHEEPWATCH.STATUS == 2 ) then			SHEEPWATCH.STATUS = 1;			SHEEPWATCH.ACTIVE = 0;			SheepWatchText:SetText("Timeout");		end		local alpha = this:GetAlpha() - SHEEPWATCH.ALPHA_STEP;		if( alpha > 0 ) then			this:SetAlpha(alpha);		else			this.fadeOut = nil;			this:Hide();			SheepWatchCounterText:Hide();		end	else		this:Hide();		SHEEPWATCH.STATUS = 1;		SHEEPWATCH.ACTIVE = 0;		SHEEPWATCH.MOBNAME = "";		SHEEPWATCH.PLAYER = nil;	end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -