Developing a bot for the community, need a little help. menu

Shout-Out

User Tag List

Page 2 of 4 FirstFirst 1234 LastLast
Results 16 to 30 of 46
  1. #16
    Geminix86's Avatar Member
    Reputation
    1
    Join Date
    Sep 2006
    Posts
    20
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by arigity View Post
    Nice, thanks! I've looked it over, and I have a concern about it... speed of execution... I need to update health for myself, 4 party members, their pets, my focus, 40 raid members, and their possible pets. That's 90 units. Twice a second. After the health updates finish, I'll run a while loop that selects who needs to be healed by checking for low health people first, then higher, then higher still... etc. (in steps of ~10%), then if it selects someone to heal, it goes through the routine of determining what spell to use based on their current health... After the heal is finished casting, it updates the health values and repeats.

    Now me being a noob programmer and all, that may or may not be an efficient way of doing it, so... still taking pointers =P

    Originally Posted by Apoc View Post
    Don't have yahoo, and I never plan to install it.

    Get MSN, its much better. :P
    You can still send me a message on yahoo with an MSN client. They're interchangable, atleast on yahoo's end they are.
    Last edited by Apoc; 12-24-2008 at 03:22 PM. Reason: Don't double post.

    Developing a bot for the community, need a little help.
  2. #17
    Apoc's Avatar Angry Penguin
    Reputation
    1388
    Join Date
    Jan 2008
    Posts
    2,750
    Thanks G/R
    0/13
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Geminix86 View Post
    Nice, thanks! I've looked it over, and I have a concern about it... speed of execution... I need to update health for myself, 4 party members, their pets, my focus, 40 raid members, and their possible pets. That's 90 units. Twice a second. After the health updates finish, I'll run a while loop that selects who needs to be healed by checking for low health people first, then higher, then higher still... etc. (in steps of ~10%), then if it selects someone to heal, it goes through the routine of determining what spell to use based on their current health... After the heal is finished casting, it updates the health values and repeats.

    Now me being a noob programmer and all, that may or may not be an efficient way of doing it, so... still taking pointers =P



    You can still send me a message on yahoo with an MSN client. They're interchangable, atleast on yahoo's end they are.
    I personally update once per frame. (Which is probably too much as it is...)

    Doing so works fine.

  3. #18
    Geminix86's Avatar Member
    Reputation
    1
    Join Date
    Sep 2006
    Posts
    20
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Okay, so I've finished the LUA_DoString thread and I have a few more questions.

    If you've been reading my posts so far you know what I'm trying to do. If not, there's a good outline of where I currently stand in the original post on this thread.

    My first question is about the differences between reading the memory with Cypher's method, outlined in the 3.0.2 info sticky, or the LUA_DoString method. As I understand, the problem with using Cypher's method to get the health / mana for an entire raid is that the objects are in no particular order on the list, and in order to sort the list properly, you'd need to compare the info in the list with something else?

    And the problem with using the LUA_DoString method is that we don't currently have a way to get the return values of the LUA functions that were injected?

    If both of those are true... Then I'm back to square one. Unless I've missed something...

    I feel kinda uncomfortable about trying to do this. You guys have a field day with Shamun's noobishness, calling him copypasta, etc. I was taught that you shouldn't "reinvent the wheel" every time you write a program... So I've been doing a lot of code borrowing myself... But I try to understand everything I use so I know how it works, and can make the most of it. Still, though, I've only written just over half the code I'm working with atm.

  4. #19
    Apoc's Avatar Angry Penguin
    Reputation
    1388
    Join Date
    Jan 2008
    Posts
    2,750
    Thanks G/R
    0/13
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Geminix86 View Post
    Okay, so I've finished the LUA_DoString thread and I have a few more questions.

    If you've been reading my posts so far you know what I'm trying to do. If not, there's a good outline of where I currently stand in the original post on this thread.

    My first question is about the differences between reading the memory with Cypher's method, outlined in the 3.0.2 info sticky, or the LUA_DoString method. As I understand, the problem with using Cypher's method to get the health / mana for an entire raid is that the objects are in no particular order on the list, and in order to sort the list properly, you'd need to compare the info in the list with something else?

    And the problem with using the LUA_DoString method is that we don't currently have a way to get the return values of the LUA functions that were injected?

    If both of those are true... Then I'm back to square one. Unless I've missed something...

    I feel kinda uncomfortable about trying to do this. You guys have a field day with Shamun's noobishness, calling him copypasta, etc. I was taught that you shouldn't "reinvent the wheel" every time you write a program... So I've been doing a lot of code borrowing myself... But I try to understand everything I use so I know how it works, and can make the most of it. Still, though, I've only written just over half the code I'm working with atm.
    lua_doString doesn't return anything. (It's a void method for all intents and purposes)

    You need to call (and return the value of) the other lua functions. (int, string, etc)

    That snippet has also been posted somewhere around here.

  5. #20
    Geminix86's Avatar Member
    Reputation
    1
    Join Date
    Sep 2006
    Posts
    20
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Apoc View Post
    lua_doString doesn't return anything. (It's a void method for all intents and purposes)

    You need to call (and return the value of) the other lua functions. (int, string, etc)

    That snippet has also been posted somewhere around here.
    Alright, I'm back from my search. I found all the information you told me to look for. According to this post by cenron,

    http://www.mmowned.com/forums/wow-me...ml#post1244043

    You need to create a stub then inject it into the process using CreateRemoteThread.

    Dont forget you need to either inject into the main thread or set the TLS Slot to your cuMgr // Someone please verify this statement is true.

    If you have more questions refer to the thread below.

    http://www.mmowned.com/forums/wow-me...t-process.html ([Help] Accessing a function Out of Process)
    I read the whole thread, but I got stuck trying to figure out how to use CreateRemoteThread. Pretty sure that was an important part of what I needed to find out, I skipped it for a moment, went back to my search to try to find other references to it.

    I didn't find any, but I did find this post by Cypher,

    http://www.mmowned.com/forums/wow-me...ml#post1175123


    You don't do a patch to run functions, you do a patch to register functions, then another to unprotect functions designed for Blizzard's UI components only.

    Also, look in my 3.0.2 thread for CGameLua__DoString. That's the function you use to execute a LUA string (and hence call any functions etc).
    So then my attention was pulled in the direction of trying to figure out how to use the CGameLua__DoString function. But later on in the same thread I read about how I would need some kind of "patch" to use the protected functions (which I will need, since the bot will need to cast spells), and I got stuck again.

    /sigh

    I'm way over my head here. I should have taken your advice yesterday and backed out. The memory reading is going to screw me. I don't know much about it, or ASM, and definitely not reversing functions.

    If I could get past this, I'd be okay probably. The rest is pretty simple... But you're right. This is definitely not easy. I just don't get it.

    I wasn't counting on this being so hard. I don't want to give up the AI I've written for someone else to use, at least not just yet. I'd like to finish what I set out to do, but I'm going to need a lot more help... and it seems people shun leechers like me. Though, if I ever get this finished, it would be shared with the community. Not the source, but the finished product.

    So, thanks for all your help... Not sure where to go from here, though.

    Edit: To clarify, I didn't go back to DoString thinking I could get it to return a value. In my reading, I found some using it to cast spells. I made a note of this, knowing I would also need to use it for the same purposes. However, their code snippets were in C#. I'm coding in C++. I have no idea how to convert the code. Another hangup, lol. This is so frustrating it's almost funny.
    Last edited by Geminix86; 12-25-2008 at 05:41 AM.

  6. #21
    Apoc's Avatar Angry Penguin
    Reputation
    1388
    Join Date
    Jan 2008
    Posts
    2,750
    Thanks G/R
    0/13
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Read this thread: http://www.mmowned.com/forums/wow-me..._dostring.html

    There's two (kinda) working examples for both CGameLua_DoString and how to return an LUA function.

    (Searching for what you're actually looking for usually helps )

  7. #22
    Nesox's Avatar ★ Elder ★
    Reputation
    1280
    Join Date
    Mar 2007
    Posts
    1,238
    Thanks G/R
    0/3
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    You can use CastSpellByID/GetSpellIdByName to cast spells.
    You can use GetLocalizedText to get the return value, it returns w/e lua variable you want as a string.. i saw it on gd Question: Getting the value of a custom lua variable. - Game Deception - Forums
    you dont need to fiddle with createremotethread just use InjectAndExecute if ure usingn shynd's blackmagic lib.





  8. #23
    Geminix86's Avatar Member
    Reputation
    1
    Join Date
    Sep 2006
    Posts
    20
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Apoc View Post
    Read this thread: http://www.mmowned.com/forums/wow-me..._dostring.html

    There's two (kinda) working examples for both CGameLua_DoString and how to return an LUA function.

    (Searching for what you're actually looking for usually helps )
    I read this thread, actually. I saw that all his code examples used BlackMagic. When I remembered reading somewhere else that you didn't need BlackMagic to call an LUA function (which is BS, now that I see), I thought I was looking in the wrong place. I figured you meant for me to go somewhere else.

    Alright, so if I can get this code example:

    Code:
    
    private uint BlackLua_DoString(Process _process, string pszString)
    {
         BlackMagic wow = new BlackMagic(_process.Id);
         uint pScript = wow.AllocateMemory(0x1024);
         wow.WriteASCIIString(pScript, pszString);
         ObjectManager.WoWObjectManager _ObjectManager = ObjectManager.GetWowObjectManager(_process.Handle);
         wow.Asm.Clear();
         uint codeCave = wow.AllocateMemory(0x1000);
         uint GetSpellIdByName = (uint)Offsets.eStaticPointers.GetSpellIdByName;
         //Start UpdateCurMgr
         wow.Asm.AddLine("fs mov eax, [0x2C]");
         wow.Asm.AddLine("mov eax, [eax]");
         wow.Asm.AddLine("add eax, 8");
         wow.Asm.AddLine("mov dword [eax], {0}", ObjectMgr.GetCurMgr(wow.ProcessHandle));
         //End UpdateCurMgr
         wow.Asm.AddLine("push " + 0x0019F9BC);//not sure what this is, seems to be static in olly
         wow.Asm.AddLine("push " + (codeCave + 0x500));
         wow.Asm.AddLine("call " + GetSpellIdByName);
         wow.Asm.AddLine("add esp,8");
         wow.Asm.AddLine("retn");
         wow.WriteASCIIString(codeCave + 0x500, name);
         uint result = wow.Asm.InjectAndExecute(codeCave);
    
         wow.FreeMemory(codeCave);
         Console.WriteLine("Getspellidbyname {0} result {1}", name, result);
         if (result != uint.MaxValue)
              return result;
         else
              return 0;
    }
    Converted to C++, it should do what I need?

    You can use CastSpellByID/GetSpellIdByName to cast spells.
    You can use GetLocalizedText to get the return value, it returns w/e lua variable you want as a string.. i saw it on gd Question: Getting the value of a custom lua variable. - Game Deception - Forums
    you dont need to fiddle with createremotethread just use InjectAndExecute if ure usingn shynd's blackmagic lib.
    Just switch out the names of the functions? Could I also use Wowhead: We've got more style than a fashion designer who knows CSS. to get the spell ID by name? I seem to remember Spell IDs and item IDs being the same on WoW Head that they are in-game.

    Whew! Doesn't seem so hard after all =D

    Right, then! Thanks guys! That just brings me to converting that piece of code to C++... Something I'm probably going to have to get more help with, but I'm gonna try, anyway.
    Last edited by Geminix86; 12-25-2008 at 06:27 AM.

  9. #24
    Apoc's Avatar Angry Penguin
    Reputation
    1388
    Join Date
    Jan 2008
    Posts
    2,750
    Thanks G/R
    0/13
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Geminix86 View Post
    I read this thread, actually. I saw that all his code examples used BlackMagic. When I remembered reading somewhere else that you didn't need BlackMagic to call an LUA function (which is BS, now that I see), I thought I was looking in the wrong place. I figured you meant for me to go somewhere else.

    Alright, so if I can get this code example:


    Code:
    wow.Asm.Clear();
    uint codeCave = wow.AllocateMemory(0x1000);
    uint GetSpellIdByName = (uint)Offsets.eStaticPointers.GetSpellIdByName;
    //Start UpdateCurMgr
    wow.Asm.AddLine("fs mov eax, [0x2C]");
    wow.Asm.AddLine("mov eax, [eax]");
    wow.Asm.AddLine("add eax, 8");
    wow.Asm.AddLine("mov dword [eax], {0}", ObjectMgr.GetCurMgr(wow.ProcessHandle));
    //End UpdateCurMgr
    wow.Asm.AddLine("push " + 0x0019F9BC);//not sure what this is, seems to be static in olly
    wow.Asm.AddLine("push " + (codeCave + 0x500));
    wow.Asm.AddLine("call " + GetSpellIdByName);
    wow.Asm.AddLine("add esp,8");
    wow.Asm.AddLine("retn");
    wow.WriteASCIIString(codeCave + 0x500, name);
    uint result = wow.Asm.InjectAndExecute(codeCave);

    wow.FreeMemory(codeCave);
    Console.WriteLine("Getspellidbyname {0} result {1}", name, result);
    if (result != uint.MaxValue)
    return result;
    else
    return 0;


    Converted to C++, it should do what I need?



    Just switch out the names of the functions? Could I also use Wowhead: We've got more style than a fashion designer who knows CSS. to get the spell ID by name? I seem to remember Spell IDs and item IDs being the same on WoW Head that they are in-game.

    Whew! Doesn't seem so hard after all =D

    Right, then! Thanks guys! That just brings me to converting that piece of code to C++... Something I'm probably going to have to get more help with, but I'm gonna try, anyway.
    If you're doing it in C++, check out bobbysings WoWX framework. (IIRC, he already has this code in there somewhere...)

    And just use GetSpellByID and GetSpellIdByName (or whatever it is...)

    No need to reference WoWHead as it can change. And CAN be wrong. Calling functions from WoW will never be wrong. (At least in theory, we all know Blizzard can be beyond retarded sometimes.)

  10. #25
    Geminix86's Avatar Member
    Reputation
    1
    Join Date
    Sep 2006
    Posts
    20
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Apoc View Post
    If you're doing it in C++, check out bobbysings WoWX framework. (IIRC, he already has this code in there somewhere...)

    And just use GetSpellByID and GetSpellIdByName (or whatever it is...)

    No need to reference WoWHead as it can change. And CAN be wrong. Calling functions from WoW will never be wrong. (At least in theory, we all know Blizzard can be beyond retarded sometimes.)
    Thanks for helping me out here. It's greatly appreciated.

    I found bobbysing's WoWX Framework. I downloaded it. Two things I noticed were that it doesn't come with documentation, and that there's an executable in there called WoWXHack.exe ... When I run it, it says something about "WoWHack is loaded" and then it runs WoW. Will whoever uses this bot need to have that exe too? Or can I use the dll file and it's functions without it?

    Also, I (think I) found the code you were talking about . Can you please verify that this is what I'm looking for? It's linked here:

    Game Deception - Forums - View Single Post - Question: Getting the value of a custom lua variable.

    Next question is about making my bot less detectable. It already has a random title bar name generator. I plan on making a program that will create a copy of the bot, rename the copy to something random, and run the randomly named exe.

    What else can be done?

    Edit: Uh oh... It's not letting me #using <WoWXHack.dll>
    Last edited by Geminix86; 12-25-2008 at 10:07 AM.

  11. #26
    Apoc's Avatar Angry Penguin
    Reputation
    1388
    Join Date
    Jan 2008
    Posts
    2,750
    Thanks G/R
    0/13
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Geminix86 View Post
    Thanks for helping me out here. It's greatly appreciated.

    I found bobbysing's WoWX Framework. I downloaded it. Two things I noticed were that it doesn't come with documentation, and that there's an executable in there called WoWXHack.exe ... When I run it, it says something about "WoWHack is loaded" and then it runs WoW. Will whoever uses this bot need to have that exe too? Or can I use the dll file and it's functions without it?

    Also, I (think I) found the code you were talking about . Can you please verify that this is what I'm looking for? It's linked here:

    Game Deception - Forums - View Single Post - Question: Getting the value of a custom lua variable.

    Next question is about making my bot less detectable. It already has a random title bar name generator. I plan on making a program that will create a copy of the bot, rename the copy to something random, and run the randomly named exe.

    What else can be done?

    Edit: Uh oh... It's not letting me #using <WoWXHack.dll>
    The exe is just a dll injector. You can write one yourself.

    And renaming things won't make you any less detectable. (Warden currently doesn't scan process titles, and hasn't for quite some time)

    Since when was there a "#using <dllname.dll>" statement in C++?

    Originally Posted by Cypher
    Learn to walk before you run.
    Learn the basics of C++. I told you once, not to go straight to bot making before you understand how WoW works. There's a lot that goes into making even a working bot than just copy/pasting code from everywhere, and packaging it up hoping it will work.

  12. #27
    Geminix86's Avatar Member
    Reputation
    1
    Join Date
    Sep 2006
    Posts
    20
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Apoc View Post
    The exe is just a dll injector. You can write one yourself.

    And renaming things won't make you any less detectable. (Warden currently doesn't scan process titles, and hasn't for quite some time)

    Since when was there a "#using <dllname.dll>" statement in C++?



    Learn the basics of C++. I told you once, not to go straight to bot making before you understand how WoW works. There's a lot that goes into making even a working bot than just copy/pasting code from everywhere, and packaging it up hoping it will work.
    I'm not just copy/pasting code from everywhere

    And I'm not just packaging it up and hoping it works


    I don't know if you know this or not, but this is a rewrite of my original bot... Healbot AI (written in AutoIt 3). I spent weeks on it, and continued to add features after I had a working version. I can do this, okay?

  13. #28
    cloud_wizard's Avatar Member
    Reputation
    5
    Join Date
    Dec 2008
    Posts
    44
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Geminix86 View Post
    I'm not just copy/pasting code from everywhere

    And I'm not just packaging it up and hoping it works


    I don't know if you know this or not, but this is a rewrite of my original bot... Healbot AI (written in AutoIt 3). I spent weeks on it, and continued to add features after I had a working version. I can do this, okay?

    I used your bot a while back. Druids healed pretty nice. It seems you're already on your way to fixing the problems with it, such running more than one instance of WoW at a time.

    Don't let these guys tell you what you can or can't do. While I don't know much about all this stuff, you have my full support. Let me know if you need me as a beta tester when it comes time. I'd be glad to help.

  14. #29
    Geminix86's Avatar Member
    Reputation
    1
    Join Date
    Sep 2006
    Posts
    20
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by cloud_wizard View Post
    I used your bot a while back. Druids healed pretty nice. It seems you're already on your way to fixing the problems with it, such running more than one instance of WoW at a time.

    Don't let these guys tell you what you can or can't do. While I don't know much about all this stuff, you have my full support. Let me know if you need me as a beta tester when it comes time. I'd be glad to help.
    Thanks, that's the first bit of good news I've gotten in a few days. I'm currently stuck again. I'm having issues reading WoW's memory. I'm trying to figure out how to use the WoWXHack that was linked to me earlier, but I'm not sure I have the right code snippet to use it. I'm still trying to call the LUA functions with it, and I'm getting a compile error that I haven't been able to fix. I wish I could add the features I'd like to add to it using Autoit, like I did before. That would make this so much easier. Unfortunately, I need the power of C++ to do what I need the bot to do.

    Anyway, yeah. If you want to help, you're more than welcome. Do you know much C++? Maybe you can help me fix this compile error. I think I may be missing an include somewhere... Just not sure which.

    Here's the code:

    Code:
    String ^ GetLocalizedText(String ^ sDescriptor)
    {
         typedef constant char * ( CGLocalPlayer_C::* tGetLocalizedText )( const char * pszDescriptor, DWORD );
         tGetLocalizedText pGetLocalizedText = 0;
         DWORD dwGetlocalizedText = gpWoWX->GetFindPattern()->GetAddress( "GetLocalizedText");
         memcpy( &pGetLocalizedText, &dwGetLocalizedText, sizeof( DWORD) );
         constant char * pszResult = (gpWoWX->GetCurMgr()->GetLocalPlayer()->*pGetLocalizedText)( sDescriptor.c_str(), -1 );
         if( !pszResult )
              return "";
         
         return pszResult;
    }

  15. #30
    cloud_wizard's Avatar Member
    Reputation
    5
    Join Date
    Dec 2008
    Posts
    44
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Geminix86 View Post
    Thanks, that's the first bit of good news I've gotten in a few days. I'm currently stuck again. I'm having issues reading WoW's memory. I'm trying to figure out how to use the WoWXHack that was linked to me earlier, but I'm not sure I have the right code snippet to use it. I'm still trying to call the LUA functions with it, and I'm getting a compile error that I haven't been able to fix. I wish I could add the features I'd like to add to it using Autoit, like I did before. That would make this so much easier. Unfortunately, I need the power of C++ to do what I need the bot to do.

    Anyway, yeah. If you want to help, you're more than welcome. Do you know much C++? Maybe you can help me fix this compile error. I think I may be missing an include somewhere... Just not sure which.

    Here's the code:

    Code:
    String ^ GetLocalizedText(String ^ sDescriptor)
    {
         typedef constant char * ( CGLocalPlayer_C::* tGetLocalizedText )( const char * pszDescriptor, DWORD );
         tGetLocalizedText pGetLocalizedText = 0;
         DWORD dwGetlocalizedText = gpWoWX->GetFindPattern()->GetAddress( "GetLocalizedText");
         memcpy( &pGetLocalizedText, &dwGetLocalizedText, sizeof( DWORD) );
         constant char * pszResult = (gpWoWX->GetCurMgr()->GetLocalPlayer()->*pGetLocalizedText)( sDescriptor.c_str(), -1 );
         if( !pszResult )
              return "";
         
         return pszResult;
    }
    What compile error are you getting? I'll try to help, but I can't make any guarantees.

Page 2 of 4 FirstFirst 1234 LastLast

Similar Threads

  1. I need a SAFE bot for the Ravenholt boxes
    By rocambole in forum WoW Bots Questions & Requests
    Replies: 4
    Last Post: 02-20-2013, 01:43 AM
  2. [Bot] WRobot - Need beta tester (private bot for the moment)
    By RivaLfr in forum World of Warcraft Bots and Programs
    Replies: 113
    Last Post: 01-18-2013, 10:41 AM
  3. [Release] -AIO Bot- for the US *lvl 1-80 FULL questing*
    By AIO Bot in forum World of Warcraft Bots and Programs
    Replies: 159
    Last Post: 12-21-2009, 04:58 AM
  4. Making glider profiles for the community :)
    By richardsonc in forum WoW Bot Maps And Profiles
    Replies: 17
    Last Post: 11-25-2008, 03:55 PM
All times are GMT -5. The time now is 07:57 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