diff --git a/changelog.txt b/changelog.txt deleted file mode 100644 index 7c4ab98..0000000 --- a/changelog.txt +++ /dev/null @@ -1,237 +0,0 @@ -///////////////////////////////////////////////////////////// -// PseuWoW changelog // date|time: 20:31 11.12.2006 ///////// -///////////////////////////////////////////////////////////// -//Format: -// + added -// - note -// % removed -// ! important -// O ToDo: open, not yet done -// x Todo: done -///////////////////////////////////////////////////////////// - - - -ToDo (Overall): -================ - -- simulation of no installed addons -- more config possibilities in conf/pseuwow.conf -- redo controller related code and recode controller -- character creation - to be able to create chars with names bl!zz does not allow -- remove hardcoded language names, use lang names via config --> string table? not sure. -- ppoints system? as a workaround for maps? not sure. -- much much more i cant think of yet :P - -#Far future: -- kind of an AI that it can decide for itself what to do -- add ability to use blizz/mangos maps so that it can really walk around, not only teleport -- to be continued... -- looting, 2D/3D GUI, killing,... you can extend the list as you wish - -ToDo (version after: Alpha 13) / Planned Features: -================================================== - -O add a ZCompressor Class (a ByteBuffer using zlib deflate/inflate) -O [maybe] first touch with the UpdateFields (CMSG[_COMPRESSED]_UPDATE_OBJECT) -O [maybe] add Object/Unit/Player/Creature/... classes. -X cleanups to VarSet class (use vectors to store the vars) -O cleanups to DefScript class: use vectors to store the script text data -O DefScript: instead of only ${var} also be able to use $var like in TCL or PHP -O Implement threaded movement system. tracking of player's waypoints, better following code - (that does NOT tend to crash mangos!) -O improve chat AI? add other AI? not sure. -O logfile output -[...] - - -ToDo (next version: Alpha 12) / Planned features: -================================================= - -X lots of general code cleanups (remove old C functions from PseuWoW Alpha 7 and before; - add objects: PseuInstance, RealmSession, WorldSession, ...; drop the old procedurel code) -X opcode handler table, no more case x case y case z -O move code portions of the chat handler to an external ChatAI.cpp file and improve - the chat AI -O -> implement a WordList class to parse sentences -O a direct local console (like mangos has). drop plans about a remote controller for now. -O lots of bugfixes to the DefScript system -X implement zthread, zlib and remove the SDL thread functions. -X change the network system from SDL_net to the system by Anders Hedstrom (the one mangos uses). no more packet errors (i hope)! -O DefScript: implement a "PermissionMap" to set by the user (for internal funcions) -O config options: EnableIngameCommands, EnableLocalConsole, OverrideLoginGuid (dangerous!), - AutoReconnect, - -O DefScript fuctions: "GetGuid,var playername", "GetName,var GUID" -X add WorldPacket class -X -> add uint64 WorldPacket::GetPackedGUID() -X fix the packed GUID code if needed (not sure if its really bugged) - -O When everything is done: upload to openSVN! - - -20:43 09.11.2006 Alpha Build 11 -===================================== - -+ inluded modified WAD's TrayWoWemu.exe to work with PseuWoW -> TrayPseuWoW.exe =) - -Core: -! connecting to servers running versions above 1.10.2 is now possible! -+ implemented player name cache, first touch with std::vector<> :) --> players get added to the cache as soon as they move or say something --> chat messages now show player names, whispers can be sent now. --> related command: [-]savecache. -+ commands can now given directly ingame saying/whispering "-command" to PseuWoW -+ added DefScript functions _onwhisper (gets triggered when a player whispers to PseuWoW), - emote #id. the emote function still needs to be fixed and linked with targeting once - implemented. -+ included reply.def, that uses the above macros and whisper.def. use: reply to last whisp - in its original language -% removed some old obsoelete cpp files -% removed the old config reader, replaced with dynamic reader using the classes - VarSet, std::string, DefScript. -+ added CMSG_PING and SMSG_PONG (ping every 30 sec, like original WoW) -+ better detection if PseuWoW entered the world successfully -+ added macros: @thiswhisper,@lastwhisper,@thiscmd,@lastcmd,@thismsg,@lastmsg and related. -+ following a player: simply repeat movement opcodes recieved from that player. - looks very shitty and is very buggy xD - -> command/usage: [-]follow PlayerName to start, just [-]follow to stop. -+ you can access all values set in PseuWoW.conf as CAPITALIZED variables, e.g.: - "${REALMLIST}" or ingame "-sayv REALMLIST". -+ once the conf is loaded the script "_setconf" is executed, this removes dangerous vars - like ACCNAME and ACCPASS -+ auto-decline of group-invite and trade attempts -!+ added support for packed GUIDs -+ added def files: outv, sayv, _nopermission, _setconf - - - -DefScript engine: -- renewed variable handler (renaming *local* var to scriptname::var, #var to var, - @var stays @var) -- fixed lots of bugs in the ReplaceVars() function. -- fixed a little bug in the script loader (wrongly loaded lines beginning with '#') -+ added a permission system for scripts called by players. use users.conf to set. - (like that its not possible for non-GMs to execute "-say .shutdown" or similar) - - - -17:23 06.10.2006 Alpha Build 10 -=================================== -+ FULLY working script engine with C++ interface, only very few functions implemented yet. - Dynamic loading: Scripts get only loaded if they are needed. -+ preparations to stop using C malloc/realloc/free and replace it with NEW, - also std::string instead of char* -+ PseuWoW can recieve whisper/say/party/guild/server messages, but not yet link them - to a name. -+ improved packet error/order handling, there are still some packets that get lost, - i need to find out where they go. SDL thread issue? -% removed yelling PseuWoW version on startup. Use the ./scripts/_worldenter.def script - file to modify behaviour when entering the world. -- PseuWoW can now detect if it has sent a chatmessage itself or if it came from someone else -- added a little fun code and a VERY "basic" chat AI for fun :P -- it will say a note if it is sure it has entered the world correctly. it might have been - successful anyway even without it, but at least you can be sure when it will probably work. - requires "SAY ${@version}" in scripts/_enterworld.def - - -18:15 10.09.2006 Alpha Build 9 -=============================== -+ Added CircularBuffer class for world packet reciever -+ Added SDLTCPConnection class for easier connectivity and code readability -- first preparations for builtin script engine, still excluded from build, - needs cleanups and fixes. - -> coded the variable handler - -> coded the script loader - -> coded the script line tokenizer -+ Added connection to world server -+ World Authentication done -% removed old rs_... / ws_... functions, replaced with SDLTCPConnection realmCon/worldCon -% disabled the controller interface for now. it will be included again as soon as the - script interpreter works and everything has been cleaned up. -+ Integrated AuthCrypt class from mangos -+ CHAR_ENUM integrated, char list is now requested and parsed -+ read charname from conf file and login with that char - YES, logging into the world finally WORKS! :DD -+ some checks for invalid or strange packets, which are tried to be interpreted correctly. - packet ordering and fetch queue is still buggy. -- PseuWoW yells its version once it has joined the world, and yells if an error occured. -- only server messages get interpreted correctly so far, player chat recieve does NOT work - -03:12 29.07.2006 Alpha Build 8 -=============================== -- completely rewrote the authentication code, Imported Sha1Hash and BigNumber - classes from MaNGOS (shrunk code size to 1/4 of what it was before). - The code even seems bug-free (hope it stays so) -- Authentication WORKS! (after 2 months of failure) -+ added realmlist parser -+ set realm to login via conf file -- Tested on WoWemu (1.8.0) & MaNGOS (1.10.2), authenticating works well -+ added a neat icon :) by ©haos - - -14:45 12.07.2006 Alpha Build 7 -=============================== -- complete code reorganisation (no more code including only with .h files. - now we have several cpp files with each its own .h) -- emulation of any version -- updated comment parser, finally :) -- you can now set version, build and language via conf file -- merged the 2 controller tcpsocks into 1, controller can still only connect to localhost. - still no conf file reading implemented into the controller. rest will be implemented later. -- removed SS & server b, they were useless -- fixed crash where an attemt was made to delete a const string. - (seems this caused the GarbageStack:: realloc() size=112 failure) -- many other general improvemens and bugfixes - -02:31 10.06.2006 Alpha Build 6 - Memory handling is hard. -=============================== -- fixed crash when realmlist hostname could not be resolved -! forgot to malloc x_str & u_str in proof packet sender -> crash (maybe i got it fixed this time) -- made more funcions work with the garbage collector -- in debug build GarbageStack:: realloc() size=112 fails. dunno why. -- added a server S & server b for testing. they are not important and will get removed later. -- still no correct reversion. - -18:12 05.06.2006 Alpha Build 5 - The I hate C++ version -=============================== -- crash,crash,crash. there must be a bug in the BN_reverse routine. -+ Added a garbage collector -- updated the fileparser, because it got bugged with the garbage collector. - More configs are supported now. comments still must be at the beginning of the line - to be treated as comments. -- still working on correct reversal :C - -22:55 31.05.2006 Alpha Build 4 - The DAMN FUCKING SHIT i don't get it version -=============================== -- damn i just don't find it out. decided to do a random reversal on every failure. -- the program got very unstable. seems i do a mistake i am not aware of. help anyone? --> added a debug output to find out where the bugged lines are. strage they change - everytime i run the program. fuck. - -18:16 31.05.2006 Alpha Build 3 - The YAAAY it works version -============================== -- finished the packet, server still answers "password wrong". - working on correct reversion now - -16:52 30.05.2006 Alpha Build 2 -=============================== -- added more bignum calculations, now i got until S. -- still not sure how they have to be reversed to be calculated corrctly in the B1!77 way. - SRP demo page (srp.stanford.edu/demo) says my S is correct so far, calculated in the - normal way. At least i got the right formulas. :D -- next thing to do is split S up, hash it, etc... to get M1 & M2 - -21:51 24.05.2006 Alpha Build 1 -=============================== -- first release, not working yet. -- connecting to realm server possible, detection for acc already in use / acc not existing -- OpenSSL BIGNUM and SHA1 integrated. -- first bignum calculations :), i still have to find out how the numbers are - reversed and calculated correctly -- controller connection possible. it uses 2 ports, i will change it to 1 port in future -- config file readout (conf/pseuwow.conf) -- still crashes when it cant find the realmlist. time to fix it... -- controller connection is still buggy when a connection to the realm server has been - established. diff --git a/readme.txt b/readme.txt deleted file mode 100644 index 42461d8..0000000 --- a/readme.txt +++ /dev/null @@ -1,308 +0,0 @@ -#################################################################################### -################################# - PseuWoW ReadMe - ########## 09.11.2006 ######### -#################################################################################### -## ## -## Web: http://my.opera.com/PseuWoW ## -## Email/MSN: hoden386@lycos.de ## -## ## -## 1.) What is PseuWoW? ## -## 2.) Installation & configuration ## -## 3.) The DefScript engine [to be updated] ## -## 4.) The controller [*availible soon*] ## -## 5.) Interaction with PseuWoW ## -## 6.) Compiling your own version ## -## 7.) A word to Blizzard ## -## ... ## -## 8.) Appendix: [*availible soon*] ## -## A) The DefScript interface ## -## B) Macro reference ## -## C) Function reference ## -## ## -## ## -#################################################################################### -#################################################################################### - - -#################################################### -########## 1.) What is PseuWoW? #################### -#################################################### - -A custom wow client, or at least it is supposed to be a "real" client later on. -For now it is thougt to be a bot that can help GMs/admins to manage their *private(!)* WoW server. -It does not need an installation of real WoW to run, and you do not need any -good hardware to run it, since it has no graphics (yet!) and not such extensive -memory usage like the bloated WoW.exe has. -it uses only the console for now, but since it runs on SDL, you *could* easily build up -your own gui using OpenGL. buts it's not designed for that purpose in this early state. - -DO NOT use this program to connect to official servers! -It does NOT work due to Blizzard's IP-Spoof filter, which PseuWoW cant bypass yet. -( YES this IS intended to be that way! For your own safety and for the legality of PseuWoW!) -If you should try anyway, the only thing you can win is the ban/loss of your account. - - - -Performance: -============ -Tested Build 8 on a 300MHz Intel Celeron notebook, took a bit longer to Auth then on a -3GHz Pentium 4 PC, but worked well so far; more benchmarks on slower hardware will follow =) - - - -#################################################### -########## 2.) Installation & Configuration ######## -#################################################### - -Required DLL files: -=================== - -- SDL.dll -- SDL_net.dll -- msvcp71(d).dll -- msvcr71(d).dll - -Be sure you have them put into the same folder as PseuWoW.exe (or your windows/system32 folder). - -How to make it run properly (main configuration): -================================================= - -Open the file "conf/PseuWoW.conf" in a text editor and edit it to your needs. -There should be comments inside the file explaining what the options are good for. - -User permission configuration: -============================== - -Open the file "conf/users.conf". -For every player you want to assign a permission level to enter the name of the player (note correct spelling!!), -followed by a "=" and the permission level ( a number from 0 - 255; 0=least; 255=all permissions ). -The lines should look like this: - -Master=255 -Operator=100 -Playerx=1 -... - -If a player is not listed in this file he will get permission 0 automatically. - -Note that special unicode chars in playernames like óäöüßêýà etc. DO NOT work. - - -Saving the cache: -================= -If you close PseuWoW using the [X] in the top-right corner it will be instantly closed -and NO data will be saved. To save the data you can either quit PseuWoW pressing Ctrl+C, -giving the "-quit" command ingame or just save without quitting giving the ingame command -"-savecache". (explained further down this file) - - - -#################################################### -########## 3.) The DefScript engine ################ -#################################################### - -Information: -============ - -PseuWoW uses a scripting language exclusively designed for it - i admit i didn't know -how to implement Python or LUA :P -DefScript has no controlling structures like IF, FOR, WHILE, etc. yet, this will come in future. - -The Scripts have the extension ".def" and are stored in the "/scripts/" folder of PseuWoW. -Every file represents a single function. - -Syntax: -======= -A typical function call looks like this: - -command,arg1,arg2,arg3,argx defaultarg - -command: name of the script or function you want to execute (UPPER- or lowercase does not matter) -arg1 - argx: OPTIONAL(!) arguments, seperated by commas. -defaultarg: the last ( or better called "typical" ) argument of the function, -seperated by [space]. -Everything after the first space char will be treated as defaultarg! -To prevent this, you can use curly brackets {} to express that the given text is connected. -e.g.: -"SENDCHATMESSAGE,6,{hi there},Keks" -> correct, works. Whispers "hi there" to player "Keks". - -"SENDCHATMESSAGE,6,hi there,Keks" --> works too, BUT: -"SENDCHATMESSAGE,6,hi" -> this will be the command with its args -"there,Keks" -> this will be the defaultarg -result: the call will not produce the expected result! - - -Variables: -========== - -Setting variables: -"x = 1" -> WRONG! DefScript knows only functions!! -You have tu use this: -"SET,x 1" -> sets the LOCAL variable x to 1. [x will be stored as "scriptname::x" internally] -"SET,#x 1" -> sets the GLOBAL variable x to 1. [#x will be stored as "x" internally] -"SET,#welcomemsg PseuWoW logged on, be careful!" -> sets the GLOBAL variable "welcomemsg" to PseuWoW logged on, be careful!". -Note that the variable name is the first arg, preceded with a comma, and its value is the defaultarg. -Variable names with a preceding "#" will be stored as GLOBAL vars, with the preceding "#" removed. - -"DEFAULT,x 1" -> sets x only if it has not been set or x has no value (=is empty) -"UNSET x" -> removes the variable. you have to remove every variable you do no longer need yourself! - - -A special kind of variables are macros, which values can only be changed by the program itself. -Macros begin with "@". - -Accessing variables: -==================== - -SET,x 1 -SET,mystr hello world -OUT ${mystr}, x has the value ${x} -PAUSE 1000 -SET,mystr ${mystr} goodbye -OUT ${mystr} - -pretty obvious: -${mystr} gets replaced with "hello world" -${x} gets replaced with 1. -and the text "hello world, x has the value 1" will be written to the console. -after one second, mystr will be set to "hello world goodbye" and again written to console. - -accessing globals: OUT ${#myglobal} -accessing macros: OUT ${mymacro} - -[[* more explanations of the variable system will follow *]] - -Load Instructions: -================== -load instructions begin with "#" and are put at the beginning of every script. -You can not use variables in them! -The following are availible: -#permission=x -> sets the permission required to execute this script. 0 by default! x=0...255 -#debug -> produce more output -#load_debug -> lists every line that is loaded -#load_notify -> notifies you once the script has been loaded and is ready for use -...more to come... - - - - - -#################################################### -########## 5.) Interaction with PseuWoW ############ -#################################################### - - -You can either say or whisper the command to PseuWoW; put a "-" before the command name -that PseuWoW recognizes the chat message as a command, like: -"-say hello" -"-say,orcish hello" -"-say,8 hello" -"-emote 12" -"-yell LOL" -"-yell,darnassian LOL" -"-savecache" -"-follow Keks" -"-quit" -etc. - -There is also some VERY basic chat AI, say hi,lol,omg,wtf,download,... when PseuWoW will hear you and it will respond :) -A full (and useful) chat AI will be implemented later. - -All trade and party invite rquests are automatically declined. -Note the "_onwhisper" script that is run everytime a whisper is recieved. - - - - -#################################################### -########## 6.) Compiling your own version ########## -#################################################### - -- i used Microsoft Visual Studio.NET 2003 for compiling -- download the include/lib package (see URL on top). copy the content into the - include/lib directory of the compiler. -- if needed, copy the reqired DLL files into the /bin directory (where the project files are) -- open the project and compile. - - - -#################################################### -########## 7.) A word to Blizzard ################## -#################################################### - -I always liked blizz... until WoW came out. -The management is shitty, almost no customer support, and bans in case they dont know what -to do with players. -Blizzard programmers and designers, YOU ARE GREAT and you made great games before -Blizzard got eaten up by vivendi universal. KEEP UP THE GOOD WORK! -After that, vivendi management fucked it all up. the result is WoW, a always-pay game like -Diablo3 will probably be. -So here are my greetings to the vivendi management: - - - - - - - Eat shit and die, bitches! - - _gm__gz, - ,Z\/` 'c\. - /,! '[W - ]!] . [] - ] ] .-==- b] - ]i ~ -==== !]- - ] ~~ -![ - W d` - 'b W - i[ 'M - ]. ~ 4. - ] -'[ - d -= b - M! @ - @ `-D - ]@ -]A - @P , , . '@ - M| ~` '` /]@ - _._. Y ciP - ,g/G/~Vi ![ '-V[ - ,Z~_/`- b@_ ,[ -` [ - _v4Tv/ .m/TGs,2V~-i ] \/.[ - ,vf ,(f `'iY.A / -[,z --=-__ - ,gY` v)` \-.@! ,--]Wf =/`,~N - ,gY` id / b@[ -/ ]M (b. - vf| - t[ !,i@P! ' ][. /`YZ~V,c. - if, ' , ,(] ]'@` ]b `'/@. `'*W. - K ,)`-'Z _ _ -/i@ i ' @Y |4t /Vmv. - b gz/-Z`'` @ - ] -P] ` , i ,!W ]@ ',/M.- - [ gZ\ ]! * i[ ! Z!d, ]- [W ~ \ ] X8.\ - ,[ '7v` A 'i ` - !' ] [@./ , ,] 4/c- - ] !i- `][ ,] ' e!] i - . m ! 'W = - W s-=` ][ !A /- ] W= ][! - A -Z- @- -! P ,A, , ] ,@ - [ '- ,/4. !' Z` [ . W g`/[ - Y.- ' /[ . ,/ !.'c/b- - Vi'- ' ! ! / ' `` @[ - 'e. ] , . v @[ - Vs. '. .- ` / @` - '5c. \ ! , --@. - \Zs `-. '- \ - -A - '\. - . ' ' - ` .-, = 'i[ - 'e. -' - , -` ,/ !vi\ v i*` - Vs -! -- ' v` ,'.-'/ _/`\` - 'G. ' ! '- / '.c\,` vfm/ - - !i ` -. ,` ` , `'c ,z7!.` - - Yi ' - ! . ,`` - - !` ,zL'` - b i , - - ' - , - - ,Z|!` - Y ` \- , , '- ` , . ,Z7 - 8 -- . ` -` .'.- -P - ] ] -, . - , ,[ - ]. Y- ' / 8 - i| ,' - ` . - ' W - ` , - - , , K - - - -(c) SnowStorm Software, 2006 -(and the finger belogs to SSG cracking group :P ) - diff --git a/src/Client/DefScript/DefScriptTools.cpp b/src/Client/DefScript/DefScriptTools.cpp index 63d65ac..3ce1200 100644 --- a/src/Client/DefScript/DefScriptTools.cpp +++ b/src/Client/DefScript/DefScriptTools.cpp @@ -6,6 +6,7 @@ #include #include #include +#include #include "DefScriptDefines.h" #include "DefScriptTools.h" @@ -25,8 +26,15 @@ std::string DefScriptTools::stringToUpper(std::string s) std::string DefScriptTools::toString(ldbl num) { std::stringstream ss; - ss << num; - return ss.str(); + ss.setf(std::ios_base::fixed); + ss.precision(15); + ss << Round(num,15); + std::string s(ss.str()); + while(s[s.length()-1]=='0') + s.erase(s.length()-1,1); + if(s[s.length()-1]=='.') + s.erase(s.length()-1,1); + return s; } std::string DefScriptTools::toString(uint64 num) @@ -72,16 +80,19 @@ ldbl DefScriptTools::toNumber(std::string str) u<<=32; u|=lobits; } - else - u = atoi64(str.c_str()); + else + u = atoi64(str.c_str()); if(ppos!=std::string::npos) { - std::string mantissa("0."); - mantissa+=str.c_str()+ppos; - num=(ldbl)strtod(mantissa.c_str(),NULL); + std::string mantissa("0"); + mantissa+=str.c_str()+ppos; + num=(ldbl)atof(mantissa.c_str()); } + num=(unsigned long double)num + u; + num=Round(num,10); + if(negative) num = -num; @@ -140,3 +151,9 @@ uint64 DefScriptTools::atoi64(const char *str) //return _atoi64(str); #endif } + +inline long double DefScriptTools::Round(long double z,unsigned int n) +{ + static long double v[] = { 1, 10, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16 }; + return floor(z * v[n] + 0.5) / v[n]; +} \ No newline at end of file diff --git a/src/Client/DefScript/DefScriptTools.h b/src/Client/DefScript/DefScriptTools.h index 073e43a..80d4eea 100644 --- a/src/Client/DefScript/DefScriptTools.h +++ b/src/Client/DefScript/DefScriptTools.h @@ -11,6 +11,7 @@ namespace DefScriptTools bool isTrue(std::string); uint64 toUint64(std::string); uint64 atoi64(const char*); + inline long double Round(long double z,unsigned int n); } diff --git a/src/PseuWoW.vcproj b/src/PseuWoW.vcproj index 7e0c60d..1175e44 100644 --- a/src/PseuWoW.vcproj +++ b/src/PseuWoW.vcproj @@ -26,6 +26,7 @@ Optimization="3" GlobalOptimizations="TRUE" InlineFunctionExpansion="2" + ImproveFloatingPointConsistency="FALSE" FavorSizeOrSpeed="1" AdditionalIncludeDirectories="shared;Client;Client/World;Client/Realm;dep/include" PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" @@ -93,6 +94,7 @@