PQR - Rotation Bot menu

Shout-Out

User Tag List

Page 30 of 779 FirstFirst ... 26272829303132333480130530 ... LastLast
Results 436 to 450 of 11681
  1. #436
    Devilsadvocate's Avatar Member
    Reputation
    70
    Join Date
    May 2008
    Posts
    254
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Ok, soon I will be releasing my Frost Death Knight Profile. I am an experienced Hard Mode Top 100 World Progression Death Knight and I have decided to code my knowledge behind the advanced mechanics to optimal DPS output on Death Knights in a raid setting.
    The following is an idea of what to expect:

    • Given that I have yet to find a DK Profile that properly utilizes Frost Strike for Runic Empowerment, I have optimised this ability for this.
    • Given that Howling Blast is being used under the wrong circumstances in every profile I have seen, I have optimised this abilities usage for optimal DPS.
    • Raise Dead has been optimised with more situations in which this ability should be used.
    • Considering the DPS increase given by using HoW in combat downtime for additional RP I have coded this to be used in this setting.
    • ERW has been coded for use appropriately to gain extra DPS and less in-combat downtime.

    More details will be laid out in the final release post.

    All the testing i have done with this profile has ranked me in the top 150 on WoL for 5 different fights in DS @ an equipped 384 ilvl. However, I am still not maximizing the full potential of my character because I am having a few difficulties in coding some of the more complex scenarios for ability priority. So I have a few questions that i hope our community can help me with.
    To start take a look at the following code:
    Code:
    local _,_,DeathRune1 = GetRuneCooldown(1)
    local _,_,DeathRune2 = GetRuneCooldown(2)
    local _,_,UnholyRune1 = GetRuneCooldown(3)
    local _,_,UnholyRune2 = GetRuneCooldown(4)
    local _,_,FrostRune1 = GetRuneCooldown(5)
    local _,_,FrostRune3 = GetRuneCooldown(6)
    First, what exactly does _,_, specify here?
    Second, are the local defines for the runes correct here? I know that ingame the order on the bar is DR, FR, UR. Just wondering if this example I found under another profile is correct or no and if not what is the proper setup?

    I may have more questions to follow depending on the responses I get. However, if there is an advanced reference guide for this program outside of the Wiki which doesn't tell me much, please share it.
    Last edited by Devilsadvocate; 05-18-2012 at 01:03 AM.
    I'm not going to be releasing anything for a while. I'm back on retail for new content.

    PQR - Rotation Bot
  2. #437
    Kinkeh's Avatar Established Member
    Reputation
    243
    Join Date
    Jan 2012
    Posts
    450
    Thanks G/R
    0/0
    Trade Feedback
    3 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Devilsadvocate View Post
    Ok, soon I will be releasing my Frost Death Knight Profile. I am an experienced Hard Mode Top 100 World Progression Death Knight and I have decided to code my knowledge behind the advanced mechanics to optimal DPS output on Death Knights in a raid setting.
    The following is an idea of what to expect:

    • Given that I have yet to find a DK Profile that properly utilizes Frost Strike for Runic Empowerment, I have optimised this ability for this.
    • Given that Howling Blast is being used under the wrong circumstances in every profile I have seen, I have optimised this abilities usage for optimal DPS.
    • Raise Dead has been optimised with more situations in which this ability should be used.
    • Considering the DPS increase given by using HoW in combat downtime for additional RP I have coded this to be used in this setting.
    • ERW has been coded for use appropriately to gain extra DPS and less in-combat downtime.

    More details will be laid out in the final release post.

    All the testing i have done with this profile has ranked me in the top 150 on WoL for 5 different fights in DS @ an equipped 384 ilvl. However, I am still not maximizing the full potential of my character because I am having a few difficulties in coding some of the more complex scenarios for ability priority. So I have a few questions that i hope our community can help me with.
    To start take a look at the following code:
    Code:
    local _,_,DeathRune1 = GetRuneCooldown(1)
    local _,_,DeathRune2 = GetRuneCooldown(2)
    local _,_,UnholyRune1 = GetRuneCooldown(3)
    local _,_,UnholyRune2 = GetRuneCooldown(4)
    local _,_,FrostRune1 = GetRuneCooldown(5)
    local _,_,FrostRune3 = GetRuneCooldown(6)
    First, what exactly does _,_, specify here?
    Second, are the local defines for the runes correct here? I know that ingame the order on the bar is DR, FR, UR. Just wondering if this example I found under another profile is correct or no and if not what is the proper setup?

    I may have more questions to follow depending on the responses I get. However, if there is an advanced reference guide for this program outside of the Wiki which doesn't tell me much, please share it.
    Is this going to be masterfrost? I just don't see a point in doing anything else in my honest opinion, I get haste frost has good single target but I just see masterfrost doing more, from personal experience.
    Last edited by Kinkeh; 05-18-2012 at 01:12 AM.

  3. #438
    Devilsadvocate's Avatar Member
    Reputation
    70
    Join Date
    May 2008
    Posts
    254
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    It will contain both Frost and Masterfrost, for the following settings:
    Raid
    Trash
    Heroic Dungeons
    LFR
    I'm not going to be releasing anything for a while. I'm back on retail for new content.

  4. #439
    Kinkeh's Avatar Established Member
    Reputation
    243
    Join Date
    Jan 2012
    Posts
    450
    Thanks G/R
    0/0
    Trade Feedback
    3 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Devilsadvocate View Post
    It will contain both Frost and Masterfrost, for the following settings:
    Raid
    Trash
    Heroic Dungeons
    LFR
    Alright I'll look over it when you release it, I play a ilvl 402 Masterfrost DK, haven't found a profile to beat the one I've been using yet ..I like to see new things :3.

  5. #440
    Devilsadvocate's Avatar Member
    Reputation
    70
    Join Date
    May 2008
    Posts
    254
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    which profile are you using if I may ask?
    I'm not going to be releasing anything for a while. I'm back on retail for new content.

  6. #441
    Kinkeh's Avatar Established Member
    Reputation
    243
    Join Date
    Jan 2012
    Posts
    450
    Thanks G/R
    0/0
    Trade Feedback
    3 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Devilsadvocate View Post
    which profile are you using if I may ask?
    Bbatato's profile, I don't even think he's active anymore tbh but it uses this rotation:
    Blood Tap if CD D rune > 2
    Outbreak if FF or BP =< 2
    Howling Blast if FF =< 2
    Plague Strike if BP =< 2
    Pillar of Frost if D or F (linked with Raise Dead)
    Obliterate if D >= F >= U
    Frost Strike if RP >= 120
    Obliterate if DD&FF or DD&UU or FF&UU
    Frost Strike if RP >= 110
    Howling Blast if Rime Proc
    Frost Strike if RP >= 100
    Obliterate if UU
    Obliterate if U + (second U rune 1sec remaining cd)
    Obliterate if KM proc
    Obliterate if RP >= 32 + Heroism active
    Howling Blast if RP < 32 + Heroism active
    Obliterate if RP >= 90 - No Hero
    Howling Blast if RP < 90 - No Hero
    Frost Strike if RP >= 32
    Empower Rune W. if All Runes on CD (>8sec)
    Horn of Winter if true

  7. #442
    js1974's Avatar Member
    Reputation
    27
    Join Date
    Jan 2008
    Posts
    199
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Ralphiuss View Post
    Made updates to my Ret Paladin Profile.

    Please try it out and let me know!

    http://pqr-ret.googlecode.com/svn/Data/Retribution.txt

    Please use the internal mass downloader within PQR to download files.
    Ralphiuss, After checking the code for your rotation I have a few suggestions.

    For Gloves and Trinket use I suggest this code.

    Code:
    -- Check Trinket Cooldown info
    local _, Cooldown, Ready = GetInventoryItemCooldown("player",10)
    
    
    -- Check Cooldown and Combat status
    if Cooldown == 0 and
       Ready == 1 and
       UnitChannelInfo("player") == nil and
       UnitAffectingCombat("player") ~= nil
    then
    
    
      UseInventoryItem(10) 
      return true
    
    
    end
    This is mainly because I've seen my gauntlets just fire for no apparent reason this makes sure that doesn't happen. Now the second thing with this rotation is you are using TV code like this.

    Code:
    local holyPower = UnitPower("player", 9)
    local divinePurpose = PQR_UnitBuffID("player", 86172)
    
    
    
    
    
    
    if holyPower >= 3 or divinePurpose ~= nil then
        return true
    end
    Because of DP Procs vs HoPo they should be split up so you can give one priority over the other. I would suggest breaking them up and using.

    Code:
    local divinePurpose = PQR_UnitBuffID("player", 86172)
    
    
    if divinePurpose ~= nil then
        return true
    end
    and

    Code:
    local holyPower = UnitPower("player", 9)
    
    
    if holyPower >= 3 then
        return true
    end
    This allows you to make sure a TV from DP is used before 3 HP TV and you can squeeze Exorcism procs before a TVHP as they should be used first. On top of that consecration in your rotation and divine plea are bad unless you have control over it. You don't want them to be used in a rotation you want them used when you have a gap in your rotation dead time with nothing to do. The only way I have been able to figure this out is a lot of calculations based on when your higher priority ability is coming off CD to avoid clashing with higher DPE abilities.

    For encounter code, I'm not sure about your guild but for me on Heroic I stay out for 2 Ultra hot phases so I have to have a way to avoid hitting that button. I'd suggest adding a skip key for that.

    Code:
    local altDown = IsAltKeyDown()
    local sDivineShield = UnitBuffID("player", 642)
    
    
    if altDown == nil then
        local spellHourOfTwilight = GetSpellInfo(109417)
        local channelSpell, _, _, _, _, endTime = UnitCastingInfo("boss1")
        if channelSpell ~= nil and channelSpell == spellHourOfTwilight then
            local finishTime = endTime/1000 - GetTime()
            if finishTime < 1 and sDivineShield == nil then
                return true
            end
        end
    end
    You have some code I grabbed, like the CD's code works better then a macro so I'm all down for that. Some good code I'm still trying to determine the Zealotry rotation and if I like that or just the logic I use to handle it. Your DPS is about 3K behind mine but 3K can be accounted for by DP procs or Gurthalak procs.

    Solid work either way just my $0.02 worth

    PS

    Add the encounters to your Zealotry rotation or you could end up dead for not pressing your button
    Last edited by js1974; 05-18-2012 at 03:50 AM. Reason: Adding more stuff of course....

  8. #443
    Devilsadvocate's Avatar Member
    Reputation
    70
    Join Date
    May 2008
    Posts
    254
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Ok seriously, where are you guys finding the varibles to get things working....

    Im not sure whats wrong but I can't get any abilities I code that are conditional to Runes to work at all for some reason.
    I use premade profiles with a few modifications and they work just fine, but when I make the slightest change to an ability thats conditional to Runes it won't work....

    For example:
    Frost Strike @ > 90 RP works
    Howling Blast @ < 90 RP etc works
    Obliterate if KM Procs
    Howling Blast if Rime Procs
    Using PoF on CD works
    Using Profession Abilities on CD works
    Refreshing Dieases works
    Raise Dead under the effects of certain buffs works
    Etc...

    But....
    Obliterate when Both DRs or Both FRs and URs are up will not
    Obliterate when Both URs are up or will be within 1s will not
    Etc...
    I'm not going to be releasing anything for a while. I'm back on retail for new content.

  9. #444
    Kinkeh's Avatar Established Member
    Reputation
    243
    Join Date
    Jan 2012
    Posts
    450
    Thanks G/R
    0/0
    Trade Feedback
    3 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Devilsadvocate View Post
    Ok seriously, where are you guys finding the varibles to get things working....

    Im not sure whats wrong but I can't get any abilities I code that are conditional to Runes to work at all for some reason.
    I use premade profiles with a few modifications and they work just fine, but when I make the slightest change to an ability thats conditional to Runes it won't work....

    For example:
    Frost Strike @ > 90 RP works
    Howling Blast @ < 90 RP etc works
    Obliterate if KM Procs
    Howling Blast if Rime Procs
    Using PoF on CD works
    Using Profession Abilities on CD works
    Refreshing Dieases works
    Raise Dead under the effects of certain buffs works
    Etc...

    But....
    Obliterate when Both DRs or Both FRs and URs are up will not
    Obliterate when Both URs are up or will be within 1s will not
    Etc...
    Code:
    local _,_,unholyrune1=GetRuneCooldown(3)
    local _,_,unholyrune2=GetRuneCooldown(4)
    local _,_,deathrune1=GetRuneCooldown(1)
    local _,_,deathrune2=GetRuneCooldown(2)
    local _,_,frostrune1=GetRuneCooldown(5)
    local _,_,frostrune2=GetRuneCooldown(6)
    
    if  unholyrune1 == true and unholyrune2 == true then
    	return true
    end
    Obliterate on 2 UH runes(including all 6 runes), work off that.

    Code:
    local t1,duration1,unholyrune1=GetRuneCooldown(3)
    local t2,duration2,unholyrune2=GetRuneCooldown(4)
    local t3,duration3,deathrune1=GetRuneCooldown(1)
    local t4,duration4,deathrune2=GetRuneCooldown(2)
    local t5,duration5,frostrune1=GetRuneCooldown(5)
    local t6,duration6,frostrune2=GetRuneCooldown(6)
    
    if  unholyrune1 == false or unholyrune2 == false then
    	t1 = t1 + duration1 - GetTime()
    	t2 = t2 + duration2 - GetTime()
    
    	if time1 < 1 and time2 < 1 then
    	return true
    
    end
    end
    Obliterate when both unholy runes are within 1s.

    I think you should learn LUA code though and not expect everyone to code the whole profile for you :P, I'm still learning the basics.
    Last edited by Kinkeh; 05-18-2012 at 04:14 AM.

  10. #445
    js1974's Avatar Member
    Reputation
    27
    Join Date
    Jan 2008
    Posts
    199
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Anyone mind a little help here, I've tried everything I can think of and every piece of code I can find but I can not get this to work no matter what I do. These are hte 2 code sets I have attempted neither work both cripple the rotation.

    Code:
    local _,SBomb = GetItemCooldown("Saronite Bomb")
    
    
    -- Saronite Bomb
    if SBomb == 0 and IsLeftControlKeyDown() and GetCurrentKeyBoardFocus()==nil then
    UseItemByName("Saronite Bomb" [, "mouseover"])
    end
    return true end
    I also tried using

    Code:
    -- Check Bomb Cooldown
    local _, Cooldown, Ready = GetItemCooldown("Saronite Bomb")
    
    
    -- Check Cooldown and Combat status
    if Cooldown == 0 and
       Ready == 1 and
       UnitChannelInfo("player") == nil and
       UnitAffectingCombat("player") ~= nil
    then
    
    
      UseItemByName("Saronite Bomb" [, "mouseover"])) 
      return true
    
    
    end
    Neither of these work I know there has to be a way to make them work and I can only assume I'm just making a mistake somewhere but any help would be greatly appreciated.

  11. #446
    Devilsadvocate's Avatar Member
    Reputation
    70
    Join Date
    May 2008
    Posts
    254
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Ok, how would you code those 2 into 1 tho?
    I'm not going to be releasing anything for a while. I'm back on retail for new content.

  12. #447
    Kinkeh's Avatar Established Member
    Reputation
    243
    Join Date
    Jan 2012
    Posts
    450
    Thanks G/R
    0/0
    Trade Feedback
    3 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Devilsadvocate View Post
    Ok, how would you code those 2 into 1 tho?
    You would make 2 different abilities. One for "Obliterate UU" and one for the 1 second Obliterate, I wouldn't just release a profile if I was you that you really didn't contribute anything too. Right now it just seems like you're going to remake a profile that is already made and I gave you its rotation.

  13. #448
    Devilsadvocate's Avatar Member
    Reputation
    70
    Join Date
    May 2008
    Posts
    254
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Kinkeh View Post
    You would make 2 different abilities. One for "Obliterate UU" and one for the 1 second Obliterate, I wouldn't just release a profile if I was you that you really didn't contribute anything too. Right now it just seems like you're going to remake a profile that is already made and I gave you its rotation.
    Actually no, Im completely building my own profile but referencing others since there is no real useful reference guide for this program....
    My Rep on this site is 68 for a reason my friend....

    And so ur saying this wouldn't work:
    Code:
    local t1,duration1,u1=GetRuneCooldown(3)
    local t2,duration2,u2=GetRuneCooldown(4)
    local t3,duration3,d1=GetRuneCooldown(1)
    local t4,duration4,d2=GetRuneCooldown(2)
    local t5,duration5,f1=GetRuneCooldown(5)
    local t6,duration6,f2=GetRuneCooldown(6)
    
    if  u1 == false or u2 == false then
    	t1 = t1 + duration1 - GetTime()
    	t2 = t2 + duration2 - GetTime()
    
    	if time1 < 1 and time2 < 1 then
    		return true
    	end
    	elseif  u1 == true and u2 == true then
    		return true
    	end
    end
    My formatting may be the same as other profiles as I have seen that most of them are....but the theory behind the rotation will be more optimal than what I have seen released.
    Last edited by Devilsadvocate; 05-18-2012 at 04:56 AM.
    I'm not going to be releasing anything for a while. I'm back on retail for new content.

  14. #449
    Kinky's Avatar Banned CoreCoins Purchaser
    Reputation
    481
    Join Date
    Nov 2008
    Posts
    500
    Thanks G/R
    1/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    @Devilsadvocate: There really is no reference for "this program" mainly because it works off Lua and the World of Warcraft Addon API documentation.
    Nonetheless, you could try something like this;
    Code:
    RuneCheck = nil
    function RuneCheck()
    	local FrostRune = 0
    	local UnholyRune = 0
    	local BloodRune = 0
    	local DeathRune = 0
    	
    	for i=1, 6 do
    		if GetRuneType(i) == 1 and select(1,GetRuneCooldown(i)) + select(2,GetRuneCooldown(i)) - GetTime() < 1
    			then BloodRune + 1 end
    		if GetRuneType(i) == 2 and select(1,GetRuneCooldown(i)) + select(2,GetRuneCooldown(i)) - GetTime() < 1
    			then UnholyRune + 1 end
    		if GetRuneType(i) == 3 and select(1,GetRuneCooldown(i)) + select(2,GetRuneCooldown(i)) - GetTime() < 1
    			then FrostRune + 1 end
    		if GetRuneType(i) == 4 and select(1,GetRuneCooldown(i)) + select(2,GetRuneCooldown(i)) - GetTime() < 1
    			then DeathRune + 1 end
    	end
    	return BloodRune, UnholyRune, FrostRune, DeathRune
    end
    Just place the function wherever you want and call it, then localize it in the ability you want/need/have to check runes for.

    Code:
    local RuneCheck = RuneCheck
    
    -- Obliterate if both Unholy Runes are ready or ready within 1 second
    if select(2,RuneCheck()) > 1 then return true end
    
    -- Obliterate if both Death Runes are up, or Frost Rune and Unholy Rune pairs are up
    if select(4,RuneCheck()) > 1 or (select(3,RuneCheck()) > 1 and select(2,RuneCheck()) > 1)
    then return true end
    Then you can do something like this in Obliterate. Localizing RuneCheck, then doing conditional execution. One for when both DR or both FR and UR pairs are up, and one for when both UH Runes are up/coming up.
    Last edited by Kinky; 05-18-2012 at 07:22 AM.

  15. #450
    Devilsadvocate's Avatar Member
    Reputation
    70
    Join Date
    May 2008
    Posts
    254
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by mentally View Post
    @Devilsadvocate: There really is no reference for "this program" mainly because it works off Lua and the World of Warcraft Addon API documentation.
    Nonetheless, you could try something like this;
    Code:
    RuneCheck = nil
    function RuneCheck()
    	local FrostRune = 0
    	local UnholyRune = 0
    	local BloodRune = 0
    	local DeathRune = 0
    	
    	for i=1, 6 do
    		if GetRuneType(i) == 1 and select(1,GetRuneCooldown(i)) + select(2,GetRuneCooldown(i)) - GetTime() < 1
    			then BloodRune + 1 end
    		if GetRuneType(i) == 2 and select(1,GetRuneCooldown(i)) + select(2,GetRuneCooldown(i)) - GetTime() < 1
    			then UnholyRune + 1 end
    		if GetRuneType(i) == 3 and select(1,GetRuneCooldown(i)) + select(2,GetRuneCooldown(i)) - GetTime() < 1
    			then FrostRune + 1 end
    		if GetRuneType(i) == 4 and select(1,GetRuneCooldown(i)) + select(2,GetRuneCooldown(i)) - GetTime() < 1
    			then DeathRune + 1 end
    	end
    	return BloodRune, UnholyRune, FrostRune, DeathRune
    end
    Just place the function wherever you want and call it, then localize it in the ability you want/need/have to check runes for.

    Code:
    local RuneCheck = RuneCheck
    
    -- Obliterate if both Unholy Runes are ready or ready within 1 second
    if select(2,RuneCheck()) > 1 then return true end
    
    -- Obliterate if both Death Runes are up, or Frost Rune and Unholy Rune pairs are up
    if select(4,RuneCheck()) > 1 or (select(3,RuneCheck()) > 1 and select(2,RuneCheck()) > 1)
    then return true end
    Then you can do something like this in Obliterate. Localizing RuneCheck, then doing conditional execution. One for when both DR or both FR and UR pairs are up, and one for when both UH Runes are up/coming up.
    Thanks. Finally someone that actually knows what their talking about and not another leecher that acts elitist when they repost code from someone else's work that doesn't even help the problem at hand...
    +rep my friend
    I'm not going to be releasing anything for a while. I'm back on retail for new content.

Similar Threads

  1. [Bot] PQR PE Next Steps / Future of Rotation Botting
    By Chevrolet1 in forum World of Warcraft Bots and Programs
    Replies: 120
    Last Post: 10-21-2014, 11:47 AM
  2. [Bot] PQR - Rotation Bot
    By Xelper in forum World of Warcraft Bots and Programs
    Replies: 1738
    Last Post: 10-15-2014, 11:00 AM
  3. [Selling] 3 Lifetime Session Keys For Sale, Great for the PQR user looking for a rotation bot
    By cukiemunster in forum World of Warcraft Buy Sell Trade
    Replies: 13
    Last Post: 03-11-2014, 07:18 AM
  4. rotation bot leveling (PQR)
    By classdog in forum WoW Bots Questions & Requests
    Replies: 3
    Last Post: 09-17-2013, 06:13 PM
  5. [HELP] PQR Rotation Bot Profile Making
    By Missu in forum Programming
    Replies: 0
    Last Post: 10-22-2012, 06:27 AM
All times are GMT -5. The time now is 09:21 AM. Powered by vBulletin® Version 4.2.3
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Google Authenticator verification provided by Two-Factor Authentication (Free) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search