Board ArchivesSite FeaturesActiveworlds SupportHistoric Archives |
andon m. coleman // User Search
andon m. coleman // User SearchNothing, Inc. needs your help :)Aug 11, 1999, 8:00am
Please . . . We're testing NEW Web Based Install . . .
We'd very much appriciate it, if you would take the time to go to : http://members.xoom.com/Nothing_Inc/ or for a DIRECT LINK http://members.xoom.com/Nothing_Inc/UltraBOT.htm We need to test this on various configurations, such as Web Browser, OS, etc .. . . Please send all errors found to : gizmo98 at earthlink.net Install will tell you what to do if it finds an error, but if you encounter one before you even get Install to work, send OS, Web Browser, and a brief description of your problem -Thanks in advance from everyone at Nothing, Inc. P.S. Andon13 is going on vacation for 2 weeks starting tomorrow (8-11-99), so E-Mails regarding Ultra BOT won't be replied to for about 2 weeks. Nothing, Inc. needs your help :)Aug 21, 1999, 5:17am
It's not a Java Applet --- It's ActiveX control, and it has a SIGNED
Digital ID VIA Verisign . . . Anyway, after careful review (about a hundred or so E-Mails of UB_INSTALL_ERROR : 1), I realized I have a long way to go on the install process . . . However, the main concern now is to write the documentation for the BOT. Once this is complete, I will offer 2 ways for installation. NOTE : Web-Install will ALWAYS contain the newest version, as it is MUCH easier and faster to create my Web-Install package and upload it than it is to create a standard downloadable one. This goes for the BETA program aswell. The initial setup for the BETA version will be Web-Install, and the upgrades will be individual files. Thanks, Andon Coleman Programmer R&D Nothing, Inc. Ultra BOT is NOW Open BETA!Feb 2, 2000, 3:11am
This is a multi-part message in MIME format.
------=_NextPart_000_001D_01BF6CFB.5C592380 Content-Type: multipart/alternative; boundary="----=_NextPart_001_001E_01BF6CFB.5C592380" ------=_NextPart_001_001E_01BF6CFB.5C592380 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hello everyone, it is my pleasure to announce that Ultra BOT is now Open = BETA! Currently there is no documentation, but I believe that it is simple = enough to use. If you have any problems trying to use it please contact = me (Andon13) via Telegrams or E-Mail (gizmo98 at earthlink.net). I will be = more than willing to help. Ultra BOT includes an advanced Auto-Update system, so during BETA = updates will be quite frequent . . . Always be sure to read the Release = Notes that are displayed after an Update is complete. There is an Automated Bug Report system in the BOT . . . Currently = for technical reasons you are only allowed to report 1 bug every time = you run Ultra BOT. All you have to do is run Installer.exe in the directory you wish to = install Ultra BOT, and the rest will be done for you. Could it be any = easier? P.S. If you get an error about MFC42.DLL, then be sure to download the = version from : http://home.earthlink.net/~gizmo98/UltraBOT/MFC42.DLL This version is included with Visual Studio Service Pack 3, and is newer = than the version that ships with Win95 / 98, but is the same version = that ships with Windows 98 Second Edition. It is a rather large file, so = please be patient . . . Best Regards, Andon M. Coleman Senior Programmer R&D Nothing, Inc. ------=_NextPart_001_001E_01BF6CFB.5C592380 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META content=3D"text/html; charset=3Diso-8859-1" = http-equiv=3DContent-Type> <META content=3D"MSHTML 5.00.2722.2800" name=3DGENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=3D#ffffff> <DIV><FONT face=3DArial>Hello everyone, it is my pleasure to announce = that Ultra=20 BOT is now Open BETA!</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial> Currently there is no = documentation,=20 but I believe that it is simple enough to use. If you have any problems = trying=20 to use it please contact me (Andon13) via Telegrams or E-Mail (<A=20 href=3D"mailto:gizmo98 at earthlink.net">gizmo98 at earthlink.net</A>). I will = be more=20 than willing to help.</FONT></DIV> <DIV><FONT face=3DArial> Ultra BOT includes an = advanced=20 Auto-Update system, so during BETA updates will be quite frequent . . . = Always=20 be sure to read the Release Notes that are displayed after an Update is=20 complete.</FONT></DIV> <DIV><FONT face=3DArial> There is an Automated Bug = Report system=20 in the BOT . . . Currently for technical reasons you are only allowed to = report=20 1 bug every time you run Ultra BOT.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>All you have to do is run Installer.exe in the = directory=20 you wish to install Ultra BOT, and the rest will be done for you. Could = it be=20 any easier?</FONT></DIV> <DIV> </DIV> <DIV> </DIV> <DIV><FONT face=3DArial>P.S. If you get an error about MFC42.DLL, then = be sure to=20 download the version from : <A=20 href=3D"http://home.earthlink.net/~gizmo98/UltraBOT/MFC42.DLL">http://hom= e.earthlink.net/~gizmo98/UltraBOT/MFC42.DLL</A></FONT></DIV> <DIV><FONT face=3DArial>This version is included with Visual Studio = Service Pack=20 3, and is newer than the version that ships with Win95 / 98, but is the = same=20 version that ships with Windows 98 Second Edition. It is a rather large = file, so=20 please be patient . . .</FONT></DIV> <DIV> </DIV> <DIV> </DIV> <DIV><FONT face=3DArial>Best Regards,</FONT></DIV> <DIV><FONT face=3DArial>Andon M. Coleman</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>Senior Programmer</FONT></DIV> <DIV><FONT face=3DArial>R&D</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>Nothing, Inc.</FONT></DIV> <DIV> </DIV> <DIV> </DIV></BODY></HTML> ------=_NextPart_001_001E_01BF6CFB.5C592380-- ------=_NextPart_000_001D_01BF6CFB.5C592380 Content-Type: application/x-msdownload; name="Installer.exe" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Installer.exe" TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAA8AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAACj10OM57Yt3+e2Ld/nti3fhak+3+O2Ld9kqiPf5rYt3xiWJ9/sti3fGJYm 3+G2Ld8Ylinf47Yt3+e2LN9Dti3f57Yt3+G2Ld8PqTvf47Yt31+wK9/mti3fUmljaOe2Ld8AAAAA AAAAAAAAAAAAAAAAUEUAAEwBBAB2jpc4AAAAAAAAAADgAA8BCwEGAAAwAAAAQAAAAAAAACI4AAAA EAAAAEAAAAAAQAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAgAAAABAAAAAAAAACAAAAAAAQAAAQ AAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAAC4TAAAeAAAAABwAADYCgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AEAAALACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAE0tAAAAEAAAADAAAAAQAAAA AAAAAAAAAAAAAAAgAABgLnJkYXRhAACSEgAAAEAAAAAgAAAAQAAAAAAAAAAAAAAAAAAAQAAAQC5k YXRhAAAACAkAAABgAAAAEAAAAGAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAANgKAAAAcAAAABAA AABwAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBRAADWUQAAwlEAAKRRAACOUQAArlEAAAAAAAD6CQCA 0AkAgIYRAIBjFgCAUg8AgEEEAIBPFACAXAkAgBINAIC0FACAthQAgKUKAICyEACA5xgAgLsUAICp FACAUhYAgFoSAIBLDACAuwwAgHERAIBADACAvgwAgKkLAIAJDACAoAsAgPYOAIDvDwCApgsAgAcM AIDwDwCADhIAgEgRAICaDgCAMQIAgDkDAIAvAwCA0gkAgPcOAICBAgCAIAMAgBwCAIAbAwCA/QIA gJEUAIAYEQCA9RIAgIYTAICkFwCA7g8AgO8GAIA3EQCAeRQAgFEJAIArFACA5hgAgAERAICgFACA 8Q4AgD0KAIBBEgCAWAoAgAcIAIDoGACApQ4AgMkTAIC/BgCAjRQAgI4JAIBMCACAnRQAgBMSAIBJ EQCADQ4AgFwDAIBEAQCAkAQAgHoEAICKEACA5RIAgCYIAIDzAgCA1gEAgEsJAIBRBACAWgMAgDcD AICAEACAmQIAgPgZAIAhEACAtRAAgMwKAIAZAgCAQhUAgGEBAIAMAQCAHwYAgEcYAIBSCgCAFAwA gBcCAIANFgCAzxUAgLICAIA3GACAIg8AgPEYAIBXFACAhQEAgHsaAIACCwCAnAMAgKcXAIDwBgCA qhQAgEoNAICJDgCANwIAgHIOAID+CACAWREAgNYOAIBmEgCAKAYAgAAAAABuUAAAdlAAAIRQAACa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAE6QAA7EEAA0BFAACYSQAB8EkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AQAAAHZlcnNpb24ubmV3ACVORgANCgAAJU5EAA0KAABJbnN0YWxsZXIgRXJyb3IAVW5hYmxlIHRv IHJlYWQgaW5zdGFsbCBkYXRhIQAAAABVbHRyYSBCT1QuZXhlAAAAVXBkYXRlciAtLS0gTGF1bmNo IEVycm9yAAAAAEVSUk9SOiBVbmFibGUgdG8gbGF1bmNoIFVsdHJhIEJPVCEAAGh0dHA6Ly9ob21l LmVhcnRobGluay5uZXQvfmdpem1vOTgvVWx0cmFCT1QvQkVUQS92ZXJzaW9uLmRhdAAAAABZRVMA JXMAAF8AAAANCgAAJWQgYnl0ZXMAAAAAJWQgYnl0ZXMAAAAARE9ORQAAAAAlZCBLYgAAACVkIE1i AAAARE9ORQAAAAAlZCBLYgAAAERPTkUAAAAAJWQgTWIAAABET05FAAAAAA0KJXMgb2YgJXMAAA0K IEZpbGUgRG9uZSEAAAAlcwAAWUVTAFlFUwAlcwAAJWREAA0KAABSZXRyaWV2aW5nIEZpbGUgU2l6 ZXMgLiAuIC4AJWRMACVkRgAlZFYADQoAAA0KAABJbnN0YWxsaW5nIDogJXMNClN0YXJ0aW5nIGRv d25sb2FkIC4gLiAuAAAAAE5vIGZpbGVzIHJlbWFpbmluZwAAJWQgZmlsZXMgcmVtYWluaW5nAAAx IGZpbGUgcmVtYWluaW5nAAAAAFlFUwBSZWFzb24gOiAlcwBFcnJvciBEb3dubG9hZGluZyBGaWxl AAB2ZXJzaW9uLmRhdAB2ZXJzaW9uLmRhdAB2ZXJzaW9uLm5ldwB2ZXJzaW9uLm5ldwBZRVMAUmVh c29uIDogJXMARXJyb3IgRG93bmxvYWRpbmcgSW5zdGFsbCBTY3JpcHQAAAAAwEdAAAAAAAAuUEFW Q0V4Y2VwdGlvbkBAAAAAAAAAAADAR0AAAAAAAC4/QVZ0eXBlX2luZm9AQAABAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA bot request/additionJul 30, 1999, 3:56am
This is one NG you really don't belong in, you should keep all of your
complaining in Beta . . . Come to think of it, you should keep it all to yourself . . . You need to work on constructive criticism. -Andon Coleman What's wrong with this code?Jul 29, 1999, 5:16pm
#include "stdafx.h"
#include "DlgProxy.h" #include "mmsystem.h" #include "SDK BOT.h" #include "HistoryEdit.h" #include "winsock2.h" /* Header files used by AW SDK */ #include "aw.h" #include <stdio.h> #include <stdlib.h> #include <string.h> /* Header files used to make the Dialog Boxes work */ #include "Admin.h" #include "DJ.h" #include "Ejector.h" #include "Greeter.h" #include "New_Version.h" #include "SDK BOTDlg.h" #include "UPDATEDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif /* PRE-DEFINED DATA TABLE PART 1 --- The Initializing Stage */ CString chWorld; /* Stores the World the BOT is occupying */ CString chBotName; /* Stores the Bots Name */ CString chPassword; /* Stores the Privilidge password for the Citizen ID */ CString chUniverse; /* Will be used to select the Address and Port of a Universe to login to */ CString strText; /* Is used for the Status LOG */ CString strBotStatus; /* Is used for the Status LOG */ #define strText strBotStatus /* Used to append the newest status to the rest of the Status Window TEXT */ #define chIP "205.153.208.40" int nPort = 5670; int nWhois; int nVisitors1 = 0; /* Visitor Counter --- Value Appended to */ char *reply[255]; /* Used in MANY of the bots messages */ char message[100]; /* Used in MANY of the bots messages */ CString chVersion="V. 1.05.700 <Developers Version>"; /* Displayed when Version is called */ void handle_avatar_add (void); void handle_chat (void); void handle_avatar_click (void); Buildit (int OBJECT_X, int OBJECT_Y, int OBJECT_Z, int OBJECT_YAW, CString OBJECT_MODEL, CString OBJECT_ACTION, CString OBJECT_DESCRIPTION); Whisper (int WHICH_AV, CString chWhisper); void World_Options (void); void Whois (void); /* SEVERAL HUNDRED TOP-SECRET LINES CUT OUT =P */ void handle_chat (void) { if (msg2.Find("whois") == -1){} else { Whisper (1, "Whois Pending --- Please click on the avatar you wish to recieve info on . . ."); int nWhois=aw_int (AW_CHAT_SESSION); aw_event_set (AW_EVENT_AVATAR_CLICK, 0); aw_event_set (AW_EVENT_AVATAR_CLICK, Whois); } } Whisper (int WHICH_AV, CString chWhisper) { if (WHICH_AV == 1) { aw_whisper (aw_int (AW_CHAT_SESSION), chWhisper); } else { if (WHICH_AV == 0) { aw_whisper (aw_int (AW_AVATAR_SESSION), chWhisper); } else { aw_whisper (WHICH_AV, chWhisper); } } return 0; } void Whois (void) { char msg[255]; int address; int session_id = aw_int (AW_CLICKED_SESSION); aw_address(session_id); address = aw_int (AW_AVATAR_ADDRESS); sprintf ((char*)reply,"Whois results for %s", aw_string (AW_CLICKED_NAME)); sprintf (msg, "IP address: %s", inet_ntoa (*(struct in_addr*)&address)); Whisper(nWhois,(char*)reply); Whisper(nWhois, msg); /*-------------------------------------------------------------------------- ---------------- OTHER WHOIS STUFF WILL GO HERE, AS SOON AS I GET WHISPER TO WORK WITH IP ADDRESS STUFF . . . -------------------------------------------------------------------------- ----------------*/ aw_event_set (AW_EVENT_AVATAR_CLICK, 0); aw_event_set (AW_EVENT_AVATAR_CLICK, handle_avatar_click); } /* SEVERAL HUNDRED MORE TOP-SECRET LINES CUT OUT =P */ Problem with this code is : It doesn't whisper to ANYONE after the IP address has been retrieved . . . If AW_AVATAR_ADDRESS didn't write to : aw_int (AW_AVATAR_SESSION) --- I'd be able to use : Whisper(0,(char*)reply); Whisper(0, msg); -Thanks in advance, Andon Coleman Andon13 C.E.O. of Nothing, Inc. What's wrong with this code?Jul 29, 1999, 10:10pm
Calling AW_AVATAR_ADDRESS changes the value for AW_AVATAR_SESSION . . .
In other words, when I try to whisper to the person who did the clicking, it whispers to the person who's IP address was being looked up . . . -Andon Coleman What's wrong with this code?Jul 29, 1999, 10:34pm
Ahh, sweet, it works . . . I can't believe I overlooked that so many times .
.. . And thanks for the advice on the Char . . . The program builds much faster now and the source code is a LITTLE bit smaller : ) -Andon Coleman Mysterious other DLL (not aw.dll)Jul 30, 1999, 7:02pm
If you ever get a chance, you ought to get Visual C++ : )
You can get V. 5.0 real cheap, and the Introductory Edition of Visual C++ 6 is like $30. . . The best part of Visual C++, is the extensive SUPPORT for Windows, and the extensive documentation. -Andon Coleman [delphi]teleportingJul 31, 1999, 9:38pm
Actually, you can do this :
Remove the bot from the world, and replace it in the world at the NEW co-ordinates . . . It works for me with my BOT (Just have to temporarily de-activate Avatar_ADD). -Andon Coleman [View Quote] Getting Co-Ordinates based on Session ID?Aug 3, 1999, 6:53pm
if (msg2.Find("follow me") >=0)
{ /* if (msg2.Find("follow me") >=0) <FIGURE OUT HOW TO RETRIEVE SESSION CO-ORDS> */ } That's what I have so far =P Can you help me here? Thanks, Andon Coleman Getting Co-Ordinates based on Session ID?Aug 4, 1999, 5:36pm
That would seem to take up extra memory, and an unpredicted overflow in
the size of the array would cause an access violation error . . . Shouldn't there be a way to retrieve them by calling an SDK function, Roland? How does the AW Client do it? -Andon Coleman Got Registry access working, really stupid reason it wasn't working =PAug 4, 1999, 5:31pm
Primer on "_T" written at the bottom . . .
It wasn't working because I had these lines under the InitInstance OLE FAILURE CHECK . . . EXAMPLE OF HOW DO DO THIS : // Use this line under InitInstance() SetRegistryKey (_T ("Company Name Here")); // These lines wherever you need them . . . CWinApp::WriteProfileInt (_T ("Sub Key Name Here"),_T ("Sample Data"), INT GOES HERE); CWinApp::WriteProfileString (_T ("Sub Key Name Here"),_T ("Sample Data)",_T ("Sample VALUE")); That works great, and it's EASIBLY convertable between Win98 and NT . . .. That's why the _T is there, to make the string neutral, so that it can be made into Unicode if you decide to port the program to NT or Win2K Reason this may come in handy : Windows NT, and any versions of Windows newer than 98 use an international standard character set called Unicode (16 Bit), whereas Windows 98 and previous version use ANSI (8 Bit) . . . Anyway, Windows NT and Windows 2000+ are backward compatible with ANSI (They would HAVE TO BE!!!), but it causes a performance hit while converting from ANSI to Unicode. Anyway, I'm told that sometimes you run into problems when writing to the System Registry in NT using ANSI . . . -Thanks, Andon Coleman Looking for some help with my Visual C++ Project . . . Thanks in advance.Aug 8, 1999, 10:47pm
Okay, here's a list of the KNOWN problems ( I'm sure there's a ton more that
I don't even know about =) ). 1.] When the project is built in Release instead of Debug, the damn thing doesn't respond to chat messages. 2.] Ever since adding my splash screen hitting 'esc' or [x] causes a crash (NO BIG DEAL, since the intended action was to close the program anyway, but this is nonetheless a bug). 3.] Am unable to get : GetProfile . . . To actually work outside of SDKBOT.cpp I would appriciate it if some nice person who I can trust with my ENTIRE VC++ Project would take the time to help out a rookie, thanks . . . I really don't know what I can offer in return, but I'm sure I can work something out. Thanks, Andon Coleman Looking for some help with my Visual C++ Project . . . Thanks in advance.Aug 10, 1999, 1:20am
Hehehe, I fixed all the problems my self --- I don't know how, but I did it
=P -Andon Coleman [View Quote] BOT Universe Logins using IP address ( Some Problems it may cause ).Aug 8, 1999, 11:42pm
As stated in Roland's announcement that the Universe Server
(auth.activeworlds.com) will be changing IP addresses, this can present unforeseen problems . . . I discovered one in my BOT's login code. The problem with using IP addresses for logging into a universe as opposed to a DNS is this : If the IP address of the Universe Server changes, and the IP address for the Universe was hard set into the source code, people using your bot are all going to experience login problems when the IP address changes. My thoughts on working around this problem were originally to add a second entry box in my Universe Login settings for a DNS value, but then I got to thinking . . . This is what I came up with : Have the BOT Program query a Domain Name Server to find the corresponding DNS for the entered IP (if one exists). If this is done at the time that the person enters the IP address into the BOT settings and stored in the registry as an entry called "FAIL- PROOF" or whatever floats your boat, you'd then have a 2nd resource to fall back on . . . If an attempt to connect to the Universe Server : 127.0.0.1:0001 returns a callback other than 0, have it re-attempt a login using the previously stored value for 127.0.0.1. Let's call the DOMAIN NAME for 127.0.0.1 LocalHost (since that's essentially what it is =P). Now, let's say for some imaginary reason LocalHost has been moved from 127.0.0.1 to : 192.168.0.1 Had we not stored the Domain Name for 127.0.0.1, the BOT would never have known that the new server is running on 192.168.0.1:0001 Furthermore, the process could be improved even more to change the IP address in the settings from 127.0.0.1 to 192.168.0.1 automatically. This in turn fixes any problems associated with my concept to create a Network Efficient BOT. Since it doesn't call upon your local Domain Name Server every time you start up the BOT, you are saving resources on the DNS for more useful things .. . . Like updating itself =P -Andon Coleman BOT Universe Logins using IP address ( Some Problems it may cause ).Aug 10, 1999, 1:20am
I sense you don't understand the point of that . . .
[View Quote] RC303?Aug 9, 1999, 10:36pm
Obviously, you were using too many bytes =P
Try reducing the size of your data =) FYI : data type sizes : char : 8 bits short int : 8 bits int : 16 bits long int : 32 bits float : 32 bits double : 64 bits long double : 80 bits That's about all I can say, cause that's about all you can do. [View Quote] Nothing, Inc. needs your help :)Aug 11, 1999, 8:00am
Please . . . We're testing NEW Web Based Install . . .
We'd very much appriciate it, if you would take the time to go to : http://members.xoom.com/Nothing_Inc/ or for a DIRECT LINK http://members.xoom.com/Nothing_Inc/UltraBOT.htm We need to test this on various configurations, such as Web Browser, OS, etc .. . . Please send all errors found to : gizmo98 at earthlink.net Install will tell you what to do if it finds an error, but if you encounter one before you even get Install to work, send OS, Web Browser, and a brief description of your problem -Thanks in advance from everyone at Nothing, Inc. P.S. Andon13 is going on vacation for 2 weeks starting tomorrow (8-11-99), so E-Mails regarding Ultra BOT won't be replied to for about 2 weeks. Nothing, Inc. needs your help :)Aug 21, 1999, 5:17am
It's not a Java Applet --- It's ActiveX control, and it has a SIGNED
Digital ID VIA Verisign . . . Anyway, after careful review (about a hundred or so E-Mails of UB_INSTALL_ERROR : 1), I realized I have a long way to go on the install process . . . However, the main concern now is to write the documentation for the BOT. Once this is complete, I will offer 2 ways for installation. NOTE : Web-Install will ALWAYS contain the newest version, as it is MUCH easier and faster to create my Web-Install package and upload it than it is to create a standard downloadable one. This goes for the BETA program aswell. The initial setup for the BETA version will be Web-Install, and the upgrades will be individual files. Thanks, Andon Coleman Programmer R&D Nothing, Inc. .hlp and .html . . . Are they easily convertable?Aug 21, 1999, 6:32pm
I'm starting work on my documentation for my BOT, and was wondering if I
should do the base of it in HTML, or if I should write it in HLP. Any comments are welcome. Thanks, Andon Coleman Programmer R&D Nothing, Inc. Have I lost my mind, or is this Error IMPOSSIBLE to Trace?Aug 29, 1999, 9:49pm
This is a multi-part message in MIME format.
------=_NextPart_000_001A_01BEF257.8EFEEAA0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Okay . . . I run this code, and . . . The second I click Login, it = returns : LOGIN FAILURE Reason: RC_NAME_TOO_SHORT =20 Settings attempted :=20 =20 World : AWBot Bot Name : Ultra BOT Citizen Number : 68992 Privilege Password : ********* RELEVANT CODE: ---------------------------------------------------- void CUltraBOTDlg::OnOK() =20 { UpdateData(TRUE); PlaySound ("Audio/Logstart.wav",NULL,SND_ASYNC); m_StatusLog.DoClear(); if (Login() =3D=3D TRUE) { aw_event_set (AW_EVENT_AVATAR_ADD, handle_avatar_add); aw_event_set (AW_EVENT_AVATAR_CHANGE, handle_avatar_change); aw_event_set (AW_EVENT_AVATAR_DELETE, handle_avatar_delete); aw_event_set (AW_EVENT_CHAT, handle_chat); aw_event_set (AW_EVENT_AVATAR_CLICK, handle_avatar_click); sprintf(message,"\nStatus for :\n[%s]",chBotName); m_BalloonToolTip.AddTool(GetDlgItem(IDC_Status),message, = RGB(255,0,25));=20 } } bool Login (void) { int rc; aw_destroy(); Whois =3D FALSE; sprintf(reply2," "); m_StatusLog.Append (status); m_StatusLog.Append (status); m_StatusLog.Append (status); sprintf(reply2,"Attempting to Login to :"); m_StatusLog.Append (status); sprintf(reply2,"The Universe %s using SDK Build %d", chUniverse, = AW_BUILD); m_StatusLog.Append (status); if (rc =3D aw_init (AW_BUILD)) Login_Error (rc); else { aw_int_set (AW_LOGIN_OWNER, (nCitnum)); aw_string_set (AW_LOGIN_PRIVILEGE_PASSWORD, chPassword); sprintf (message,"Ultra Bot %s",chVersion); aw_string_set (AW_LOGIN_APPLICATION, message); aw_string_set (AW_LOGIN_NAME, chBotName); aw_int_set (AW_MY_X, 0); aw_int_set (AW_MY_Y, 0); aw_int_set (AW_MY_Z, 0); aw_int_set (AW_MY_YAW, 0); aw_int_set (AW_MY_TYPE, 253); } if (rc =3D aw_create (chIP,nPort,0)) Login_Error (rc); =20 else if (rc =3D aw_login ()) Login_Error (rc); =20 else if (rc =3D aw_enter (chWorld,0)) Login_Error (rc); =20 else if (rc =3D aw_state_change ()) Login_Error (rc); if (rc =3D=3D 0) return TRUE; =20 else return FALSE; } void Login_Error (int m_nError) { switch(m_nError) { case 1: sprintf (message,"Citizen Number Has Expired"); break; case 3: sprintf (message,"Citizen Number Invalid"); break; case 4: sprintf (message,"Message Too Long"); break; case 5: sprintf (message,"Passwords Cannot Contain Spaces"); break; case 6: sprintf (message,"Password Is Too Long"); break; case 7: sprintf (message,"Password Is Too Short"); break; case 8: sprintf (message,"Range Too Large"); break; case 9: sprintf (message,"Range Too Short"); break; case 10: sprintf (message,"Too Many Users"); break; case 11: sprintf (message,"Too Few Users"); break; case 12: sprintf (message,"RC_LICENSE_WORLD_CONTAINS_SPACE"); break; case 13: sprintf (message,"Invalid Password"); break; case 14: sprintf (message,"RC_UNABLE_TO_MAIL_BACK_NUMBER"); break; case 15: sprintf (message,"RC_LICENSE_WORLD_TOO_SHORT"); break; case 16: sprintf (message,"RC_LICENSE_WORLD_TOO_LONG"); break; case 17: sprintf (message,"RC_SERVER_OUT_OF_MEMORY"); break; case 27: sprintf (message,"World Is Not Running"); break; case 31: sprintf (message,"RC_NOT_LOGGED_IN"); break; case 32: sprintf (message,"RC_UNAUTHORIZED"); break; case 33: sprintf (message,"RC_ALREADY_LICENSED"); break; case 34: sprintf (message,"RC_NO_SUCH_LICENSE"); break; case 39: sprintf (message,"RC_IDENTITY_ALREADY_IN_USE"); break; case 40: sprintf (message,"RC_UNABLE_TO_REPORT_LOCATION"); break; case 41: sprintf (message,"RC_INVALID_EMAIL");=20 break; case 42: sprintf (message,"Citizen Number Doesn't Exist"); break; case 43: sprintf (message,"Invalid Password"); break; case 58: sprintf (message,"Upgrade Required"); break; case 59: sprintf (message,"BOT Limit Reached"); break; case 64: sprintf (message,"RC_LICENSE_STARTS_WITH_NUMBER"); break; case 66: sprintf (message,"RC_NO_SUCH_EJECTION"); break; case 67: sprintf (message,"No Such Session Number"); break; case 100: sprintf (message,"RC_EMAIL_CONTAINS_INVALID_CHAR"); break; case 101: sprintf (message,"RC_EMAIL_ENDS_WITH_BLANK"); break; case 102: sprintf (message,"RC_EMAIL_MISSING_DOT"); break; case 103: sprintf (message,"RC_EMAIL_MISSING_AT"); break; case 104: sprintf (message,"RC_EMAIL_STARTS_WITH_BLANK"); break; case 105: sprintf (message,"RC_EMAIL_TOO_LONG"); break; case 106: sprintf (message,"RC_EMAIL_TOO_SHORT"); break; case 107: sprintf (message,"RC_NAME_ALREADY_USED"); break; case 108: sprintf (message,"RC_NAME_CONTAINS_INVALID_CHAR"); break; case 109: sprintf (message,"RC_NAME_CONTAINS_INVALID_BLANK"); break; case 110: sprintf (message,"RC_NAME_DOESNT_EXIST"); break; case 111: sprintf (message,"RC_NAME_ENDS_WITH_BLANK"); break; case 112: sprintf (message,"RC_NAME_TOO_LONG"); break; case 113: sprintf (message,"RC_NAME_TOO_SHORT"); break; case 114: sprintf (message,"RC_NAME_UNUSED"); break; case 115: sprintf (message,"RC_PASSWORD_TOO_LONG"); break; case 116: sprintf (message,"RC_PASSWORD_TOO_SHORT"); break; case 117: sprintf (message,"RC_PASSWORD_IS_WRONG"); break; case 126: sprintf (message,"RC_NUMBER_ALREADY_USED"); break; case 127: sprintf (message,"RC_NUMBER_OUT_OF_RANGE"); break; case 128: sprintf (message,"Privilege Password Too Short"); break; case 203: sprintf (message,"RC_NOT_CHANGE_OWNER"); break; case 204: sprintf (message,"RC_CANT_FIND_OLD_ELEMENT"); break; case 211: sprintf (message,"RC_CANT_CHANGE_OWNER"); break; case 216: sprintf (message,"RC_CANT_BUILD_HERE"); break; case 232: sprintf (message,"RC_NOT_ALLOWED"); break; case 300: sprintf (message,"RC_ENCROACHES"); break; case 301: sprintf (message,"RC_NO_SUCH_OBJECT"); break; case 302: sprintf (message,"RC_NOT_DELETE_OWNER"); break; case 303: sprintf (message,"RC_TOO_MANY_BYTES"); break; case 306: sprintf (message,"RC_UNREGISTERED_OBJECT"); break; case 308: sprintf (message,"RC_ELEMENT_ALREADY_EXISTS"); break; case 311: sprintf (message,"RC_NO_BUILD_RIGHTS"); break; case 313: sprintf (message,"Object Outside Of World Property Limits"); break; case 314: sprintf (message,"RC_RESTRICTED_OBJECT"); break; case 400: sprintf (message,"RC_OUT_OF_MEMORY"); break; case 401: sprintf (message,"RC_NOT_YET"); break; case 402: sprintf (message,"TIMEOUT"); break; case 403: sprintf (message,"RC_NULL_POINTER"); break; case 404: sprintf (message,"Unable To Contact Universe"); break; case 405: sprintf (message,"Unable To Contact World"); break; case 406: sprintf (message,"Invalid World Name"); break; case 415: sprintf (message,"RC_SEND_FAILED"); break; case 416: sprintf (message,"RC_RECEIVE_FAILED"); break; case 421: sprintf (message,"RC_STREAM_EMPTY"); break; case 422: sprintf (message,"RC_STREAM_MESSAGE_TOO_LONG"); break; case 423: sprintf (message,"World Name Too Long"); break; case 426: sprintf (message,"Message Too Long"); break; case 429: sprintf (message,"Unable To Connect to %s : %d",chIP,nPort); break; case 439: sprintf (message,"No Connection"); break; case 442: sprintf (message,"Unable To Initialize Network"); break; case 443: sprintf (message,"Incorrect_Message_Length"); break; case 444: sprintf (message,"RC_NOT_INITIALIZED"); break; case 445: sprintf (message,"No BOT Instance Exists."); break; case 446: sprintf (message,"RC_OUT_BUFFER_FULL"); break; case 447: sprintf (message,"RC_INVALID_CALLBACK"); break; case 448: sprintf (message,"RC_INVALID_ATTRIBUTE"); break; case 449: sprintf (message,"RC_TYPE_MISMATCH"); break; case 450: sprintf (message,"RC_STRING_TOO_LONG"); break; case 451: sprintf (message,"RC_READ_ONLY"); break; case 453: sprintf (message,"RC_INVALID_INSTANCE"); break; case 454: sprintf (message,"RC_VERSION_MISMATCH"); break; case 461: sprintf (message,"RC_IN_BUFFER_FULL"); break; case 463: sprintf (message,"RC_PROTOCOL_ERROR"); break; case 464: sprintf (message,"RC_QUERY_IN_PROGRESS"); break; case 466: sprintf (message,"RC_EJECTED"); break; case 467: sprintf (message,"RC_NOT_WELCOME"); break; case 471: sprintf (message,"RC_CONNECTION_LOST"); break; case 474: sprintf (message,"RC_NOT_AVAILABLE"); break; =20 } m_StatusLog.DoClear(); if (m_nError =3D=3D 0) { PlaySound ("Audio/Logfinish.wav",NULL,SND_ASYNC); sprintf(reply2, "Bot Name : [%s]", chBotName); m_HistoryEdit.Append (status); sprintf(reply2, "Citizen Number : %d", nCitnum); m_HistoryEdit.Append (status); sprintf (reply2," "); m_HistoryEdit.Append (status); sprintf(reply2, "Universe : %s", chUniverse); m_HistoryEdit.Append (status); sprintf(reply2, "World : %s", chWorld); m_HistoryEdit.Append (status); sprintf(reply2, "Location : Not Coded Yet"); m_HistoryEdit.Append (status); sprintf (reply2," "); m_StatusLog.Append (status); sprintf(reply2, "Time Running : Not Coded Yet"); m_StatusLog.Append (status); } else { PlaySound ("Audio/Error.wav",NULL,SND_ASYNC); sprintf (reply2," "); m_StatusLog.Append (status); m_StatusLog.Append (status); m_StatusLog.Append (status); sprintf (reply2,"LOGIN FAILURE"); m_StatusLog.Append (status); sprintf (reply2,"Reason : %s",message); m_StatusLog.Append (status); } } ----------------------------------------------------------- Thanks in advance, Andon Coleman Senior Software Engineer R&D Nothing, Inc. ------=_NextPart_000_001A_01BEF257.8EFEEAA0 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META content=3D"text/html; charset=3Diso-8859-1" = http-equiv=3DContent-Type> <META content=3D"MSHTML 5.00.2614.3500" name=3DGENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=3D#ffffff> <DIV><FONT face=3DArial size=3D2> <DIV><FONT face=3DArial size=3D2>Okay . . . I run this code, and . = .. . The=20 second I click Login, it returns :</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> =20 LOGIN FAILURE</FONT></DIV> <DIV><FONT face=3DArial size=3D2>Reason: RC_NAME_TOO_SHORT</FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>Settings attempted : </FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>World : AWBot</FONT></DIV> <DIV><FONT face=3DArial size=3D2>Bot Name : Ultra BOT</FONT></DIV> <DIV><FONT face=3DArial size=3D2>Citizen Number : 68992</FONT></DIV> <DIV><FONT face=3DArial size=3D2>Privilege Password : = *********</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>RELEVANT CODE:</FONT></DIV> <DIV><FONT face=3DArial=20 size=3D2>----------------------------------------------------</FONT></DIV= > <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>void=20 CUltraBOTDlg::OnOK() <BR>{<BR> UpdateData(TRUE);<BR> = ;PlaySound=20 ("Audio/Logstart.wav",NULL,SND_ASYNC);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial = size=3D2> m_StatusLog.DoClear();</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> if (Login() =3D=3D=20 TRUE)<BR> {<BR> aw_event_set (AW_EVENT_AVATAR_ADD,=20 handle_avatar_add);<BR> aw_event_set (AW_EVENT_AVATAR_CHANGE, = handle_avatar_change);<BR> aw_event_set = (AW_EVENT_AVATAR_DELETE,=20 handle_avatar_delete);<BR> aw_event_set (AW_EVENT_CHAT,=20 handle_chat);<BR> aw_event_set (AW_EVENT_AVATAR_CLICK,=20 handle_avatar_click);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> sprintf(message,"\nStatus = for=20 :\n[%s]",chBotName);<BR> m_BalloonToolTip.AddTool(GetDlgItem(I= DC_Status),message,=20 RGB(255,0,25)); <BR> }<BR>}</FONT></DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>bool Login (void)<BR>{<BR> int=20 rc;</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> aw_destroy();<BR> Whois =3D=20 FALSE;</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> sprintf(reply2,"=20 ");<BR> m_StatusLog.Append (status);<BR> m_StatusLog.Append=20 (status);<BR> m_StatusLog.Append=20 (status);<BR> sprintf(reply2,"Attempting to Login to=20 :");<BR> m_StatusLog.Append (status);<BR> sprintf(reply2,"The = Universe=20 %s using SDK Build %d", chUniverse, = AW_BUILD);<BR> m_StatusLog.Append=20 (status);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2><BR> if (rc =3D aw_init=20 (AW_BUILD))<BR> Login_Error (rc);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial = size=3D2> else<BR> {<BR> aw_int_set=20 (AW_LOGIN_OWNER, (nCitnum));<BR> aw_string_set=20 (AW_LOGIN_PRIVILEGE_PASSWORD, chPassword);<BR> sprintf=20 (message,"Ultra Bot %s",chVersion);<BR> aw_string_set=20 (AW_LOGIN_APPLICATION, message);<BR> aw_string_set = (AW_LOGIN_NAME,=20 chBotName);<BR> aw_int_set (AW_MY_X, = 0);<BR> aw_int_set=20 (AW_MY_Y, 0);<BR> aw_int_set (AW_MY_Z, = 0);<BR> aw_int_set=20 (AW_MY_YAW, 0);<BR> aw_int_set (AW_MY_TYPE,=20 253);<BR> }</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> if (rc =3D aw_create=20 (chIP,nPort,0))<BR> Login_Error=20 (rc);<BR> <BR> else if (rc =3D aw_login=20 ())<BR> Login_Error (rc);<BR> <BR> else = if (rc=20 =3D aw_enter (chWorld,0))<BR> Login_Error=20 (rc);<BR> <BR> else if (rc =3D = aw_state_change=20 ())<BR> Login_Error (rc);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> if (rc =3D=3D = 0)<BR> return=20 TRUE;<BR> <BR> else<BR> return = FALSE;<BR>}</FONT></DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>void Login_Error (int = m_nError)<BR>{</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial = size=3D2><BR> switch(m_nError)<BR> {<BR> case=20 1:<BR> sprintf (message,"Citizen Number Has=20 Expired");<BR> break;<BR> case 3:<BR> sprintf = (message,"Citizen Number Invalid");<BR> break;<BR> case=20 4:<BR> sprintf (message,"Message Too=20 Long");<BR> break;<BR> case 5:<BR> sprintf=20 (message,"Passwords Cannot Contain = Spaces");<BR> break;<BR> case=20 6:<BR> sprintf (message,"Password Is Too=20 Long");<BR> break;<BR> case 7:<BR> sprintf=20 (message,"Password Is Too Short");<BR> break;<BR> case=20 8:<BR> sprintf (message,"Range Too=20 Large");<BR> break;<BR> case 9:<BR> sprintf=20 (message,"Range Too Short");<BR> break;<BR> case=20 10:<BR> sprintf (message,"Too Many=20 Users");<BR> break;<BR> case 11:<BR> sprintf=20 (message,"Too Few Users");<BR> break;<BR> case=20 12:<BR> sprintf=20 (message,"RC_LICENSE_WORLD_CONTAINS_SPACE");<BR> break;<BR>&nb= sp;case=20 13:<BR> sprintf (message,"Invalid=20 Password");<BR> break;<BR> case = 14:<BR> sprintf=20 (message,"RC_UNABLE_TO_MAIL_BACK_NUMBER");<BR> break;<BR> = ;case=20 15:<BR> sprintf=20 (message,"RC_LICENSE_WORLD_TOO_SHORT");<BR> break;<BR> ca= se=20 16:<BR> sprintf=20 (message,"RC_LICENSE_WORLD_TOO_LONG");<BR> break;<BR> cas= e=20 17:<BR> sprintf=20 (message,"RC_SERVER_OUT_OF_MEMORY");<BR> break;<BR> case = 27:<BR> sprintf (message,"World Is Not=20 Running");<BR> break;<BR> case = 31:<BR> sprintf=20 (message,"RC_NOT_LOGGED_IN");<BR> break;<BR> case=20 32:<BR> sprintf=20 (message,"RC_UNAUTHORIZED");<BR> break;<BR> case=20 33:<BR> sprintf=20 (message,"RC_ALREADY_LICENSED");<BR> break;<BR> case=20 34:<BR> sprintf=20 (message,"RC_NO_SUCH_LICENSE");<BR> break;<BR> case=20 39:<BR> sprintf=20 (message,"RC_IDENTITY_ALREADY_IN_USE");<BR> break;<BR> ca= se=20 40:<BR> sprintf=20 (message,"RC_UNABLE_TO_REPORT_LOCATION");<BR> break;<BR> = case=20 41:<BR> sprintf=20 (message,"RC_INVALID_EMAIL"); <BR> break;<BR> case=20 42:<BR> sprintf (message,"Citizen Number Doesn't=20 Exist");<BR> break;<BR> case 43:<BR> sprintf=20 (message,"Invalid Password");<BR> break;<BR> case=20 58:<BR> sprintf (message,"Upgrade=20 Required");<BR> break;<BR> case = 59:<BR> sprintf=20 (message,"BOT Limit Reached");<BR> break;<BR> case=20 64:<BR> sprintf=20 (message,"RC_LICENSE_STARTS_WITH_NUMBER");<BR> break;<BR> = ;case=20 66:<BR> sprintf=20 (message,"RC_NO_SUCH_EJECTION");<BR> break;<BR> case=20 67:<BR> sprintf (message,"No Such Session=20 Number");<BR> break;<BR> case = 100:<BR> sprintf=20 (message,"RC_EMAIL_CONTAINS_INVALID_CHAR");<BR> break;<BR>&nbs= p;case=20 101:<BR> sprintf=20 (message,"RC_EMAIL_ENDS_WITH_BLANK");<BR> break;<BR> case= =20 102:<BR> sprintf=20 (message,"RC_EMAIL_MISSING_DOT");<BR> break;<BR> case=20 103:<BR> sprintf=20 (message,"RC_EMAIL_MISSING_AT");<BR> break;<BR> case=20 104:<BR> sprintf=20 (message,"RC_EMAIL_STARTS_WITH_BLANK");<BR> break;<BR> ca= se=20 105:<BR> sprintf=20 (message,"RC_EMAIL_TOO_LONG");<BR> break;<BR> case=20 106:<BR> sprintf=20 (message,"RC_EMAIL_TOO_SHORT");<BR> break;<BR> case=20 107:<BR> sprintf=20 (message,"RC_NAME_ALREADY_USED");<BR> break;<BR> case=20 108:<BR> sprintf=20 (message,"RC_NAME_CONTAINS_INVALID_CHAR");<BR> break;<BR> = ;case=20 109:<BR> sprintf=20 (message,"RC_NAME_CONTAINS_INVALID_BLANK");<BR> break;<BR>&nbs= p;case=20 110:<BR> sprintf=20 (message,"RC_NAME_DOESNT_EXIST");<BR> break;<BR> case=20 111:<BR> sprintf=20 (message,"RC_NAME_ENDS_WITH_BLANK");<BR> break;<BR> case = 112:<BR> sprintf=20 (message,"RC_NAME_TOO_LONG");<BR> break;<BR> case=20 113:<BR> sprintf=20 (message,"RC_NAME_TOO_SHORT");<BR> break;<BR> case=20 114:<BR> sprintf=20 (message,"RC_NAME_UNUSED");<BR> break;<BR> case=20 115:<BR> sprintf=20 (message,"RC_PASSWORD_TOO_LONG");<BR> break;<BR> case=20 116:<BR> sprintf=20 (message,"RC_PASSWORD_TOO_SHORT");<BR> break;<BR> case=20 117:<BR> sprintf=20 (message,"RC_PASSWORD_IS_WRONG");<BR> break;<BR> case=20 126:<BR> sprintf=20 (message,"RC_NUMBER_ALREADY_USED");<BR> break;<BR> case=20 127:<BR> sprintf=20 (message,"RC_NUMBER_OUT_OF_RANGE");<BR> break;<BR> case=20 128:<BR> sprintf (message,"Privilege Password Too=20 Short");<BR> break;<BR> case 203:<BR> sprintf = (message,"RC_NOT_CHANGE_OWNER");<BR> break;<BR> case=20 204:<BR> sprintf=20 (message,"RC_CANT_FIND_OLD_ELEMENT");<BR> break;<BR> case= =20 211:<BR> sprintf=20 (message,"RC_CANT_CHANGE_OWNER");<BR> break;<BR> case=20 216:<BR> sprintf=20 (message,"RC_CANT_BUILD_HERE");<BR> break;<BR> case=20 232:<BR> sprintf=20 (message,"RC_NOT_ALLOWED");<BR> break;<BR> case=20 300:<BR> sprintf=20 (message,"RC_ENCROACHES");<BR> break;<BR> case=20 301:<BR> sprintf=20 (message,"RC_NO_SUCH_OBJECT");<BR> break;<BR> case=20 302:<BR> sprintf=20 (message,"RC_NOT_DELETE_OWNER");<BR> break;<BR> case=20 303:<BR> sprintf=20 (message,"RC_TOO_MANY_BYTES");<BR> break;<BR> case=20 306:<BR> sprintf=20 (message,"RC_UNREGISTERED_OBJECT");<BR> break;<BR> case=20 308:<BR> sprintf=20 (message,"RC_ELEMENT_ALREADY_EXISTS");<BR> break;<BR> cas= e=20 311:<BR> sprintf=20 (message,"RC_NO_BUILD_RIGHTS");<BR> break;<BR> case=20 313:<BR> sprintf (message,"Object Outside Of World Property=20 Limits");<BR> break;<BR> case = 314:<BR> sprintf=20 (message,"RC_RESTRICTED_OBJECT");<BR> break;<BR> case=20 400:<BR> sprintf=20 (message,"RC_OUT_OF_MEMORY");<BR> break;<BR> case=20 401:<BR> sprintf=20 (message,"RC_NOT_YET");<BR> break;<BR> case=20 402:<BR> sprintf=20 (message,"TIMEOUT");<BR> break;<BR> case=20 403:<BR> sprintf=20 (message,"RC_NULL_POINTER");<BR> break;<BR> case=20 404:<BR> sprintf (message,"Unable To Contact=20 Universe");<BR> break;<BR> case = 405:<BR> sprintf=20 (message,"Unable To Contact World");<BR> break;<BR> case = 406:<BR> sprintf (message,"Invalid World=20 Name");<BR> break;<BR> case 415:<BR> sprintf=20 (message,"RC_SEND_FAILED");<BR> break;<BR> case=20 416:<BR> sprintf=20 (message,"RC_RECEIVE_FAILED");<BR> break;<BR> case=20 421:<BR> sprintf=20 (message,"RC_STREAM_EMPTY");<BR> break;<BR> case=20 422:<BR> sprintf=20 (message,"RC_STREAM_MESSAGE_TOO_LONG");<BR> break;<BR> ca= se=20 423:<BR> sprintf (message,"World Name Too=20 Long");<BR> break;<BR> case 426:<BR> sprintf=20 (message,"Message Too Long");<BR> break;<BR> case=20 429:<BR> sprintf (message,"Unable To Connect to %s :=20 %d",chIP,nPort);<BR> break;<BR> case = 439:<BR> sprintf=20 (message,"No Connection");<BR> break;<BR> case=20 442:<BR> sprintf (message,"Unable To Initialize=20 Network");<BR> break;<BR> case = 443:<BR> sprintf=20 (message,"Incorrect_Message_Length");<BR> break;<BR> case= =20 444:<BR> sprintf=20 (message,"RC_NOT_INITIALIZED");<BR> break;<BR> case=20 445:<BR> sprintf (message,"No BOT Instance=20 Exists.");<BR> break;<BR> case = 446:<BR> sprintf=20 (message,"RC_OUT_BUFFER_FULL");<BR> break;<BR> case=20 447:<BR> sprintf=20 (message,"RC_INVALID_CALLBACK");<BR> break;<BR> case=20 448:<BR> sprintf=20 (message,"RC_INVALID_ATTRIBUTE");<BR> break;<BR> case=20 449:<BR> sprintf=20 (message,"RC_TYPE_MISMATCH");<BR> break;<BR> case=20 450:<BR> sprintf=20 (message,"RC_STRING_TOO_LONG");<BR> break;<BR> case=20 451:<BR> sprintf=20 (message,"RC_READ_ONLY");<BR> break;<BR> case=20 453:<BR> sprintf=20 (message,"RC_INVALID_INSTANCE");<BR> break;<BR> case=20 454:<BR> sprintf=20 (message,"RC_VERSION_MISMATCH");<BR> break;<BR> case=20 461:<BR> sprintf=20 (message,"RC_IN_BUFFER_FULL");<BR> break;<BR> case=20 463:<BR> sprintf=20 (message,"RC_PROTOCOL_ERROR");<BR> break;<BR> case=20 464:<BR> sprintf=20 (message,"RC_QUERY_IN_PROGRESS");<BR> break;<BR> case=20 466:<BR> sprintf=20 (message,"RC_EJECTED");<BR> break;<BR> case=20 467:<BR> sprintf=20 (message,"RC_NOT_WELCOME");<BR> break;<BR> case=20 471:<BR> sprintf=20 (message,"RC_CONNECTION_LOST");<BR> break;<BR> case=20 474:<BR> sprintf=20 (message,"RC_NOT_AVAILABLE");<BR> break; <BR> = }</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial = size=3D2> m_StatusLog.DoClear();</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> if (m_nError =3D=3D=20 0)<BR> {<BR> PlaySound=20 ("Audio/Logfinish.wav",NULL,SND_ASYNC);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> sprintf(reply2, "Bot Name : = [%s]",=20 chBotName);<BR> m_HistoryEdit.Append=20 (status);<BR> sprintf(reply2, "Citizen Number : %d",=20 nCitnum);<BR> m_HistoryEdit.Append = (status);<BR> sprintf=20 (reply2," ");<BR> m_HistoryEdit.Append=20 (status);<BR> sprintf(reply2, "Universe : %s",=20 chUniverse);<BR> m_HistoryEdit.Append=20 (status);<BR> sprintf(reply2, "World : %s",=20 chWorld);<BR> m_HistoryEdit.Append=20 (status);<BR> sprintf(reply2, "Location : Not Coded=20 Yet");<BR> m_HistoryEdit.Append = (status);<BR> sprintf=20 (reply2," ");<BR> m_StatusLog.Append=20 (status);<BR> sprintf(reply2, "Time Running : Not Coded=20 Yet");<BR> m_StatusLog.Append = (status);<BR> }</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial = size=3D2> else<BR> {<BR> PlaySound=20 ("Audio/Error.wav",NULL,SND_ASYNC);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> sprintf (reply2,"=20 ");<BR> m_StatusLog.Append=20 (status);<BR> m_StatusLog.Append=20 (status);<BR> m_StatusLog.Append = (status);<BR> sprintf=20 (reply2,"LOGIN FAILURE");<BR> m_StatusLog.Append=20 (status);<BR> sprintf (reply2,"Reason :=20 %s",message);<BR> m_StatusLog.Append=20 (status);<BR> }</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>}</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial=20 size=3D2>-----------------------------------------------------------</FON= T></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Thanks in advance,</FONT></DIV> <DIV><FONT face=3DArial size=3D2>Andon Coleman</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Senior Software Engineer</FONT></DIV> <DIV><FONT face=3DArial size=3D2>R&D</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Nothing, Inc.</FONT></DIV> <DIV> </DIV> <DIV> </DIV></FONT></DIV></BODY></HTML> ------=_NextPart_000_001A_01BEF257.8EFEEAA0-- Okay, I'm confused here . . . Here's the Source Code and SCRIPT in Question . . .Sep 8, 1999, 3:14pm
This is a multi-part message in MIME format.
------=_NextPart_000_0008_01BEF9FC.2626BBA0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable // UpdaterDlg.cpp : implementation file // #include "stdafx.h" #include "Updater.h" #include "UpdaterDlg.h" #include "afxinet.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] =3D __FILE__; #endif #define HTTPBUFLEN 1024 char httpbuff[HTTPBUFLEN]; bool GetHttpFile(const char *url, const char *filename); /////////////////////////////////////////////////////////////////////////= //// // CUpdaterDlg dialog CUpdaterDlg::CUpdaterDlg(CWnd* pParent /*=3DNULL*/) : CDialog(CUpdaterDlg::IDD, pParent) { file://{{AFX_DATA_INIT(CUpdaterDlg) // NOTE: the ClassWizard will add member initialization here file://}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in = Win32 m_hIcon =3D AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CUpdaterDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); file://{{AFX_DATA_MAP(CUpdaterDlg) // NOTE: the ClassWizard will add DDX and DDV calls here file://}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CUpdaterDlg, CDialog) file://{{AFX_MSG_MAP(CUpdaterDlg) ON_WM_PAINT() ON_WM_QUERYDRAGICON() file://}}AFX_MSG_MAP END_MESSAGE_MAP() /////////////////////////////////////////////////////////////////////////= //// // CUpdaterDlg message handlers BOOL CUpdaterDlg::OnInitDialog() { CDialog::OnInitDialog(); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); CFile NewData ("version.new", CFile::modeRead); char pbuf[2000]; UINT nBytesRead =3D NewData.Read( pbuf, 1000 ); CString msg =3D pbuf; int NewVersion; int OldVersion; msg =3D msg.Left(msg.Find("%N")); msg.MakeReverse(); msg =3D msg.Left(msg.Find("VM%")); msg.MakeReverse(); NewVersion =3D atoi (msg); if (1 =3D=3D 1) { CFile OldData ("version.dat", CFile::modeRead); char pbuf2[2000]; UINT nBytesRead =3D OldData.Read( pbuf2, 1000 ); CString msg =3D pbuf2; msg =3D msg.Left(msg.Find("%N")); msg.MakeReverse(); msg =3D msg.Left(msg.Find("VM%")); msg.MakeReverse(); OldVersion =3D atoi (msg); =20 if (NewVersion =3D=3D OldVersion) { OldVersion =3D atoi (msg); msg.Format(" Update Patch %d Detected . . .\r\n\r\n Verifying . . . . = .. . . . . . . . Failure!\r\n Creating Data Table . . . Failure!\r\n\r\n = NO DIFFERENCE IN VERSION!",NewVersion); GetDlgItem(IDC_Status)->SetWindowText(msg); } else if (NewVersion > OldVersion) { msg.Format(" Update Patch %d Detected . . .\r\n\r\n Verifying . . . . = .. . . . . . . . Success!\r\n Creating Data Table . . . Success!\r\n\r\n = Applying Patch for %d to %d",NewVersion,NewVersion,OldVersion); GetDlgItem(IDC_Status)->SetWindowText(msg); msg =3D pbuf; msg =3D msg.Left(msg.Find("1L")); msg.MakeReverse(); msg =3D msg.Left(msg.Find("N%")); msg.MakeReverse(); int FILES =3D atoi (msg); msg =3D pbuf; int FILENUM =3D 1; CString LOCAL; CString EXTERNAL; int VERSION; while (FILENUM !=3D FILES) { CString NUML; CString NUML2; CString NUMF; CString NUMV; NUML.Format("%dL",FILENUM); NUML2.Format("%dL",(FILENUM+1)); NUMF.Format("%dF",FILENUM); NUMV.Format("%dV",FILENUM); =20 msg =3D pbuf; msg =3D msg.Left(msg.Find(NUMF)); NUML.MakeReverse(); msg.MakeReverse(); msg =3D msg.Left(msg.Find(NUML)); NUML.MakeReverse(); msg.MakeReverse(); LOCAL =3D msg; msg =3D pbuf; msg =3D msg.Left(msg.Find(NUMV)); NUMF.MakeReverse(); msg.MakeReverse(); msg =3D msg.Left(msg.Find(NUMF)); NUMF.MakeReverse(); msg.MakeReverse(); EXTERNAL =3D msg; msg =3D pbuf; msg =3D msg.Left(msg.Find(NUML2)); NUMV.MakeReverse(); msg.MakeReverse(); msg =3D msg.Left(msg.Find(NUMV)); NUMV.MakeReverse(); msg.MakeReverse(); =20 VERSION =3D atoi (msg); if (VERSION > OldVersion) { LOCAL.Remove(' '); EXTERNAL.Remove(' '); RedrawWindow(NULL,NULL,RDW_UPDATENOW); if (GetHttpFile(EXTERNAL, LOCAL) =3D=3D TRUE) MessageBox("It Worked!",MB_OK); else { char reply6[255]; sprintf(reply6,"%s\r\n%s",LOCAL,EXTERNAL); MessageBox(reply6,MB_OK); } } msg.Format(" Local : %s\n External : %s\n Update : = %d",LOCAL,EXTERNAL,VERSION); GetDlgItem(IDC_File)->SetWindowText(msg); FILENUM +=3D 1; } char *pFileName =3D "version.dat"; OldData.Close(); CFile::Remove(pFileName); char *pFileName2 =3D "version.new"; NewData.Close(); CFile::Rename(pFileName2, pFileName); } else { OldVersion =3D atoi (msg); msg.Format(" Update Patch \? Detected . . .\r\n\r\n Verifying . . . . = .. . . . . . . . Failure!\r\n Creating Data Table . . . Failure!\r\n\r\n = ERROR : UNKNOWN"); GetDlgItem(IDC_Status)->SetWindowText(msg); } } return TRUE; // return TRUE unless you set the focus to a control } // If you add a minimize button to your dialog, you will need the code = below // to draw the icon. For MFC applications using the document/view = model, // this is automatically done for you by the framework. void CUpdaterDlg::OnPaint()=20 { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon =3D GetSystemMetrics(SM_CXICON); int cyIcon =3D GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x =3D (rect.Width() - cxIcon + 1) / 2; int y =3D (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user = drags // the minimized window. HCURSOR CUpdaterDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } bool GetHttpFile(const char *url, const char *filename) { bool success =3D FALSE; TRY { CInternetSession mysession; CStdioFile *remotefile =3D mysession.OpenURL(url, = 1,INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_RELOAD); CFile myfile (filename, CFile::modeCreate|CFile::modeWrite); int numbytes; while (numbytes =3D remotefile->Read(httpbuff, HTTPBUFLEN)) { myfile.Write(httpbuff, numbytes); } success =3D TRUE; } CATCH_ALL(e) { success =3D FALSE; } END_CATCH_ALL; return (success); } SCRIPT : %MV 0 %N 9 1L Ultra BOT.exe=20 1F UltraBOT.exe=20 1V 1 2L Updater.exe=20 2F Updater.exe=20 2V 1 3L AW.DLL=20 3F AW.DLL=20 3V 1 4L Audio\DJ.mid=20 4F Audio/DJ.mid=20 4V 1 5L Audio\jeopardy.mid=20 5F Audio/jeopardy.mid=20 5V 1 6L Audio\Error.wav=20 6F Audio/Error.wav=20 6V 1 7L Audio\Logfinish.wav=20 7F Audio/Logfinish.wav=20 7V 1 8L Audio\Logstart.wav=20 8F Audio/Logstart.wav=20 8V 1 9L Audio\Startup.wav=20 9F Audio/Startup.wav=20 9V 1 %TM "Testing" Anyway, it always returns FALSE when it tries to use Fabers little HTTP = Function. If need be, I'll send you the ENTIRE Project - It's VERY small, and my = preliminary .dat structure info. Thanks, Andon Coleman Senior Programmer R&D Nothing, Inc. ------=_NextPart_000_0008_01BEF9FC.2626BBA0 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META content=3D"text/html; charset=3Diso-8859-1" = http-equiv=3DContent-Type> <META content=3D"MSHTML 5.00.2614.3500" name=3DGENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=3D#ffffff> <DIV><FONT face=3DArial size=3D2>// UpdaterDlg.cpp : implementation=20 file<BR>//</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>#include "stdafx.h"<BR>#include=20 "Updater.h"<BR>#include "UpdaterDlg.h"<BR>#include = "afxinet.h"</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>#ifdef _DEBUG<BR>#define new = DEBUG_NEW<BR>#undef=20 THIS_FILE<BR>static char THIS_FILE[] =3D = __FILE__;<BR>#endif</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>#define HTTPBUFLEN 1024<BR>char=20 httpbuff[HTTPBUFLEN];</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>bool GetHttpFile(const char *url, const = char=20 *filename);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial=20 size=3D2>////////////////////////////////////////////////////////////////= /////////////<BR>//=20 CUpdaterDlg dialog</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>CUpdaterDlg::CUpdaterDlg(CWnd* pParent=20 /*=3DNULL*/)<BR> : CDialog(CUpdaterDlg::IDD, = pParent)<BR>{<BR> <A=20 href=3D"file://{{">file://{{</A>AFX_DATA_INIT(CUpdaterDlg)<BR>  = ;// NOTE:=20 the ClassWizard will add member initialization here<BR> <A=20 href=3D"file://}}">file://}}</A>AFX_DATA_INIT<BR> // Note that = LoadIcon does=20 not require a subsequent DestroyIcon in Win32<BR> m_hIcon =3D=20 AfxGetApp()->LoadIcon(IDR_MAINFRAME);<BR>}</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>void = CUpdaterDlg::DoDataExchange(CDataExchange*=20 pDX)<BR>{<BR> CDialog::DoDataExchange(pDX);<BR> <A=20 href=3D"file://{{">file://{{</A>AFX_DATA_MAP(CUpdaterDlg)<BR> = // NOTE:=20 the ClassWizard will add DDX and DDV calls here<BR> <A=20 href=3D"file://}}">file://}}</A>AFX_DATA_MAP<BR>}</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>BEGIN_MESSAGE_MAP(CUpdaterDlg, = CDialog)<BR> <A=20 href=3D"file://{{">file://{{</A>AFX_MSG_MAP(CUpdaterDlg)<BR> ON_WM_P= AINT()<BR> ON_WM_QUERYDRAGICON()<BR> <A=20 href=3D"file://}}">file://}}</A>AFX_MSG_MAP<BR>END_MESSAGE_MAP()</FONT></= DIV> <DIV> </DIV> <DIV><FONT face=3DArial=20 size=3D2>////////////////////////////////////////////////////////////////= /////////////<BR>//=20 CUpdaterDlg message handlers</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>BOOL = CUpdaterDlg::OnInitDialog()<BR>{</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial = size=3D2> CDialog::OnInitDialog();</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> SetIcon(m_hIcon,=20 TRUE);<BR> SetIcon(m_hIcon, FALSE);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> CFile NewData ("version.new",=20 CFile::modeRead);<BR> char pbuf[2000];<BR> UINT nBytesRead =3D = NewData.Read( pbuf, 1000 );<BR> CString msg =3D pbuf;<BR> int=20 NewVersion;<BR> int OldVersion;</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> msg =3D=20 msg.Left(msg.Find("%N"));<BR> msg.MakeReverse();<BR> msg =3D=20 msg.Left(msg.Find("VM%"));<BR> msg.MakeReverse();<BR> NewVersio= n =3D=20 atoi (msg);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> if (1 =3D=3D = 1)<BR> {<BR> CFile=20 OldData ("version.dat", CFile::modeRead);<BR> char=20 pbuf2[2000];<BR> UINT nBytesRead =3D OldData.Read( pbuf2, = 1000=20 );<BR> CString msg =3D pbuf2;</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> msg =3D=20 msg.Left(msg.Find("%N"));<BR> msg.MakeReverse();<BR> &nbs= p;msg =3D=20 msg.Left(msg.Find("VM%"));<BR> msg.MakeReverse();<BR> &nb= sp;OldVersion=20 =3D atoi (msg);<BR> <BR> if (NewVersion =3D=3D=20 OldVersion)<BR> {<BR> OldVersion =3D atoi=20 (msg);<BR> msg.Format(" Update Patch %d Detected . . = ..\r\n\r\n=20 Verifying . . . . . . . . . . . . Failure!\r\n Creating Data Table . . . = Failure!\r\n\r\n NO DIFFERENCE IN=20 VERSION!",NewVersion);<BR> GetDlgItem(IDC_Status)->Se= tWindowText(msg);<BR> }</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> else if (NewVersion >=20 OldVersion)<BR> {</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> msg.Format(" Update = Patch %d=20 Detected . . .\r\n\r\n Verifying . . . . . . . . . . . . Success!\r\n = Creating=20 Data Table . . . Success!\r\n\r\n Applying Patch for %d to=20 %d",NewVersion,NewVersion,OldVersion);<BR> GetDlgItem(ID= C_Status)->SetWindowText(msg);<BR> msg=20 =3D pbuf;<BR> msg =3D=20 msg.Left(msg.Find("1L"));<BR> msg.MakeReverse();<BR>&nbs= p; msg=20 =3D = msg.Left(msg.Find("N%"));<BR> msg.MakeReverse();</FONT><= /DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> int FILES =3D atoi=20 (msg);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> msg =3D=20 pbuf;<BR> int FILENUM =3D 1;</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> CString=20 LOCAL;<BR> CString EXTERNAL;<BR> int=20 VERSION;</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> while (FILENUM !=3D=20 FILES)<BR> {<BR> CString=20 NUML;<BR> CString=20 NUML2;<BR> CString=20 NUMF;<BR> CString NUMV;</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial=20 size=3D2> NUML.Format("%dL",FILENUM);<BR> &nb= sp; NUML2.Format("%dL",(FILENUM+1));<BR> &nbs= p;NUMF.Format("%dF",FILENUM);<BR> NUMV.Format("%dV= ",FILENUM);<BR> <BR> msg=20 =3D pbuf;<BR> msg =3D=20 msg.Left(msg.Find(NUMF));<BR> NUML.MakeReverse();<= BR> msg.MakeReverse();<BR> = msg=20 =3D=20 msg.Left(msg.Find(NUML));<BR> NUML.MakeReverse();<= BR> msg.MakeReverse();</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> LOCAL =3D = msg;</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> msg =3D=20 pbuf;<BR> msg =3D=20 msg.Left(msg.Find(NUMV));<BR> NUMF.MakeReverse();<= BR> msg.MakeReverse();<BR> = msg=20 =3D=20 msg.Left(msg.Find(NUMF));<BR> NUMF.MakeReverse();<= BR> msg.MakeReverse();</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> EXTERNAL =3D=20 msg;</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> msg =3D=20 pbuf;<BR> msg =3D=20 msg.Left(msg.Find(NUML2));<BR> NUMV.MakeReverse();= <BR> msg.MakeReverse();<BR>  = ;msg=20 =3D=20 msg.Left(msg.Find(NUMV));<BR> NUMV.MakeReverse();<= BR> msg.MakeReverse();<BR> = <BR> VERSION=20 =3D atoi (msg);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> if (VERSION = >=20 OldVersion)<BR> {</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial = size=3D2> LOCAL.Remove('=20 ');<BR> EXTERNAL.Remove(' ');</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial=20 size=3D2> RedrawWindow(NULL,NULL,RDW_UPDATEN= OW);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> if=20 (GetHttpFile(EXTERNAL, LOCAL) =3D=3D=20 TRUE)<BR> MessageBox("It=20 Worked!",MB_OK);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial=20 size=3D2> else<BR> &n= bsp;{<BR> char=20 reply6[255];<BR> sprintf(reply6,"%s\r\= n%s",LOCAL,EXTERNAL);<BR> MessageBox(r= eply6,MB_OK);<BR> }<BR> &nb= sp;}</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial = size=3D2><BR> msg.Format("=20 Local : %s\n External : %s\n Update :=20 %d",LOCAL,EXTERNAL,VERSION);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial=20 size=3D2> GetDlgItem(IDC_File)->SetWindowText(m= sg);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2><BR> FILENUM = +=3D=20 1;<BR> }</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> char *pFileName =3D=20 "version.dat";<BR> OldData.Close();<BR>  = ;CFile::Remove(pFileName);<BR> char=20 *pFileName2 =3D=20 "version.new";<BR> NewData.Close();<BR>  = ;CFile::Rename(pFileName2,=20 pFileName);<BR> }</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial=20 size=3D2> else<BR> {<BR> OldVersio= n =3D atoi=20 (msg);<BR> msg.Format(" Update Patch \? Detected . . = ..\r\n\r\n=20 Verifying . . . . . . . . . . . . Failure!\r\n Creating Data Table . . . = Failure!\r\n\r\n ERROR :=20 UNKNOWN");<BR> GetDlgItem(IDC_Status)->SetWindowText(= msg);<BR> }<BR> }<BR> return=20 TRUE; // return TRUE unless you set the focus to a=20 control<BR>}<BR>// If you add a minimize button to your dialog, you will = need=20 the code below<BR>// to draw the icon. For MFC applications = using=20 the document/view model,<BR>// this is automatically done for you = by the=20 framework.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>void CUpdaterDlg::OnPaint() = <BR>{<BR> if=20 (IsIconic())<BR> {<BR> CPaintDC dc(this); // device = context for=20 painting</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial = size=3D2> SendMessage(WM_ICONERASEBKGND, (WPARAM)=20 dc.GetSafeHdc(), 0);</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> // Center icon in client=20 rectangle<BR> int cxIcon =3D=20 GetSystemMetrics(SM_CXICON);<BR> int cyIcon =3D=20 GetSystemMetrics(SM_CYICON);<BR> CRect=20 rect;<BR> GetClientRect(&rect);<BR> int x =3D=20 (rect.Width() - cxIcon + 1) / 2;<BR> int y =3D (rect.Height() = - cyIcon=20 + 1) / 2;</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> // Draw the=20 icon<BR> dc.DrawIcon(x, y,=20 m_hIcon);<BR> }<BR> else<BR> {<BR> CDialog::OnP= aint();<BR> }<BR>}</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>// The system calls this to obtain the = cursor to=20 display while the user drags<BR>// the minimized = window.<BR>HCURSOR=20 CUpdaterDlg::OnQueryDragIcon()<BR>{<BR> return (HCURSOR)=20 m_hIcon;<BR>}</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>bool GetHttpFile(const char *url, const = char=20 *filename)<BR>{<BR> bool success =3D FALSE;<BR> TRY = {<BR> =20 CInternetSession mysession;<BR> CStdioFile *remotefile =3D=20 mysession.OpenURL(url,=20 1,INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_RELOAD);<BR> CFile = myfile=20 (filename, CFile::modeCreate|CFile::modeWrite);<BR> int=20 numbytes;<BR> while (numbytes =3D remotefile->Read(httpbuff,=20 HTTPBUFLEN))<BR> {<BR> myfile.Write(httpbuff,=20 numbytes);<BR> }<BR> success =3D=20 TRUE;<BR> }<BR> CATCH_ALL(e)<BR> {<BR> success =3D=20 FALSE;<BR> }<BR> END_CATCH_ALL;<BR> return=20 (success);<BR>}<BR></FONT></DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>SCRIPT :</FONT></DIV> <DIV><FONT face=3DArial size=3D2><FONT size=3D2> <P>%MV 0</P> <P>%N 9</P> <P>1L Ultra BOT.exe </P> <P>1F UltraBOT.exe </P> <P>1V 1</P> <P>2L Updater.exe </P> <P>2F Updater.exe </P> <P>2V 1</P> <P>3L AW.DLL </P> <P>3F AW.DLL </P> <P>3V 1</P> <P>4L Audio\DJ.mid </P> <P>4F Audio/DJ.mid </P> <P>4V 1</P> <P>5L Audio\jeopardy.mid </P> <P>5F Audio/jeopardy.mid </P> <P>5V 1</P> <P>6L Audio\Error.wav </P> <P>6F Audio/Error.wav </P> <P>6V 1</P> <P>7L Audio\Logfinish.wav </P> <P>7F Audio/Logfinish.wav </P> <P>7V 1</P> <P>8L Audio\Logstart.wav </P> <P>8F Audio/Logstart.wav </P> <P>8V 1</P> <P>9L Audio\Startup.wav </P> <P>9F Audio/Startup.wav </P> <P>9V 1</P> <P>%TM "Testing"</P> <P> </P> <P>Anyway, it always returns FALSE when it tries to use Fabers little = HTTP=20 Function.</P> <P>If need be, I'll send you the ENTIRE Project - It's VERY small,=20 and my preliminary .dat structure info.</P> <P> </P> <P>Thanks,</P> <P>Andon Coleman</P> <P> </P> <P>Senior Programmer</P> <P>R&D</P> <P> </P> <P>Nothing, Inc.</P></FONT></DIV></FONT></BODY></HTML> ------=_NextPart_000_0008_01BEF9FC.2626BBA0-- Okay, I'm confused here . . . Here's the Source Code and SCRIPT in Question . . .Oct 13, 1999, 6:02pm
This is a multi-part message in MIME format.
------=_NextPart_000_0013_01BF1594.6BA9DAA0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Actually, I fixed every single bug :) For some reason attempting to put my HTTP Get File function into a = Thread of its own was a bad idea . . . So, I moved the ENTIRE Process = into its own thread, now it works great . . . You can move the window = around while its downloading, and the Progress indicators work = perfectly. But thanks for the help originally . . . Andon M. Coleman Senior Programmer R&D Nothing, Inc. [View Quote] If the project is VC, I could take a look. (I have VC6.) Send it to = serac at lightmail.com. P.S. If you are interested in Flex/Bison, I highly suggest you buy the = O'Reilly & Associates, Inc. book "Lex & Yacc" -- Levine, Mason & Brown = (ISBN 1-56592-000-7). And Delorie (creator of DJGPP) has Flex and Bison = ports for DOS. There is a little bit of work to get VC to automatically = run them. Flex does have support for a C++ lexical analyzer. However, = I've not been able to find a reliable C++ version of the Bison parser. = But remember that all C code runs along side C++, so you could probably = get along with using the C versions of both. [View Quote] Now my only problem is the downloaded update files come out = corrupt, perhaps you could take a look at the project file? (It's only = 24KB Compiled, so it's not large by ANY means). ------=_NextPart_000_0013_01BF1594.6BA9DAA0 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META content=3D"text/html; charset=3Diso-8859-1" = http-equiv=3DContent-Type> <META content=3D"MSHTML 5.00.2614.3500" name=3DGENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=3D#ffffff> <DIV><FONT face=3DArial>Actually, I fixed every single = bug :)</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial> For some reason attempting to = put my=20 HTTP Get File function into a Thread of its own was a bad idea . . . So, = I moved=20 the ENTIRE Process into its own thread, now it works great . . . You can = move=20 the window around while its downloading, and the Progress indicators = work=20 perfectly.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>But thanks for the help originally . . = ..</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>Andon M. Coleman</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>Senior Programmer</FONT></DIV> <DIV><FONT face=3DArial>R&D</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>Nothing, Inc.</FONT></DIV> <BLOCKQUOTE=20 style=3D"BORDER-LEFT: #000000 2px solid; MARGIN-LEFT: 5px; MARGIN-RIGHT: = 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px"> <DIV>Aaron Hill <<A=20 href=3D"mailto:serac at lightmail.com">serac at lightmail.com</A>> wrote = in message=20 <A href=3D"news:380291fc at homer">news:380291fc at homer</A>...</DIV> <DIV>Have you looked into Flex/Bison to doing the parsing = for=20 you? Using these tools you can spend more time on the more = important=20 code in your program.</DIV> <DIV> </DIV> <DIV>If the project is VC, I could take a look. (I have = VC6.) Send=20 it to <A = href=3D"mailto:serac at lightmail.com">serac at lightmail.com</A>.</DIV> <DIV> </DIV> <DIV>P.S. If you are interested in Flex/Bison, I highly suggest you = buy the=20 O'Reilly & Associates, Inc. book "Lex & Yacc" -- Levine, = Mason=20 & Brown (ISBN 1-56592-000-7). And Delorie (creator of DJGPP) = has=20 Flex and Bison ports for DOS. There is a little bit of work to = get VC to=20 automatically run them. Flex does have support for a C++ lexical = analyzer. However, I've not been able to find a reliable C++ = version of=20 the Bison parser. But remember that all C code runs along side = C++, so=20 you could probably get along with using the C versions of = both.</DIV> <BLOCKQUOTE=20 style=3D"BORDER-LEFT: #000000 2px solid; MARGIN-LEFT: 5px; = MARGIN-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px"> <DIV>Andon M. Coleman <<A=20 href=3D"mailto:gizmo98 at earthlink.net">gizmo98 at earthlink.net</A>> = wrote in=20 message <A = href=3D"news:38016db3.0 at homer">news:38016db3.0 at homer</A>...</DIV> <DIV><FONT face=3DArial> Actually, my problem was = in my=20 "Parsing Code" . . . I simply added some more code to strain the=20 data to the Left 4 Bytes in the CString (Since through my = formatting /=20 testing I have added many more bytes) . . . And voila, it worked=20 :)</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial> Now my only problem is = the=20 downloaded update files come out corrupt, perhaps you could take a = look at=20 the project file? (It's only 24KB Compiled, so it's not large by ANY = means).</FONT></DIV></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML> ------=_NextPart_000_0013_01BF1594.6BA9DAA0-- Simple method for creating "Lock-Up Look" FREE Logins, Sample Source included!!!Sep 22, 1999, 5:54pm
This is a multi-part message in MIME format.
------=_NextPart_000_002C_01BF0512.BBF7E980 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Ooopsies, already I discovered a BUG . . . The Name specified is too = long . . . [View Quote] Q. What's this "Lock-Up Look", and what's it caused by? A. The "Lock-Up Look" is named that because, when you call the AW SDK = Login Functions without any intervention, your Dialog Thread does not = receive the WIN32 Message Pump until each one of functions you call has = finished. Subsequently, your Dialog Thread is not able to do a Redraw, = causing undesired Dialog Painting effects. Q. What is this Thread you speak of? A. Think of a thread in terms of real life . . .=20 Imagine our program as a string of yarn. Now, think back to kindergarten, what is yarn made of? --- Why, = threads of course! =20 This applies to WIN32 Programming also, however, WIN32 Programs = are not usually made of hundreds of threads :) --- Usually there's 2 or = 3, and in the case of simple MFC App Wizard applications, there's 1. =20 This single thread is assigned the job of many things, including : = Repainting the windows, and any code executed from within it (Such as a = while block) . . . While blocks will cause the thread to focus in ONLY = on repeating the code contained inside the block, and not redraw the = windows, or any of the other stuff it's SUPPOSED to do Q. Alrighty, that was a kind of loaded answer . . . How does Andon13 = solve the "Lock-Up Look" problem? A. Haven't you learned anything so far? =3DP The most simple solution to the whole problem is the one used . . = .. =20 In this work-around, we create a Background Worker thread . . . = This thread has no Dialog Boxes or anything assigned to it, so it can = focus solely on the AW SDK Initialization / Login --- Further, it has = the ability to send data to the MAIN Thread, which is the basis for = the nifty looking status indicator used in this solution. =20 Q. Wow, sounds interesting . . . Is it hard to implement? A. No, not at all --- The whole Sample Source code has been commented = from head to toe (Well, the functions relating to the LOGIN anyway). NOTE: Here's a list of syntax / usage / purpose for the most commonly used = functions in this sample code : Function: Class: = Usage: = = = Return Type: NewStatus(CString LOG, int nTYPE); CLogin Log is the = message to be appended to the status text area of the Status Dialog, = nTYPE is an integer value specifying the type of Status Message being = sent VOID = nTYPE: = -1 =3D Append without increasing the Progress Indicator's = Position = 0 =3D Error --- This removes ANY progress currently shown = in the Progress Indicator = 1 =3D Append and Step the Progress indicator up 1 notch. Function: = = = Class: Usage: Login (CString chPassword, int nCitnum, int nX, int nY, int nZ, int = nYAW, int nAV, CString WorldName, CString chIP, int nPort, CString = chBotName) CLogin Pretty straight forward . . . This function = is to be called ONLY from within the Thread. Return Type: Boolean -- TRUE if the login completed without any errors, = otherwise, it returns FALSE. Function: Class: = Usage: ThreadFunc (LPVOID pParam) N/A (Global) This is = called with the creation of the thread . . . There is no need to modify = the Input / Output to this whatsoever, however, you may change the = functions called from it (Login being the only important one) Return Type: UINT -- No need for intervention with this, just let = WIN32 Process it. Function: = Class: Usage: = = = Return Type: OnThreadFinished (WPARAM wParam, LPARAM lParam) CLogin = This is called by the Global Scope call to = ::PostMessage(There's some parameter's in here, but who cares? =3D)) = LONG --- Leave this to WIN32 That's pretty much it --- If you have any questions, or find any BUGs, = please E-Mail me : Andon M. Coleman at : Gizmo98 at earthlink.net Andon M. Coleman Senior Programmer R&D Nothing, Inc. P.S. I can't forget to give J=F6rg K=F6nig credit for his nice little = Bitmap Based Dialog code . . . ------=_NextPart_000_002C_01BF0512.BBF7E980 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META content=3D"text/html; charset=3Diso-8859-1" = http-equiv=3DContent-Type> <META content=3D"MSHTML 5.00.2614.3500" name=3DGENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=3D#ffffff> <DIV><FONT face=3DArial size=3D2>Ooopsies, already I discovered a BUG . = .. . The Name=20 specified is too long . . .</FONT></DIV> <BLOCKQUOTE=20 style=3D"BORDER-LEFT: #000000 2px solid; MARGIN-LEFT: 5px; MARGIN-RIGHT: = 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px"> <DIV>Andon M. Coleman <<A=20 href=3D"mailto:gizmo98 at earthlink.net">gizmo98 at earthlink.net</A>> = wrote in=20 message <A = href=3D"news:37e92b4d.0 at homer">news:37e92b4d.0 at homer</A>...</DIV> <DIV><FONT face=3DArial size=3D2> <DIV> <DIV><FONT face=3DArial size=3D2>Q. What is this?</FONT></DIV> <DIV><FONT face=3DArial size=3D2>A. A method devised by Andon13 to = work around the=20 problems associated with calling the AW SDK Login = Functions.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Q. What's this "Lock-Up Look", and = what's it=20 caused by?</FONT></DIV> <DIV><FONT face=3DArial size=3D2>A. The "Lock-Up Look" is named that = because, when=20 you call the AW SDK Login Functions without any intervention, your = Dialog=20 Thread does not receive the WIN32 Message Pump until each one of=20 functions you call has finished.</FONT></DIV> <DIV><FONT face=3DArial size=3D2> Subsequently, your = Dialog=20 Thread is not able to do a Redraw, causing undesired Dialog Painting=20 effects.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Q. What is this Thread you speak = of?</FONT></DIV> <DIV><FONT face=3DArial size=3D2>A. </FONT><FONT face=3DArial = size=3D2>Think of a=20 thread in terms of real life . . . </FONT></DIV> <DIV><FONT face=3DArial size=3D2> Imagine our = program as a=20 string of yarn.</FONT></DIV> <DIV><FONT face=3DArial size=3D2> Now, think back to = kindergarten, what is yarn made of? --- Why, threads of = course!</FONT></DIV> <DIV><FONT face=3DArial size=3D2> </FONT></DIV> <DIV><FONT face=3DArial size=3D2> This applies to = WIN32=20 Programming also, however, WIN32 Programs are not usually made of = hundreds of=20 threads :) --- Usually there's 2 or 3, and in the case of simple MFC = App=20 Wizard applications, there's 1.</FONT></DIV> <DIV><FONT face=3DArial size=3D2> </FONT></DIV> <DIV><FONT face=3DArial size=3D2> This single thread = is assigned=20 the job of many things, including : Repainting the windows, and any = code=20 executed from within it (Such as a while block) . . . While blocks = will cause=20 the thread to focus in ONLY on repeating the code contained inside the = block,=20 and not redraw the windows, or any of the other = stuff it's=20 SUPPOSED to do</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Q. Alrighty, that was a kind of = loaded answer . .=20 . How does Andon13 solve the "Lock-Up Look" problem?</FONT></DIV> <DIV><FONT face=3DArial size=3D2>A. Haven't you learned anything so = far?=20 =3DP</FONT></DIV> <DIV><FONT face=3DArial size=3D2> The most simple = solution to=20 the whole problem is the one used . . .</FONT></DIV> <DIV><FONT face=3DArial size=3D2> </FONT></DIV> <DIV><FONT face=3DArial size=3D2> In this = work-around, we create=20 a Background Worker thread . . . This thread has no Dialog Boxes or = anything=20 assigned to it, so it can focus solely on the AW SDK Initialization / = Login=20 --- Further, it has the ability to send data to the MAIN = Thread, which is=20 the basis for the nifty looking status = indicator used=20 in this solution.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>Q. Wow, sounds interesting . . . Is = it hard to=20 implement?</FONT></DIV> <DIV><FONT face=3DArial size=3D2>A. No, not at all --- The whole = Sample Source=20 code has been commented from head to toe (Well, the functions relating = to the=20 LOGIN anyway).</FONT></DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>NOTE:</FONT></DIV> <DIV><FONT face=3DArial size=3D2>Here's a list of syntax / usage / = purpose for the=20 most commonly used functions in this sample code :</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2><FONT face=3DArial size=3D2><FONT = face=3DArial=20 = size=3D2>Function: &= nbsp; &n= bsp; &nb= sp; Class:&nbs= p; =20 =20 Usage: =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 Return Type:</FONT></FONT></FONT></DIV> <DIV><FONT face=3DArial size=3D2>NewStatus(CString LOG, int=20 nTYPE); =20 = CLogin &= nbsp; =20 Log is the message to be appended to the status text area of the = Status=20 Dialog, nTYPE is an integer value specifying the type of Status = Message being=20 = sent &nb= sp; VOID</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial=20 = size=3D2> &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p;=20 nTYPE:</FONT></DIV> <DIV><FONT face=3DArial=20 = size=3D2> &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p;=20 -1 =3D Append without increasing the Progress Indicator's = Position</FONT></DIV> <DIV><FONT face=3DArial=20 = size=3D2> &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p; 0=20 =3D Error --- This removes ANY progress currently shown in the = Progress=20 Indicator</FONT></DIV> <DIV><FONT face=3DArial=20 = size=3D2> &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p; 1=20 =3D Append and Step the Progress indicator up 1 notch.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2><FONT face=3DArial size=3D2><FONT = face=3DArial=20 size=3D2><FONT face=3DArial=20 = size=3D2>Function: &= nbsp; &n= bsp; &nb= sp; &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p;  = ;=20 Class: =20 Usage:</FONT></FONT></FONT></FONT></DIV> <DIV><FONT face=3DArial size=3D2>Login (CString chPassword, int = nCitnum, int nX,=20 int nY, int nZ, int nYAW, int nAV, CString WorldName, CString chIP, = int nPort,=20 CString chBotName) CLogin =20 Pretty straight forward . . . This function is to = be called=20 ONLY from within the Thread.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Return Type:</FONT></DIV> <DIV><FONT face=3DArial = size=3D2>Boolean --=20 TRUE if the login completed without any errors, = otherwise,=20 it returns FALSE.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> <DIV><FONT face=3DArial size=3D2>Function: = =20 = =20 =20 = Class: &= nbsp; =20 Usage:</FONT></DIV>ThreadFunc (LPVOID = pParam) =20 N/A=20 = (Global)  = ; This=20 is called with the creation of the thread . . . There is no need to = modify the=20 Input / Output to this whatsoever, however, you may change the = functions=20 called from it (Login being the only important one)</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Return Type:</FONT></DIV> <DIV><FONT face=3DArial size=3D2>UINT =20 -- No need for = intervention with this, just let WIN32 Process it.</FONT></DIV> <DIV> </DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> <DIV><FONT face=3DArial size=3D2>Function: = =20 = =20 = =20 = =20 = =20 =20 = Class: &= nbsp; =20 = Usage: &= nbsp; &n= bsp; &nb= sp; &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p;  = ; = &= nbsp; Return=20 Type:</FONT></DIV> <DIV>OnThreadFinished (WPARAM wParam, LPARAM=20 = lParam) CLogin = &= nbsp; =20 This is called by the Global Scope call to ::PostMessage(There's some=20 parameter's in here, but who cares?=20 = =3D)) &n= bsp; LONG=20 --- Leave this to WIN32</DIV> <DIV> </DIV> <DIV>That's pretty much it --- If you have any questions, or find any = BUGs,=20 please E-Mail me : Andon M. Coleman at : <A=20 href=3D"mailto:Gizmo98 at earthlink.net">Gizmo98 at earthlink.net</A></DIV> <DIV> </DIV> <DIV>Andon M. Coleman</DIV> <DIV><BR>Senior Programmer</DIV> <DIV>R&D</DIV> <DIV> </DIV> <DIV>Nothing, Inc.</DIV> <DIV> </DIV> <DIV> </DIV> <DIV>P.S. I can't forget to give J=F6rg K=F6nig credit for his nice = little Bitmap=20 Based Dialog code . .=20 ..</DIV></FONT></DIV></DIV></FONT></DIV></BLOCKQUOTE></BODY></HTML> ------=_NextPart_000_002C_01BF0512.BBF7E980-- Simple method for creating "Lock-Up Look" FREE Logins, Sample Source included!!!Sep 22, 1999, 6:02pm
This is a multi-part message in MIME format.
------=_NextPart_000_003E_01BF0513.CF8FF9A0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hmmmmmm --- Converting that out of my DJ BOT and into a simple Sample = BOT has presented a few bugs, maybe by tomorrow I'll have them all fixed = .. . . Regards, Andon13 [View Quote] Q. What's this "Lock-Up Look", and what's it caused by? A. The "Lock-Up Look" is named that because, when you call the AW = SDK Login Functions without any intervention, your Dialog Thread does = not receive the WIN32 Message Pump until each one of functions you call = has finished. Subsequently, your Dialog Thread is not able to do a Redraw, = causing undesired Dialog Painting effects. Q. What is this Thread you speak of? A. Think of a thread in terms of real life . . .=20 Imagine our program as a string of yarn. Now, think back to kindergarten, what is yarn made of? --- Why, = threads of course! =20 This applies to WIN32 Programming also, however, WIN32 Programs = are not usually made of hundreds of threads :) --- Usually there's 2 or = 3, and in the case of simple MFC App Wizard applications, there's 1. =20 This single thread is assigned the job of many things, including = : Repainting the windows, and any code executed from within it (Such as = a while block) . . . While blocks will cause the thread to focus in ONLY = on repeating the code contained inside the block, and not redraw the = windows, or any of the other stuff it's SUPPOSED to do Q. Alrighty, that was a kind of loaded answer . . . How does Andon13 = solve the "Lock-Up Look" problem? A. Haven't you learned anything so far? =3DP The most simple solution to the whole problem is the one used . = .. . =20 In this work-around, we create a Background Worker thread . . . = This thread has no Dialog Boxes or anything assigned to it, so it can = focus solely on the AW SDK Initialization / Login --- Further, it has = the ability to send data to the MAIN Thread, which is the basis for = the nifty looking status indicator used in this solution. =20 Q. Wow, sounds interesting . . . Is it hard to implement? A. No, not at all --- The whole Sample Source code has been = commented from head to toe (Well, the functions relating to the LOGIN = anyway). NOTE: Here's a list of syntax / usage / purpose for the most commonly used = functions in this sample code : Function: Class: = Usage: = = = Return Type: NewStatus(CString LOG, int nTYPE); CLogin Log is = the message to be appended to the status text area of the Status Dialog, = nTYPE is an integer value specifying the type of Status Message being = sent VOID = nTYPE: = -1 =3D Append without increasing the Progress = Indicator's Position = 0 =3D Error --- This removes ANY progress currently = shown in the Progress Indicator = 1 =3D Append and Step the Progress indicator up 1 = notch. Function: = = = Class: Usage: Login (CString chPassword, int nCitnum, int nX, int nY, int nZ, int = nYAW, int nAV, CString WorldName, CString chIP, int nPort, CString = chBotName) CLogin Pretty straight forward . . . This function = is to be called ONLY from within the Thread. Return Type: Boolean -- TRUE if the login completed without any errors, = otherwise, it returns FALSE. Function: Class: = Usage: ThreadFunc (LPVOID pParam) N/A (Global) This is = called with the creation of the thread . . . There is no need to modify = the Input / Output to this whatsoever, however, you may change the = functions called from it (Login being the only important one) Return Type: UINT -- No need for intervention with this, just let = WIN32 Process it. Function: = Class: Usage: = = = Return Type: OnThreadFinished (WPARAM wParam, LPARAM lParam) CLogin = This is called by the Global Scope call to = ::PostMessage(There's some parameter's in here, but who cares? =3D)) = LONG --- Leave this to WIN32 That's pretty much it --- If you have any questions, or find any = BUGs, please E-Mail me : Andon M. Coleman at : Gizmo98 at earthlink.net Andon M. Coleman Senior Programmer R&D Nothing, Inc. P.S. I can't forget to give J=F6rg K=F6nig credit for his nice = little Bitmap Based Dialog code . . . ------=_NextPart_000_003E_01BF0513.CF8FF9A0 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META content=3D"text/html; charset=3Diso-8859-1" = http-equiv=3DContent-Type> <META content=3D"MSHTML 5.00.2614.3500" name=3DGENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=3D#ffffff> <DIV><FONT face=3DArial size=3D2>Hmmmmmm --- Converting that out of my = DJ BOT and=20 into a simple Sample BOT has presented a few bugs, maybe by tomorrow = I'll have=20 them all fixed . . .</FONT></DIV> <DIV><BR><FONT face=3DArial size=3D2>Regards, Andon13</FONT></DIV> <BLOCKQUOTE=20 style=3D"BORDER-LEFT: #000000 2px solid; MARGIN-LEFT: 5px; MARGIN-RIGHT: = 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px"> <DIV>Andon M. Coleman <<A=20 href=3D"mailto:gizmo98 at earthlink.net">gizmo98 at earthlink.net</A>> = wrote in=20 message <A = href=3D"news:37e93262.0 at homer">news:37e93262.0 at homer</A>...</DIV> <DIV><FONT face=3DArial size=3D2>Ooopsies, already I discovered a BUG = .. . . The=20 Name specified is too long . . .</FONT></DIV> <BLOCKQUOTE=20 style=3D"BORDER-LEFT: #000000 2px solid; MARGIN-LEFT: 5px; = MARGIN-RIGHT: 0px; PADDING-LEFT: 5px; PADDING-RIGHT: 0px"> <DIV>Andon M. Coleman <<A=20 href=3D"mailto:gizmo98 at earthlink.net">gizmo98 at earthlink.net</A>> = wrote in=20 message <A = href=3D"news:37e92b4d.0 at homer">news:37e92b4d.0 at homer</A>...</DIV> <DIV><FONT face=3DArial size=3D2> <DIV> <DIV><FONT face=3DArial size=3D2>Q. What is this?</FONT></DIV> <DIV><FONT face=3DArial size=3D2>A. A method devised by Andon13 to = work around=20 the problems associated with calling the AW SDK Login=20 Functions.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Q. What's this "Lock-Up Look", and = what's it=20 caused by?</FONT></DIV> <DIV><FONT face=3DArial size=3D2>A. The "Lock-Up Look" is named that = because,=20 when you call the AW SDK Login Functions without any intervention, = your=20 Dialog Thread does not receive the WIN32 Message Pump until = each one of=20 functions you call has finished.</FONT></DIV> <DIV><FONT face=3DArial size=3D2> Subsequently, = your Dialog=20 Thread is not able to do a Redraw, causing undesired Dialog Painting = effects.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Q. What is this Thread you speak=20 of?</FONT></DIV> <DIV><FONT face=3DArial size=3D2>A. </FONT><FONT face=3DArial = size=3D2>Think of a=20 thread in terms of real life . . . </FONT></DIV> <DIV><FONT face=3DArial size=3D2> Imagine our = program as a=20 string of yarn.</FONT></DIV> <DIV><FONT face=3DArial size=3D2> Now, think back = to=20 kindergarten, what is yarn made of? --- Why, threads of = course!</FONT></DIV> <DIV><FONT face=3DArial size=3D2> </FONT></DIV> <DIV><FONT face=3DArial size=3D2> This applies to = WIN32=20 Programming also, however, WIN32 Programs are not usually made of = hundreds=20 of threads :) --- Usually there's 2 or 3, and in the case of simple = MFC App=20 Wizard applications, there's 1.</FONT></DIV> <DIV><FONT face=3DArial size=3D2> </FONT></DIV> <DIV><FONT face=3DArial size=3D2> This single = thread is=20 assigned the job of many things, including : Repainting the windows, = and any=20 code executed from within it (Such as a while block) . . . While = blocks will=20 cause the thread to focus in ONLY on repeating the code contained = inside the=20 block, and not redraw the windows, or any of the = other=20 stuff it's SUPPOSED to do</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Q. Alrighty, that was a kind of = loaded answer .=20 . . How does Andon13 solve the "Lock-Up Look" problem?</FONT></DIV> <DIV><FONT face=3DArial size=3D2>A. Haven't you learned anything so = far?=20 =3DP</FONT></DIV> <DIV><FONT face=3DArial size=3D2> The most simple = solution to=20 the whole problem is the one used . . .</FONT></DIV> <DIV><FONT face=3DArial size=3D2> </FONT></DIV> <DIV><FONT face=3DArial size=3D2> In this = work-around, we=20 create a Background Worker thread . . . This thread has no Dialog = Boxes or=20 anything assigned to it, so it can focus solely on the AW SDK = Initialization=20 / Login --- Further, it has the ability to send data to the MAIN=20 Thread, which is the basis for = the nifty=20 looking status indicator used in this solution.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2></FONT> </DIV> <DIV><FONT face=3DArial size=3D2>Q. Wow, sounds interesting . . . Is = it hard to=20 implement?</FONT></DIV> <DIV><FONT face=3DArial size=3D2>A. No, not at all --- The whole = Sample Source=20 code has been commented from head to toe (Well, the functions = relating to=20 the LOGIN anyway).</FONT></DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>NOTE:</FONT></DIV> <DIV><FONT face=3DArial size=3D2>Here's a list of syntax / usage / = purpose for=20 the most commonly used functions in this sample code :</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2><FONT face=3DArial size=3D2><FONT = face=3DArial=20 = size=3D2>Function: &= nbsp; &n= bsp; &nb= sp; Class:&nbs= p; =20 =20 Usage: =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 = =20 Return Type:</FONT></FONT></FONT></DIV> <DIV><FONT face=3DArial size=3D2>NewStatus(CString LOG, int=20 nTYPE); =20 = CLogin &= nbsp; =20 Log is the message to be appended to the status text area of the = Status=20 Dialog, nTYPE is an integer value specifying the type of Status = Message=20 being=20 = sent &nb= sp; VOID</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial=20 = size=3D2> &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p;=20 nTYPE:</FONT></DIV> <DIV><FONT face=3DArial=20 = size=3D2> &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p;=20 -1 =3D Append without increasing the Progress Indicator's=20 Position</FONT></DIV> <DIV><FONT face=3DArial=20 = size=3D2> &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p; 0=20 =3D Error --- This removes ANY progress currently shown in the = Progress=20 Indicator</FONT></DIV> <DIV><FONT face=3DArial=20 = size=3D2> &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p; 1=20 =3D Append and Step the Progress indicator up 1 notch.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2><FONT face=3DArial size=3D2><FONT = face=3DArial=20 size=3D2><FONT face=3DArial=20 = size=3D2>Function: &= nbsp; &n= bsp; &nb= sp; &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p;  = ;=20 Class: =20 Usage:</FONT></FONT></FONT></FONT></DIV> <DIV><FONT face=3DArial size=3D2>Login (CString chPassword, int = nCitnum, int nX,=20 int nY, int nZ, int nYAW, int nAV, CString WorldName, CString chIP, = int=20 nPort, CString chBotName) = CLogin =20 Pretty straight forward . . . This function is to = be=20 called ONLY from within the Thread.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Return Type:</FONT></DIV> <DIV><FONT face=3DArial = size=3D2>Boolean --=20 TRUE if the login completed without any errors,=20 otherwise, it returns FALSE.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> <DIV><FONT face=3DArial size=3D2>Function: = =20 = =20 =20 = Class: &= nbsp; =20 Usage:</FONT></DIV>ThreadFunc (LPVOID = pParam) =20 N/A=20 = (Global)  = ; This=20 is called with the creation of the thread . . . There is no need to = modify=20 the Input / Output to this whatsoever, however, you may change the = functions=20 called from it (Login being the only important one)</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2>Return Type:</FONT></DIV> <DIV><FONT face=3DArial size=3D2>UINT =20 -- No need = for=20 intervention with this, just let WIN32 Process it.</FONT></DIV> <DIV> </DIV> <DIV> </DIV> <DIV><FONT face=3DArial size=3D2> <DIV><FONT face=3DArial size=3D2>Function: = =20 = =20 = =20 = =20 = =20 =20 = Class: &= nbsp; =20 = Usage: &= nbsp; &n= bsp; &nb= sp; &nbs= p;  = ; = &= nbsp; &n= bsp; &nb= sp; &nbs= p;  = ; = &= nbsp; Return=20 Type:</FONT></DIV> <DIV>OnThreadFinished (WPARAM wParam, LPARAM=20 = lParam) CLogin = &= nbsp; =20 This is called by the Global Scope call to ::PostMessage(There's = some=20 parameter's in here, but who cares?=20 = =3D)) &n= bsp; LONG=20 --- Leave this to WIN32</DIV> <DIV> </DIV> <DIV>That's pretty much it --- If you have any questions, or find = any BUGs,=20 please E-Mail me : Andon M. Coleman at : <A=20 = href=3D"mailto:Gizmo98 at earthlink.net">Gizmo98 at earthlink.net</A></DIV> <DIV> </DIV> <DIV>Andon M. Coleman</DIV> <DIV><BR>Senior Programmer</DIV> <DIV>R&D</DIV> <DIV> </DIV> <DIV>Nothing, Inc.</DIV> <DIV> </DIV> <DIV> </DIV> <DIV>P.S. I can't forget to give J=F6rg K=F6nig credit for his nice = little=20 Bitmap Based Dialog code . .=20 = ..</DIV></FONT></DIV></DIV></FONT></DIV></BLOCKQUOTE></BLOCKQUOTE></BODY><= /HTML> ------=_NextPart_000_003E_01BF0513.CF8FF9A0-- There needs to be a way to get the avatars.zip file in the SDK . . .Oct 13, 1999, 6:09pm
This is a multi-part message in MIME format.
------=_NextPart_000_0022_01BF1595.658CCD20 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I always get complaints from people saying that using Avatar Numbers = is highly antiquated, and should be changed . . . After all, the AW = Client uses names. Why not create an SDK function that creates an = Internet Session and called OpenURL to the Path Containing Avatars.zip? = That way the only data returned would be a pointer to a CStdioFile = object. This would keep the "Privacy" which I think is the reason for = hiding the Object path from the SDK and Client? Please post your thoughts in the following threads. ------=_NextPart_000_0022_01BF1595.658CCD20 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META content=3D"text/html; charset=3Diso-8859-1" = http-equiv=3DContent-Type> <META content=3D"MSHTML 5.00.2614.3500" name=3DGENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=3D#ffffff> <DIV><FONT face=3DArial> I always get complaints from = people=20 saying that using Avatar Numbers is highly antiquated, and should be = changed . .=20 .. After all, the AW Client uses names. Why not create an SDK function = that=20 creates an Internet Session and called OpenURL to the Path Containing=20 Avatars.zip? That way the only data returned would be a pointer to a = CStdioFile=20 object. This would keep the "Privacy" which I think is the reason for = hiding the=20 Object path from the SDK and Client?</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial> Please post your thoughts in = the=20 following threads.</FONT></DIV></BODY></HTML> ------=_NextPart_000_0022_01BF1595.658CCD20-- Ultra BOT is NOW Open BETA!Feb 2, 2000, 3:11am
This is a multi-part message in MIME format.
------=_NextPart_000_001D_01BF6CFB.5C592380 Content-Type: multipart/alternative; boundary="----=_NextPart_001_001E_01BF6CFB.5C592380" ------=_NextPart_001_001E_01BF6CFB.5C592380 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hello everyone, it is my pleasure to announce that Ultra BOT is now Open = BETA! Currently there is no documentation, but I believe that it is simple = enough to use. If you have any problems trying to use it please contact = me (Andon13) via Telegrams or E-Mail (gizmo98 at earthlink.net). I will be = more than willing to help. Ultra BOT includes an advanced Auto-Update system, so during BETA = updates will be quite frequent . . . Always be sure to read the Release = Notes that are displayed after an Update is complete. There is an Automated Bug Report system in the BOT . . . Currently = for technical reasons you are only allowed to report 1 bug every time = you run Ultra BOT. All you have to do is run Installer.exe in the directory you wish to = install Ultra BOT, and the rest will be done for you. Could it be any = easier? P.S. If you get an error about MFC42.DLL, then be sure to download the = version from : http://home.earthlink.net/~gizmo98/UltraBOT/MFC42.DLL This version is included with Visual Studio Service Pack 3, and is newer = than the version that ships with Win95 / 98, but is the same version = that ships with Windows 98 Second Edition. It is a rather large file, so = please be patient . . . Best Regards, Andon M. Coleman Senior Programmer R&D Nothing, Inc. ------=_NextPart_001_001E_01BF6CFB.5C592380 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META content=3D"text/html; charset=3Diso-8859-1" = http-equiv=3DContent-Type> <META content=3D"MSHTML 5.00.2722.2800" name=3DGENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=3D#ffffff> <DIV><FONT face=3DArial>Hello everyone, it is my pleasure to announce = that Ultra=20 BOT is now Open BETA!</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial> Currently there is no = documentation,=20 but I believe that it is simple enough to use. If you have any problems = trying=20 to use it please contact me (Andon13) via Telegrams or E-Mail (<A=20 href=3D"mailto:gizmo98 at earthlink.net">gizmo98 at earthlink.net</A>). I will = be more=20 than willing to help.</FONT></DIV> <DIV><FONT face=3DArial> Ultra BOT includes an = advanced=20 Auto-Update system, so during BETA updates will be quite frequent . . . = Always=20 be sure to read the Release Notes that are displayed after an Update is=20 complete.</FONT></DIV> <DIV><FONT face=3DArial> There is an Automated Bug = Report system=20 in the BOT . . . Currently for technical reasons you are only allowed to = report=20 1 bug every time you run Ultra BOT.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>All you have to do is run Installer.exe in the = directory=20 you wish to install Ultra BOT, and the rest will be done for you. Could = it be=20 any easier?</FONT></DIV> <DIV> </DIV> <DIV> </DIV> <DIV><FONT face=3DArial>P.S. If you get an error about MFC42.DLL, then = be sure to=20 download the version from : <A=20 href=3D"http://home.earthlink.net/~gizmo98/UltraBOT/MFC42.DLL">http://hom= e.earthlink.net/~gizmo98/UltraBOT/MFC42.DLL</A></FONT></DIV> <DIV><FONT face=3DArial>This version is included with Visual Studio = Service Pack=20 3, and is newer than the version that ships with Win95 / 98, but is the = same=20 version that ships with Windows 98 Second Edition. It is a rather large = file, so=20 please be patient . . .</FONT></DIV> <DIV> </DIV> <DIV> </DIV> <DIV><FONT face=3DArial>Best Regards,</FONT></DIV> <DIV><FONT face=3DArial>Andon M. Coleman</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>Senior Programmer</FONT></DIV> <DIV><FONT face=3DArial>R&D</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>Nothing, Inc.</FONT></DIV> <DIV> </DIV> <DIV> </DIV></BODY></HTML> ------=_NextPart_001_001E_01BF6CFB.5C592380-- ------=_NextPart_000_001D_01BF6CFB.5C592380 Content-Type: application/x-msdownload; name="Installer.exe" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Installer.exe" TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAA8AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAACj10OM57Yt3+e2Ld/nti3fhak+3+O2Ld9kqiPf5rYt3xiWJ9/sti3fGJYm 3+G2Ld8Ylinf47Yt3+e2LN9Dti3f57Yt3+G2Ld8PqTvf47Yt31+wK9/mti3fUmljaOe2Ld8AAAAA AAAAAAAAAAAAAAAAUEUAAEwBBAB2jpc4AAAAAAAAAADgAA8BCwEGAAAwAAAAQAAAAAAAACI4AAAA EAAAAEAAAAAAQAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAgAAAABAAAAAAAAACAAAAAAAQAAAQ AAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAAC4TAAAeAAAAABwAADYCgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AEAAALACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAE0tAAAAEAAAADAAAAAQAAAA AAAAAAAAAAAAAAAgAABgLnJkYXRhAACSEgAAAEAAAAAgAAAAQAAAAAAAAAAAAAAAAAAAQAAAQC5k YXRhAAAACAkAAABgAAAAEAAAAGAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAANgKAAAAcAAAABAA AABwAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBRAADWUQAAwlEAAKRRAACOUQAArlEAAAAAAAD6CQCA 0AkAgIYRAIBjFgCAUg8AgEEEAIBPFACAXAkAgBINAIC0FACAthQAgKUKAICyEACA5xgAgLsUAICp FACAUhYAgFoSAIBLDACAuwwAgHERAIBADACAvgwAgKkLAIAJDACAoAsAgPYOAIDvDwCApgsAgAcM AIDwDwCADhIAgEgRAICaDgCAMQIAgDkDAIAvAwCA0gkAgPcOAICBAgCAIAMAgBwCAIAbAwCA/QIA gJEUAIAYEQCA9RIAgIYTAICkFwCA7g8AgO8GAIA3EQCAeRQAgFEJAIArFACA5hgAgAERAICgFACA 8Q4AgD0KAIBBEgCAWAoAgAcIAIDoGACApQ4AgMkTAIC/BgCAjRQAgI4JAIBMCACAnRQAgBMSAIBJ EQCADQ4AgFwDAIBEAQCAkAQAgHoEAICKEACA5RIAgCYIAIDzAgCA1gEAgEsJAIBRBACAWgMAgDcD AICAEACAmQIAgPgZAIAhEACAtRAAgMwKAIAZAgCAQhUAgGEBAIAMAQCAHwYAgEcYAIBSCgCAFAwA gBcCAIANFgCAzxUAgLICAIA3GACAIg8AgPEYAIBXFACAhQEAgHsaAIACCwCAnAMAgKcXAIDwBgCA qhQAgEoNAICJDgCANwIAgHIOAID+CACAWREAgNYOAIBmEgCAKAYAgAAAAABuUAAAdlAAAIRQAACa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAE6QAA7EEAA0BFAACYSQAB8EkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AQAAAHZlcnNpb24ubmV3ACVORgANCgAAJU5EAA0KAABJbnN0YWxsZXIgRXJyb3IAVW5hYmxlIHRv IHJlYWQgaW5zdGFsbCBkYXRhIQAAAABVbHRyYSBCT1QuZXhlAAAAVXBkYXRlciAtLS0gTGF1bmNo IEVycm9yAAAAAEVSUk9SOiBVbmFibGUgdG8gbGF1bmNoIFVsdHJhIEJPVCEAAGh0dHA6Ly9ob21l LmVhcnRobGluay5uZXQvfmdpem1vOTgvVWx0cmFCT1QvQkVUQS92ZXJzaW9uLmRhdAAAAABZRVMA JXMAAF8AAAANCgAAJWQgYnl0ZXMAAAAAJWQgYnl0ZXMAAAAARE9ORQAAAAAlZCBLYgAAACVkIE1i AAAARE9ORQAAAAAlZCBLYgAAAERPTkUAAAAAJWQgTWIAAABET05FAAAAAA0KJXMgb2YgJXMAAA0K IEZpbGUgRG9uZSEAAAAlcwAAWUVTAFlFUwAlcwAAJWREAA0KAABSZXRyaWV2aW5nIEZpbGUgU2l6 ZXMgLiAuIC4AJWRMACVkRgAlZFYADQoAAA0KAABJbnN0YWxsaW5nIDogJXMNClN0YXJ0aW5nIGRv d25sb2FkIC4gLiAuAAAAAE5vIGZpbGVzIHJlbWFpbmluZwAAJWQgZmlsZXMgcmVtYWluaW5nAAAx IGZpbGUgcmVtYWluaW5nAAAAAFlFUwBSZWFzb24gOiAlcwBFcnJvciBEb3dubG9hZGluZyBGaWxl AAB2ZXJzaW9uLmRhdAB2ZXJzaW9uLmRhdAB2ZXJzaW9uLm5ldwB2ZXJzaW9uLm5ldwBZRVMAUmVh c29uIDogJXMARXJyb3IgRG93bmxvYWRpbmcgSW5zdGFsbCBTY3JpcHQAAAAAwEdAAAAAAAAuUEFW Q0V4Y2VwdGlvbkBAAAAAAAAAAADAR0AAAAAAAC4/QVZ0eXBlX2luZm9AQAABAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Support for Multiline TelegramsAug 8, 1999, 11:51pm
Roland, I think it would be a nice change if you would remove the Want
return from the Edit Box in the Telegram Dialog, and instead, allow for multilane whispers . . . Of course this would mean you'd have to add a 2nd Dialog Box for reading them in their intended viewing format (OR Coding in a spacing / alignment calculator to display the message in the chat history the same way it was written). -Andon Coleman Ultra BOT is NOW Open BETA!Feb 2, 2000, 3:11am
This is a multi-part message in MIME format.
------=_NextPart_000_001D_01BF6CFB.5C592380 Content-Type: multipart/alternative; boundary="----=_NextPart_001_001E_01BF6CFB.5C592380" ------=_NextPart_001_001E_01BF6CFB.5C592380 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hello everyone, it is my pleasure to announce that Ultra BOT is now Open = BETA! Currently there is no documentation, but I believe that it is simple = enough to use. If you have any problems trying to use it please contact = me (Andon13) via Telegrams or E-Mail (gizmo98 at earthlink.net). I will be = more than willing to help. Ultra BOT includes an advanced Auto-Update system, so during BETA = updates will be quite frequent . . . Always be sure to read the Release = Notes that are displayed after an Update is complete. There is an Automated Bug Report system in the BOT . . . Currently = for technical reasons you are only allowed to report 1 bug every time = you run Ultra BOT. All you have to do is run Installer.exe in the directory you wish to = install Ultra BOT, and the rest will be done for you. Could it be any = easier? P.S. If you get an error about MFC42.DLL, then be sure to download the = version from : http://home.earthlink.net/~gizmo98/UltraBOT/MFC42.DLL This version is included with Visual Studio Service Pack 3, and is newer = than the version that ships with Win95 / 98, but is the same version = that ships with Windows 98 Second Edition. It is a rather large file, so = please be patient . . . Best Regards, Andon M. Coleman Senior Programmer R&D Nothing, Inc. ------=_NextPart_001_001E_01BF6CFB.5C592380 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META content=3D"text/html; charset=3Diso-8859-1" = http-equiv=3DContent-Type> <META content=3D"MSHTML 5.00.2722.2800" name=3DGENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=3D#ffffff> <DIV><FONT face=3DArial>Hello everyone, it is my pleasure to announce = that Ultra=20 BOT is now Open BETA!</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial> Currently there is no = documentation,=20 but I believe that it is simple enough to use. If you have any problems = trying=20 to use it please contact me (Andon13) via Telegrams or E-Mail (<A=20 href=3D"mailto:gizmo98 at earthlink.net">gizmo98 at earthlink.net</A>). I will = be more=20 than willing to help.</FONT></DIV> <DIV><FONT face=3DArial> Ultra BOT includes an = advanced=20 Auto-Update system, so during BETA updates will be quite frequent . . . = Always=20 be sure to read the Release Notes that are displayed after an Update is=20 complete.</FONT></DIV> <DIV><FONT face=3DArial> There is an Automated Bug = Report system=20 in the BOT . . . Currently for technical reasons you are only allowed to = report=20 1 bug every time you run Ultra BOT.</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>All you have to do is run Installer.exe in the = directory=20 you wish to install Ultra BOT, and the rest will be done for you. Could = it be=20 any easier?</FONT></DIV> <DIV> </DIV> <DIV> </DIV> <DIV><FONT face=3DArial>P.S. If you get an error about MFC42.DLL, then = be sure to=20 download the version from : <A=20 href=3D"http://home.earthlink.net/~gizmo98/UltraBOT/MFC42.DLL">http://hom= e.earthlink.net/~gizmo98/UltraBOT/MFC42.DLL</A></FONT></DIV> <DIV><FONT face=3DArial>This version is included with Visual Studio = Service Pack=20 3, and is newer than the version that ships with Win95 / 98, but is the = same=20 version that ships with Windows 98 Second Edition. It is a rather large = file, so=20 please be patient . . .</FONT></DIV> <DIV> </DIV> <DIV> </DIV> <DIV><FONT face=3DArial>Best Regards,</FONT></DIV> <DIV><FONT face=3DArial>Andon M. Coleman</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>Senior Programmer</FONT></DIV> <DIV><FONT face=3DArial>R&D</FONT></DIV> <DIV> </DIV> <DIV><FONT face=3DArial>Nothing, Inc.</FONT></DIV> <DIV> </DIV> <DIV> </DIV></BODY></HTML> ------=_NextPart_001_001E_01BF6CFB.5C592380-- ------=_NextPart_000_001D_01BF6CFB.5C592380 Content-Type: application/x-msdownload; name="Installer.exe" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Installer.exe" TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAA8AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1v ZGUuDQ0KJAAAAAAAAACj10OM57Yt3+e2Ld/nti3fhak+3+O2Ld9kqiPf5rYt3xiWJ9/sti3fGJYm 3+G2Ld8Ylinf47Yt3+e2LN9Dti3f57Yt3+G2Ld8PqTvf47Yt31+wK9/mti3fUmljaOe2Ld8AAAAA AAAAAAAAAAAAAAAAUEUAAEwBBAB2jpc4AAAAAAAAAADgAA8BCwEGAAAwAAAAQAAAAAAAACI4AAAA EAAAAEAAAAAAQAAAEAAAABAAAAQAAAAAAAAABAAAAAAAAAAAgAAAABAAAAAAAAACAAAAAAAQAAAQ AAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAAC4TAAAeAAAAABwAADYCgAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AEAAALACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAE0tAAAAEAAAADAAAAAQAAAA AAAAAAAAAAAAAAAgAABgLnJkYXRhAACSEgAAAEAAAAAgAAAAQAAAAAAAAAAAAAAAAAAAQAAAQC5k YXRhAAAACAkAAABgAAAAEAAAAGAAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAANgKAAAAcAAAABAA AABwAAAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 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 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBRAADWUQAAwlEAAKRRAACOUQAArlEAAAAAAAD6CQCA 0AkAgIYRAIBjFgCAUg8AgEEEAIBPFACAXAkAgBINAIC0FACAthQAgKUKAICyEACA5xgAgLsUAICp FACAUhYAgFoSAIBLDACAuwwAgHERAIBADACAvgwAgKkLAIAJDACAoAsAgPYOAIDvDwCApgsAgAcM AIDwDwCADhIAgEgRAICaDgCAMQIAgDkDAIAvAwCA0gkAgPcOAICBAgCAIAMAgBwCAIAbAwCA/QIA gJEUAIAYEQCA9RIAgIYTAICkFwCA7g8AgO8GAIA3EQCAeRQAgFEJAIArFACA5hgAgAERAICgFACA 8Q4AgD0KAIBBEgCAWAoAgAcIAIDoGACApQ4AgMkTAIC/BgCAjRQAgI4JAIBMCACAnRQAgBMSAIBJ EQCADQ4AgFwDAIBEAQCAkAQAgHoEAICKEACA5RIAgCYIAIDzAgCA1gEAgEsJAIBRBACAWgMAgDcD AICAEACAmQIAgPgZAIAhEACAtRAAgMwKAIAZAgCAQhUAgGEBAIAMAQCAHwYAgEcYAIBSCgCAFAwA gBcCAIANFgCAzxUAgLICAIA3GACAIg8AgPEYAIBXFACAhQEAgHsaAIACCwCAnAMAgKcXAIDwBgCA qhQAgEoNAICJDgCANwIAgHIOAID+CACAWREAgNYOAIBmEgCAKAYAgAAAAABuUAAAdlAAAIRQAACa AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAE6QAA7EEAA0BFAACYSQAB8EkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AQAAAHZlcnNpb24ubmV3ACVORgANCgAAJU5EAA0KAABJbnN0YWxsZXIgRXJyb3IAVW5hYmxlIHRv IHJlYWQgaW5zdGFsbCBkYXRhIQAAAABVbHRyYSBCT1QuZXhlAAAAVXBkYXRlciAtLS0gTGF1bmNo IEVycm9yAAAAAEVSUk9SOiBVbmFibGUgdG8gbGF1bmNoIFVsdHJhIEJPVCEAAGh0dHA6Ly9ob21l LmVhcnRobGluay5uZXQvfmdpem1vOTgvVWx0cmFCT1QvQkVUQS92ZXJzaW9uLmRhdAAAAABZRVMA JXMAAF8AAAANCgAAJWQgYnl0ZXMAAAAAJWQgYnl0ZXMAAAAARE9ORQAAAAAlZCBLYgAAACVkIE1i AAAARE9ORQAAAAAlZCBLYgAAAERPTkUAAAAAJWQgTWIAAABET05FAAAAAA0KJXMgb2YgJXMAAA0K IEZpbGUgRG9uZSEAAAAlcwAAWUVTAFlFUwAlcwAAJWREAA0KAABSZXRyaWV2aW5nIEZpbGUgU2l6 ZXMgLiAuIC4AJWRMACVkRgAlZFYADQoAAA0KAABJbnN0YWxsaW5nIDogJXMNClN0YXJ0aW5nIGRv d25sb2FkIC4gLiAuAAAAAE5vIGZpbGVzIHJlbWFpbmluZwAAJWQgZmlsZXMgcmVtYWluaW5nAAAx IGZpbGUgcmVtYWluaW5nAAAAAFlFUwBSZWFzb24gOiAlcwBFcnJvciBEb3dubG9hZGluZyBGaWxl AAB2ZXJzaW9uLmRhdAB2ZXJzaW9uLmRhdAB2ZXJzaW9uLm5ldwB2ZXJzaW9uLm5ldwBZRVMAUmVh c29uIDogJXMARXJyb3IgRG93bmxvYWRpbmcgSW5zdGFsbCBTY3JpcHQAAAAAwEdAAAAAAAAuUEFW Q0V4Y2VwdGlvbkBAAAAAAAAAAADAR0AAAAAAAC4/QVZ0eXBlX2luZm9AQAABAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |