📄 combatsct.lua
字号:
-- global flags/vars
DSCTPlayer = nil;
DSCT_NameRegistered = 0;
initCE_OK = false;
local fixfor_sw_stats = true;
currentclass = nil;
DSCT_LastHPPercent = 0;
DSCT_LastTargetHPPercent = 0;
DSCT_LastManaPercent = 0;
DSCT_EventRecord = nil;
DSCT_This = nil;
-- local constants
DSCT_Ani_Fix = {{0,0,1},{0,0,1},{0,0,1}};
DSCT_DIR3_LIST = {{0,0},{100,40},{100,-40},{-100,-40},{-100,40}};
DENNIE_cusMessLast = 1;
DENNIE_CUSMESS_TEXTSIZE = 18;
DENNIE_cusMess_posX = 0;
DENNIE_cusMess_posY = 180;
DENNIE_ani_posX = 0;
DENNIE_ani_posY = 0;
DSCT_HEX_LIST = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"}
SpellAlert_Mob_head = "";
SpellAlert_Spell_head = "";
DSCT_ROTATION_COS = 0;
DSCT_ROTATION_SIN = 0;
DSCT_MESS_TIMER = 4;
DSCT_MESS_FADETIMER = 3;
DSCT_MESS_ALPHAMAX = 1;
DSCT_ANI_SPEED = 1;
DSCT_ANI_TEXTSIZE = 20;
DSCT_ANI_ALPHAMAX = 1;
DSCT_ANI_PARAM1 = 1;
DSCT_ANI_PARAM2 = 1;
DSCT_ENTEXT = 1;
--Animation System variables
DSCT_LastBar = 1; -- Holds what the next avalible fontstring for the animation system is
arrAniData = {
["aniData1"] = {}, -- These are structures that define the animation data
["aniData2"] = {},
["aniData3"] = {},
["aniData4"] = {},
["aniData5"] = {},
["aniData6"] = {},
["aniData7"] = {},
["aniData8"] = {},
["aniData9"] = {},
["aniData10"] = {}
}
arrCusMessData = {
["cusMessData1"] = {}, -- These are structures that define the animation data
["cusMessData2"] = {},
["cusMessData3"] = {}
}
local default_config = {
["VERSION"] = DSCT_Version,
["ENABLED"] = 1,
["ANIMATIONSPEED"] = 1,
["TEXTSIZE"] = 22,
["MESSAGESIZE"] = 16,
["LOWHP"] = .4,
["LOWMANA"] = .4,
["SHOWHIT"] = 1,
["SHOWMISS"] = 0,
["SHOWDODGE"] = 0,
["SHOWPARRY"] = 0,
["SHOWBLOCK"] = 0,
["SHOWSPELL"] = 1,
["SHOWHEAL"] = 1,
["SHOWRESIST"] = 2,
["SHOWDEBUFF"] = 2,
["SHOWBUFF"] = 4,
["SHOWFADE"] = 4,
["SHOWABSORB"] = 2,
["SHOWLOWHP"] = 2,
["SHOWLOWMANA"] = 2,
["SHOWPOWER"] = 1,
["SHOWCOMBATIN"] = 2,
["SHOWCOMBATOUT"] = 2,
["SHOWCOMBOPOINTS"] = 3,
["SHOWHONOR_DSCT"] = 1,
["SHOWSPELLALERT"] = 4,
["SHOWEMOTE"] = 4,
["SHOWYELL"] = 4,
["SHOWSPELLCRIT"] = 0,
["SHOWDMGCRIT"] = 0,
["SHOWCUSTOM"] = 0,
["SHOWSPELLTIMER"] = 0,
["ALPHA"] = 1,
["SHOWSELF"] = 0,
["ANIMODE"] = 3,
["FONT"] = 1,
["MESSAGEFONT"] = 3,
["MESSAGETIMER"] = 4,
["MESSAGEFADETIMER"] = 3,
["FONTOUTLINE"] = 1,
["MESSAGEPOSX"] = 0,
["MESSAGEPOSY"] = 180,
["MESSFONTOUTLINE"] = 1,
["ANIPOSX"] = 0,
["ANIPOSY"] = 0,
["MESSAGEALPHA"] = 1,
["ANIC"] = 10,
["ROTATION"] = 0,
["DAMAGETYPE"] = 1,
["CUSTOMEVENT"] = 0,
["HEALERNAME"] = 1,
["ENTEXT"] = 0,
["SHORTALERT"] = 0,
["SHOWEXECUTE"] = 4,
["SHOWSA_BEGINCAST"] = 1,
["SHOWSA_CAST"] = 1,
["SHOWSA_GAIN"] = 1,
["ANIMODE_Param1"] = 1,
["ANIMODE_Param2"] = 1,
["ANIMODE_ParamList"] = {[0]={1,1},[1]={1,1},[2]={1,1},[3]={1,1},[4]={1,1},[5]={1,1},[6]={1,1}};
["COLORS"] = {
["SHOWHIT"] = { b = 0,g = 0,r = 1,},
["SHOWMISS"] = {b = 0.8,g = 0.5,r = 0,},
["SHOWDODGE"] = {
b = 0.8,
g = 0.5,
r = 0,
},
["SHOWPARRY"] = {
b = 0.8,
g = 0.5,
r = 0,
},
["SHOWBLOCK"] = {
b = 0.8,
g = 0.5,
r = 0,
},
["SHOWRESIST"] = {
b = 0.780392,
g = 0.388235,
r = 0.905882,
},
["SHOWABSORB"] = {
b = 0,
g = 0.85,
r = 1,
},
["SHOWCOMBATIN"] = {
b = 0,
g = 0.7,
r = 1,
},
["SHOWCOMBATOUT"] = {
b = 0,
g = 1,
r = 0,
},
["SHOWSPELLCRIT"] = {
b = 0,
g = 1,
r = 1,
},
["SHOWLOWHP"] = {
b = 0.5,
g = 0.5,
r = 1,
},
["SHOWLOWMANA"] = {
b = 1,
g = 0.5,
r = 0.5,
},
["SHOWDMGCRIT"] = {
b = 1,
g = 1,
r = 1,
},
["SHOWSPELL"] = {
b = 1,
g = 0,
r = 1,
},
["SHOWHEAL"] = {
b = 0,
g = 1,
r = 0,
},
["SHOWDEBUFF"] = {r = 1.0, g = 0.17, b = 0.0},
["SHOWBUFF"] = {r = 0, g = 1.0, b = 0},
["SHOWFADE"] = {r = 1.0, g = 0.5, b = 0.0},
["SHOWPOWER"] = {r = 1.0, g = 1.0, b = 0.0},
["SHOWCOMBOPOINTS"] = {r = 0.0, g = 1.0, b = 0.0},
["SHOWHONOR_DSCT"] = {r = 1, g = 1, b = 0.0},
["SHOWEMOTE"] = {r = 1.0, g = 0.5, b = 0.0},
["SHOWYELL"] = {r = 1.0, g = 0.5, b = 0.0},
["SHOWCUSTOM"] = {r = 1.0, g = 1.0, b = 0.0},
["SHOWSPELLALERT"] = {r = 1.0, g = 1.0, b = 1.0},
["SPELLALERT_MOB_COLOR"] = {r = 0.47, g = 1, b = 0.57},
["SPELLALERT_SPELL_COLOR"] = {r = 1, g = 0.42, b = 0.32},
["SHOWEXECUTE"] = {r = 1, g = 1, b = 0},
}
};
local EVENT_LIST = {
["SHOWHIT"] = {"UNIT_COMBAT"},
["SHOWMISS"] = {"UNIT_COMBAT"},
["SHOWDODGE"] = {"UNIT_COMBAT"},
["SHOWPARRY"] = {"UNIT_COMBAT"},
["SHOWBLOCK"] = {"UNIT_COMBAT","CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS","CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS"},
["SHOWRESIST"] = {"UNIT_COMBAT","UNIT_SPELLMISS"},
["SHOWABSORB"] = {"UNIT_COMBAT","CHAT_MSG_COMBAT_CREATURE_VS_SELF_MISSES","CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES",
"CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS","CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS"},
["SHOWSPELLCRIT"] = {"CHAT_MSG_SPELL_SELF_DAMAGE"},
["SHOWLOWHP"] = {"UNIT_HEALTH"},
["SHOWLOWMANA"] = {"UNIT_MANA"},
["SHOWDMGCRIT"] = {"CHAT_MSG_COMBAT_SELF_HITS"},
["SHOWSPELL"] = {"UNIT_COMBAT"},
["SHOWHEAL"] = {"CHAT_MSG_SPELL_SELF_BUFF","CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS",
"CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF","CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS"},
["SHOWDEBUFF"] = {"CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE"},
["SHOWBUFF"] = {"CHAT_MSG_SPELL_SELF_BUFF","CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS"},
["SHOWFADE"] = {"CHAT_MSG_SPELL_AURA_GONE_SELF"},
["SHOWPOWER"] = {"UNIT_COMBAT","CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE","CHAT_MSG_SPELL_SELF_BUFF","CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS"},
["SHOWCOMBOPOINTS"] = {"PLAYER_COMBO_POINTS"},
["SHOWHONOR_DSCT"] = {"CHAT_MSG_COMBAT_HONOR_GAIN"},
["SHOWEMOTE"] = {"CHAT_MSG_MONSTER_EMOTE"},
["SHOWYELL"] = {"CHAT_MSG_MONSTER_YELL"},
["SHOWSPELLALERT"] = {"CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE","CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF",
"CHAT_MSG_SPELL_CREATURE_VS_CREATURE_BUFF","CHAT_MSG_SPELL_CREATURE_VS_CREATURE_DAMAGE",
"CHAT_MSG_SPELL_PERIODIC_CREATURE_BUFFS","CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_BUFFS",
"CHAT_MSG_SPELL_SELF_BUFF","CHAT_MSG_SPELL_SELF_DAMAGE","CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS",
"CHAT_MSG_SPELL_AURA_GONE_SELF","CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE",
"CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE"},
["CUSTOMEVENT"] = {"CHAT_MSG_MONSTER_YELL","CHAT_MSG_SPELL_SELF_BUFF","CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS",
"CHAT_MSG_COMBAT_SELF_HITS","CHAT_MSG_COMBAT_SELF_MISSES",
"CHAT_MSG_SPELL_SELF_DAMAGE","CHAT_MSG_SPELL_AURA_GONE_SELF",
"CHAT_MSG_SPELL_PERIODIC_CREATURE_DAMAGE","CHAT_MSG_SPELL_PERIODIC_HOSTILEPLAYER_DAMAGE",
"CHAT_MSG_SPELL_DAMAGESHIELDS_ON_SELF","CHAT_MSG_SPELL_AURA_GONE_OTHER",
"CHAT_MSG_SPELL_CREATURE_VS_SELF_DAMAGE","CHAT_MSG_COMBAT_CREATURE_VS_SELF_HITS",
"CHAT_MSG_SPELL_PERIODIC_SELF_DAMAGE","CHAT_MSG_SPELL_HOSTILEPLAYER_DAMAGE",
"CHAT_MSG_SPELL_BREAK_AURA","CHAT_MSG_COMBAT_CREATURE_VS_SELF_MISSES",
"CHAT_MSG_COMBAT_HOSTILEPLAYER_HITS","CHAT_MSG_COMBAT_HOSTILEPLAYER_MISSES"},
["SHOWEXECUTE"] = {"UNIT_HEALTH","PLAYER_TARGET_CHANGED"},
["HEALERNAME"] = {"CHAT_MSG_SPELL_HOSTILEPLAYER_BUFF"},
};
function DSCT_Debug(msg) DEFAULT_CHAT_FRAME:AddMessage(msg);end
--Called when its loaded
function DSCT_OnLoad()
-- Register Startup Events
this:RegisterEvent("PLAYER_ENTERING_WORLD");
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("ADDON_LOADED");
end
-- Show the Option Menu
function DSCT_showMenu()
if DSCTOptions then
PlaySound("igMainMenuOpen");
ShowUIPanel(DSCTOptions);
DSCT_openPreView();
DSCTOptions_HideAll();
DSCTOptions_ShowEnevt();
else
DSCT_Debug("None Menu");
end
end
--Hide the Option Menu
function DSCT_hideMenu()
if DSCTOptions then
PlaySound("igMainMenuClose");
HideUIPanel(DSCTOptions);
DSCTOptions_HideAll();
DSCT_closePreView();
DSCT_RefreshStaticVar();
DSCT_aniInit();--reload with Current Config
DSCT_cusMessInit();
end
end
--Get a clean config
function DSCT_FreshVar()
DSCT_NEWCONFIG = {};
end
function DSCT_RegisterEvent(event)
if (DSCT_EventRecord[event]) then
if DSCT_EventRecord[event] ~= 1 then
DSCT_This:RegisterEvent(event);
DSCT_EventRecord[event] = 1;
end
else
DSCT_This:RegisterEvent(event);
DSCT_EventRecord[event] = 1;
end
end
function DSCT_UnRegisterEvent(event)
DSCT_This:UnregisterEvent(event);
DSCT_EventRecord[event] = 0;
end
function DSCT_UnRefreshAllEvent()
for keyA, valueA in EVENT_LIST do
for keyB ,valueB in EVENT_LIST[keyA] do
DSCT_UnRegisterEvent(valueB);
end
end
end
function DSCT_RefreshAllEvent()
for keyA, valueA in EVENT_LIST do
if DSCT_Get(keyA) ~= 0 then
if keyA ~= "SHOWSPELLALERT" then
for keyB ,valueB in EVENT_LIST[keyA] do
DSCT_RegisterEvent(valueB);
end
else
if DSCT_SP_OnEvent then
for keyB ,valueB in EVENT_LIST[keyA] do
DSCT_RegisterEvent(valueB);
end
end
end
end
end
end
function DSCT_UnRegisterEventGroup(name)
if EVENT_LIST[name] then
for keyB ,valueB in EVENT_LIST[name] do
DSCT_UnRegisterEvent(valueB);
end
end
end
function DSCT_RegisterEventGroup(name)
if EVENT_LIST[name] then
for keyB ,valueB in EVENT_LIST[name] do
DSCT_RegisterEvent(valueB);
end
end
end
function DSCT_AllSearch_Filter()
if fixfor_sw_stats == false then return;end
DSCT_DEBUFF_NAME_SEARCH = DSCTD_Filter(AURAADDEDSELFHARMFUL);
DSCT_YOU_GAIN_SEARCH = DSCTD_Filter(AURAADDEDSELFHELPFUL);
DSCT_FADE_SEARCH = DSCTD_Filter(AURAREMOVEDSELF);
DSCT_YOUCRIT_SEARCH = DSCTD_Filter(SPELLLOGCRITSCHOOLSELFOTHER);
DSCT_YOUCRIT_SEARCH2 = DSCTD_Filter(SPELLLOGCRITSELFOTHER);
DSCT_YOUCRIT_SEARCH3 = DSCTD_Filter(COMBATHITCRITSELFOTHER);
DSCT_HEAL_SEARCH1 = DSCTD_Filter(HEALEDOTHERSELF);
DSCT_HEAL_SEARCH2 = DSCTD_Filter(HEALEDSELFSELF);
DSCT_AURAHEAL_SEARCH1 = DSCTD_Filter(PERIODICAURAHEALOTHERSELF);
DSCT_AURAHEAL_SEARCH2 = DSCTD_Filter(PERIODICAURAHEALSELFSELF);
DSCT_CRITHEAL_SEARCH1 = DSCTD_Filter(HEALEDCRITOTHERSELF);
DSCT_CRITHEAL_SEARCH2 = DSCTD_Filter(HEALEDCRITSELFSELF);
DSCT_SA_CASTS_PLY_VS_PLY = DSCTD_Filter(SPELLCASTGOOTHERTARGETTED);
DSCT_SA_FADE_BUFF = DSCTD_Filter(AURAREMOVEDOTHER);
DSCT_ABSORB_AMOUNT_SEARCH1 = DSCTD_Filter(VSABSORBOTHERSELF);
DSCT_ABSORB_AMOUNT_SEARCH2 = DSCTD_Filter(SPELLLOGABSORBOTHERSELF);
DSCT_YOU_GAIN_POWER_SEARCH1 = DSCTD_Filter(SPELLPOWERLEECHSELFOTHER);--spell,mob,virnum,virname,num,name
DSCT_YOU_GAIN_POWER_SEARCH2 = DSCTD_Filter(POWERGAINSELFSELF);--mob,num,name
DSCT_YOU_GAIN_POWER_SEARCH3 = DSCTD_Filter(POWERGAINOTHERSELF);--mob,spell,num,name
DSCT_SA_BEGIN_CAST[1] = DSCTD_Filter(SPELLCASTOTHERSTART);
DSCT_SA_CASTS_TOTEM[1] = DSCTD_Filter(SPELLCASTGOOTHER);
DSCT_SA_GAIN_BUFF[1] = DSCTD_Filter(AURAADDEDOTHERHELPFUL);
DSCT_SAEX_PERFORMOTHERSTART[1] = DSCTD_Filter(SPELLPERFORMOTHERSTART);
DSCT_SAEX_PERFORMGOOTHER[1] = DSCTD_Filter(SPELLPERFORMGOOTHER);
end
--Set the global player config
function DSCT_Initialize()
if (DSCT_NameRegistered == 1) then return;end
local playerName = UnitName("player");
if DSCT_Support_NewFont then DSCT_Support_NewFont();end
currentclass = UnitClass("player");
DSCT_This = this;
DSCT_EventRecord = {};
-- Add Slash Commands
SlashCmdList["DSCT"] = function(msg) DSCT_Cmd(msg); end
SLASH_DSCT1 = "/sct";
SlashCmdList["DSCTMENU"] = DSCT_showMenu;
SLASH_DSCTMENU1 = "/sctmenu";
-- Add my options frame to the global UI panel list
UIPanelWindows["DSCTOptions"] = {area = "center", pushable = 0};
DSCT_RegisterEvent("PLAYER_REGEN_ENABLED");
DSCT_RegisterEvent("PLAYER_REGEN_DISABLED");
DSCT_RegisterEvent("PLAYER_CONTROL_LOST");
if ( DSCT_NEWCONFIG == nil) then DSCT_FreshVar();end
DSCTPlayer = DSCT_Config_GetPlayer();
DSCT_RefreshStaticVar();
DSCT_aniInit();--reload with Current Config
DSCT_cusMessInit();
DSCT_RefreshAllEvent();
DSCT_InitCustomEvent();
DSCT_AllSearch_Filter();
DSCT_NameRegistered = 1;
end
function DSCT_RefreshStaticVar()
local tmp = DSCT_nGetColor("SPELLALERT_MOB_COLOR");
SpellAlert_Mob_head = DSCT_ColorFlip(tmp.r,tmp.g,tmp.b);
tmp = DSCT_nGetColor("SPELLALERT_SPELL_COLOR");
SpellAlert_Spell_head = DSCT_ColorFlip(tmp.r,tmp.g,tmp.b);
DSCT_ROTATION_SIN = sin(360 - DSCT_Get("ROTATION"));
DSCT_ROTATION_COS = cos(360 - DSCT_Get("ROTATION"));
DSCT_MESS_TIMER = DSCT_Get("MESSAGETIMER");
DSCT_MESS_FADETIMER = DSCT_Get("MESSAGEFADETIMER");
DSCT_MESS_ALPHAMAX = DSCT_Get("MESSAGEALPHA");
DSCT_ANI_SPEED = DSCT_Get("ANIMATIONSPEED");
DSCT_ANI_TEXTSIZE = DSCT_Get("TEXTSIZE");
DSCT_ANI_ALPHAMAX = DSCT_Get("ALPHA");
DSCT_ENTEXT = DSCT_Get("ENTEXT") + 1;
DENNIE_cusMess_posX = DSCT_Get("MESSAGEPOSX");
DENNIE_cusMess_posY = DSCT_Get("MESSAGEPOSY");
DENNIE_ani_posX = DSCT_Get("ANIPOSX");
DENNIE_ani_posY = DSCT_Get("ANIPOSY");
local paramList = DSCT_Get("ANIMODE_ParamList");
DSCT_ANI_PARAM1 = paramList[DSCT_Get("ANIMODE")][1];
DSCT_ANI_PARAM2 = paramList[DSCT_Get("ANIMODE")][2];
end
--Get or Create a config based on the current player
function DSCT_Config_GetPlayer()
if (DSCT_NEWCONFIG[UnitName("player").." of "..GetCVar("realmName")] == nil) then
--DSCT_Debug("NEWDSCT"..UnitName("player").." of "..GetCVar("realmName"));
DSCT_Config_NewPlayer(UnitName("player").." of "..GetCVar("realmName"));
end
return DSCT_NEWCONFIG[UnitName("player").." of "..GetCVar("realmName")];
end
--Set up a default config
function DSCT_Config_NewPlayer(PlayerName)
DSCT_NEWCONFIG[PlayerName] = DSCT_clone(default_config);
end
--Copy a whole table
function DSCT_clone(t) -- return a copy of the table t
local new = {}; -- create a new table
local i, v = next(t, nil); -- i is an index of t, v = t[i]
while i do
if type(v)=="table" then
v=DSCT_clone(v);
end
new[i] = v;
i, v = next(t, i); -- get next index
end
return new;
end
function DSCT_Load(config)
DSCT_NEWCONFIG[UnitName("player").." of "..GetCVar("realmName")] = nil;
DSCT_NEWCONFIG[UnitName("player").." of "..GetCVar("realmName")] = DSCT_clone(config);
DSCTPlayer = DSCT_Config_GetPlayer();
DSCT_aniInit();
DSCT_cusMessInit();
DSCT_RefreshAllEvent();
DSCT_RefreshStaticVar();
end
--Reset everything to default
function DSCT_Reset()
DSCT_Load(default_config);
DSCT_hideMenu();
DSCT_showMenu();
end
--Get a value from player config
function DSCT_Get(option)
if (DSCTPlayer ~= nil) and (DSCTPlayer[option]) then
return DSCTPlayer[option];
else
if default_config[option] then
return default_config[option];
else
return nil;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -