Version History

From Sputnik Wiki
(Difference between revisions)
Jump to: navigation, search
(Sputnik 0.30 @ 26-06-2015 03:33 PM)
(Sputnik 0.37 @ 13-04-2016 12:17 AM)
 
(8 intermediate revisions by one user not shown)
Line 1: Line 1:
 +
== Sputnik 0.38 @ 09-11-2016 12:00 PM ==
 +
* Updated the "Pengo" example with the final version ever made in Sputnik it features a lot more ghosts/powerups/ais and levels
 +
* Updated the "Sputnik IDE" example it is now the latest and final version of the Sputnik Old GUI IDE it also comes with several sample projects including Peppie etc
 +
* Added new example it is a server manager for the game 7 days to die
 +
* Added new example D2ChanBot it is a bare bones Diablo 2 channel bot for PVPGN
 +
* Added back Linux/Mac support once more (again as long just 1 person is interested!)
 +
* Major improvement to "Class extends Name" where if the class is already running it will be hotswapped instead of the older version kept on pre initialized variables
 +
* Fixed a bug in Min() and Max() that could make them not work properly in rare cases
 +
* Fixed a major bug when deleting a key from an array if the key was numeric and very high
 +
* Fixed a bug with funtions that get an array recursively they will now not include the recursive arrays themself and just its values
 +
* Changed how Unserialize() works to fix a glitch in DLL Sputnik that can cause a crash (only happeneds in DLL version)
 +
* Added UnsetClassFunction() to do exactly what it says it does
 +
* Fixed a bug in sort() where if the array has only 1 (or less) elements it will return blank instead of returning a copy (if the flag asks for a return)
 +
* Fixed Tb() to add the . to the end instead of the beginning if the string isnt long enough
 +
* Added Bt64()
 +
* Added Tb64()
 +
* Did a little tweak to arrays to make sure they can never ever return disposed SVs
 +
* Made a tweak for binary "$var[0] = 'T'" it now works and doesnt need @'T' since it will correctly use the first char of the string
 +
* If you do "$var[7] = 'T'" on binary it will now expand the binary size so the position fits inside just like how it does with strings
 +
* Added BinaryGrow() it can be used to increase the size of binary by appending stuff to the end either zero bytes or a specific byte
 +
* Added StrGrow() it works same as BinaryGrow() but for strings instead also it returns a copy instead of editing the string
 +
* Vec() improved internally espeically with binary and will now if a binary provided is over 8 bytes it will use the first 8 as an integer in operations
 +
* StrUncompress() is now a lot faster
 +
* Order() speed improved a bit
 +
* NthField() has been speed up a lot and fixed to handle multiple lines
 +
* CountFields() fixed to handle multiple lines so it now returns how many fields there are in grand total amung all records
 +
* Addes NthRecord() it works similar to NthField() but returns an entire record at the given line instead of just a field
 +
* Added CountRecords() it works similar to CountFields() but returns how many records there are (one per line)
 +
* Fixed a few exceptions that can happen if invalid binary is given for reading NBTs
 +
* Added IsVarArrayOf() it checks if a variable is an array and checks if all elements inside the array are a specific type (such as string or class names)
 +
* Added a wave of encryption functions below:
 +
* EncCreatePass() this allows you to create a new pass (key and iv) from a given passphase with any amount of iterations and optionally a base salt
 +
* EncGenPass() this generates a new key and iv (randomized) using secure crypto random number generating it can be used to encrypt/decrypt AES etc data
 +
* EncPassInfo() prints all information about a pass made with EncGenPass()
 +
* EncGenKey() generate an RSA public & private key for use with encryption
 +
* EncKeyInfo() prints all information (including the raw xml (for export/saving), bytes etc) about a key made with EncGenKey()
 +
* EncLoadKey() loads an encryption key from a string
 +
* Encrypt() encrypt data using a key
 +
* Decrypt() decrypt data using a key
 +
* Sign() sign data using a private key that is proof only the owner of the private key could have signed but anybody with the public key can verify it
 +
* Verify() verify a signature with data using a public key
 +
* EncryptAes() encrypt data using the AES algorithm using a pass made from EncGenPass()
 +
* DecryptAes() dencrypt data using the AES algorithm using a pass made from EncGenPass()
 +
* EncryptPass() encrypt (using public key) a pass created from EncGenPass() with a key created from EncGenPass() so the encrypted pass can be sent to the client to decrypt using its private key
 +
* DecryptPass() decrypt (using private key) an encrypted pass created from EncryptPass() so that AES encrypted data can now be decrypted
 +
* EncryptChunk() this combines EncryptPass() and EncryptAes() to bascially encrypt the pass first then encrypt the data with the password then combine the encrypted data and the encrypted password into a single binary chunk to be decrypted later by the end users private key
 +
* DecryptChunk() this simply reverses what EncryptChunk() did and returns the original data
 +
* Added @EncKeyLen macro that shows how many bytes a "key" part of an AES pass should be (should you want to seed your own)
 +
* Added @EncIvLen macro that shows how many bytes a "iv" part of an AES pass should be (should you want to seed your own)
 +
 +
== Sputnik 0.37 @ 13-04-2016 12:17 AM ==
 +
* Fixed a serious bug where $this wasnt being set on unserialized classes
 +
* ConsoleWithInput example now splits big strings using wordwrap so it all fits properly
 +
* Count() is more accurate when used on arrays with disposed elements it will no longer say the array has the element
 +
* All obfuscation, renaming and everything to do with such has been removed from Sputnik (so full source is now viewable) however Sputnik will maintain embedding .dlls in its .exe since they are third party support dlls and are not "Spuntik___.dll"s (such as mysql.data.dll) as such they will be kept inside the .exe since it is rather pointless not to keep them there since then there is less dlls to give with a compiled script (same goes for Sputnik.dll)
 +
* Due to lack of Linux/Mac users (zero infact) Sputnik will no longer support them forever I kept Sputnik having support for them platforms for a long time and even came back to it after it was briefly removed however this time it is final there just nobody who uses it on them platforms...
 +
* The Sputnik GUI IDE which is used to create GUI scripts easily now has all its source code included in the Examples folder as another good example of Sputnik
 +
* Removed the "Goto" statement as a result Switch/Select now use "continue _name;" instead of "goto _name;"
 +
* You can now use & to pass variables by ref when using ... in a function like "function test(...&$numbers)"
 +
* Fixed a bug where "test(...$a);" wouldnt work but "test2(...$a, 7);" would since the parser considers (<ONE OBJECT>) to be the different
 +
* As a result of the above fix stuff that gets surrounded in (((((()))))) should now get resolved properly (sputnik now peels back the () layers to reveal the item itself)
 +
* Operator overloads are a bit faster
 +
* Class magic functions, operator overloads and iterator functions are now thread safe however only one thread at a time can use the SAME function (multiple threads can use multiple magic functions sure but only one can use the same function at a time)
 +
* Fixed a typo in "NBTCompoundReadFile" that would make it ignore the compression flag
 +
* Fixed the same typo that also affected "NBTCompoundWriteFile"
 +
* Improved safety of NBTCompoundWriteFile and made it even more reliable (it even checks the written bytes)
 +
* List() now supports iterator classes
 +
* List() is now slightly faster
 +
* You can no longer use "strings" on break/continue statements and must instead provide an identifier like "continue test;"
 +
* You can no longer use (  ) on break/continue statements and they now only accept either no params, an identifier or a variable/decimal etc if you do not provide an identifier then you will be expected to provide something that resolves to an integer
 +
* You can now continue to a named label like "continue('labelName');" and it will redo the label block similar to how you can break from named labels well this lets you redo the named label similar to how java handles named labels
 +
* You can  now do a "try{}" by itself and you do not need to include any "catch" statements this allows for quick and easy "try" statements you can still include a "finally" statement at the end if you wish
 +
* Fixed a minor glitch in "try" where if the exception variable was somehow not an "exception class" Sputnik could crash
 +
* You can now use "try" like a "using" statement using the new "()" braces for example "try($a = new test()) { }" everything inside the "()" will get an unset() once the try is finished (after the finally if there is one) this allows like a combination of "try" and "using" at the same time which is good for cleaning up after you
 +
* Added a new "When" statement onto the "Catch" statement it works like so "Catch (Exception e) When ($a == 60)" it basically acts like an if statement and that individual catch is only triggered when the "when" statement is true you can of course use it without the exception info like "Catch When ($a == 10)"
 +
* Added new function IsVarPointer() it basically does same thing IsVarPtr() and IsVarUPtr() do but both at same time
 +
* GetVarType() now returns @TypeError on failure
 +
* Added a second param to GetVarType() which when true allows the first param to be a string of name a type such as "binary" and then the function will return the type number from the string so now GetVarTypeName() has a reverse function
 +
* "Continue" and "Break" statements no longer give an error immediately if the name they are looking for does not exist however the code will still fail
 +
* Named blocks are now defined like "name:{}" instead of "name{}"
 +
* Macro "@CaseState" now works properly for "Switch" statements
 +
* Fixed a glitch in "Switch" statement where where ranges and regex would not work
 +
* Fixed a bug where if the caseId was not found then a switch/select would loop forever
 +
* Renamed "_default" to "_caseDefault" for Switch/Select
 +
* Switch/Select that are nested etc will now properly destroy any continue to starting with "_case" so that it does not spread beyond the switch this does of course mean that you can only jump to/from the current switch/select and not into another nesting will not work for the jumps (same as before)
 +
* Various improvements to "Switch" and "Select" they also now share the same code base (Select inherits Switch)
 +
* Fixed a glitch in Named Blocks that could cause them to iterate forever
 +
 +
== Sputnik 0.36 @ 19-12-2015 12:17 AM ==
 +
* Fixed a bug where a while etc placed after a statement could cause an exception if there wasnt enough params
 +
* Fixed a potential issue where modifying a string during a loop would cause a crash
 +
* Fixed a potential issue where modifying a binary variable during a loop would cause a crash
 +
* Fixed a bug where if you used unset() or something happened to unset the variable used in a foreach loop the loop would fail
 +
* Fixed another bug in IsSet() also it properly handles refs and it returns false if an SV become an error data type
 +
* Enum rule Flags TRUE now causes the first value to be 0 so you can set that as *none* etc
 +
* Added PadSep() it is just a simple function that will create text with separators of a given count for example PadSep('N', '/', 4) will produce 'N/N/N/N' (without quotes)
 +
* You can now define FLOAT hex literals using 0x30Ap
 +
* You can now define DOUBLE hex literals using 0x30AP
 +
* Oct() has been renamed to OctDec() so it is easier to see what it is doing
 +
* OctDec() is now faster
 +
* Added DecBin() to convert Decimal to Binary
 +
* Added BinDec() to convert Binary to Decimal
 +
* Fixed a bug in "ReturnCast" where it couldnt use regular types like Int64 etc
 +
* Function rules "Returns/ReturnCast" can now be set to require a class type by name instead of just the usual types like Int32
 +
* All functions now exexcute the "Return" statement if they are using "Returns" or "ReturnCast" flag and they did not execute the "Return" statement themselves
 +
* Added a new rule to functions "Strict" that will disregard inherited classes and require a match on the main class name
 +
* JSONDecode() can now correctly read raw true/false (the ones that arent quoted) such as {"active":true}
 +
* JSONEncode() now saves booleans as literal true/false (without quotes at all) instead of as a string
 +
* Added new option to JSONEncode() called @JSON_STRING_BOOLEAN this will make booleans become literal "true" "false" strings if you dont use this option then booleans will be saved as literal true/false (without quotes at all)
 +
* Added new option to JSONDecode() called @JSON_CHECK_STRING_BOOLEAN make it so any string that contains just "true", "false" (case insensitive) will become a literal boolean this wont slow down the decoding much since it only checks strings that are 4 or 5 chars in length
 +
* A string casting as a bool is now true if it contains "TrUe" etc case no longer cares for case
 +
* Changed internals of the "object" variable type cleaned it up alot there is now interfaces for casting on objects so anything can do it not just classes etc (will prove useful for future object types)
 +
* VarObjTypeToString() function deleted
 +
* VarObjTypeFromString() function deleted
 +
* GetVarOBJTypeName() function deleted
 +
* GetVarOBJType() function deleted
 +
* IsVarObj (param 2 removed)
 +
* Count() no longer returns null when used on a class that does not contain the count property (return 0 instead) same goes for other fails
 +
* Objects when cast as a string now return their type and default "ToString" function output if the object does not have a Sputnik string returner
 +
* The (binary) cast on an array is now recursive
 +
* Added "Synchronized" flag to functions it can be used to specify only one instance of that function can be executing at a time (regardless of how many threads want to)
 +
* ThreadCreate() accepts function(){} instead of a string
 +
* HotKeySet() accepts function(){} instead of a string
 +
* Added new function FMod()
 +
* Added new internal class "Serializable" it can be used to custom handle a class in Serialize() and Unserialize()
 +
* You can now use () braces in List() params it will grab a variable and set its value like "list( ($this->$cat) ) = $arr;" this is useful since you can use the () braces to set any variable even static :: variables etc where as before you could only set a named global/local variable the reason it has to use the () braces and not work without it is because of the way the param system was designed a long time ago however it is expected most people would try to () brace if their first idea of not using braces didnt work (it is logical to assume braces might help)
 +
* Operators [] and []! and [<>] and [<=>] for arrays now work on ref arrays without needing to * resolve the ref (not every operator in Sputnik should resolve the ref however these ones are specific to arrays and should work on ref arrays to be logical just like [index] does)
 +
* Added new internal class "Traversable" it is simply used to check if a given class can be used in a foreach loop you cant use "Traversable" by itself and it must be used with a built in thing
 +
* Added new internal class "Iterator" (it inherits Traversable) it can be used on a class and provides 3 functions "Valid()" should check if the current position is valid (so it lets you allow null returns) "Rewind()" should reset the position back to start and "Next()" should return the next element from the iterator and finally "Key()" should give the current key either as a number or string (the key will always be converted to a string) all this is for use with the foreach() loop as a side note the foreach() loop runs the "Rewind()" function before it starts the loop
 +
* Added new function IteratorToArray() it does exactly what the name says converts a class that inherits "Iterator" into an array with optional key grab or just values
 +
* Fixed a bug is IsSet() it was not using "return true/false" properly and would return TRUE if you returned false (since you didnt return null)
 +
* Added a simple chat only Hotline Server to the Examples folder it has a better protocol implementation than the client does and is more accurate and improved the HotlineClient example a bit
 +
* Added new example The Long Dark trainer this trainer demonstrates how to use CheatEngine scripts with Sputnik without having CheatEngine installed and never using CheatEngine at all (Using SputnikAsm.dll)
 +
* Improved InArray() a bit
 +
* Added ... for variadic functions it is used to provide easier usage of infinite arg functions "function f($req, $opt = null, ...$params)" once the function reaches $params (or any name you want) it will push all the remaining params into it and send it as an array to the function you can also do type based like "function f($req, $opt = null, int ...$params)"
 +
* Added ... for variadic functions but this time as a call param for example "add(1, ...$operators);" will unpack $operators array or iterable class into arguments of the function
 +
* Fixed a bug where if a function call ended in failure (major error) the stack wouldnt be popped
 +
* Added new function HashEquals() it will compare an expected hash to an input hash make sure its valid it will also check they both the same size and what not for use with crypt() and other such hash functions
 +
 +
== Sputnik 0.35 @ 29-09-2015 12:17 AM ==
 +
* Bitwise string stuff no longer casts each string char as a byte (thus losing data if its unicode) so it now correctly works with Sputniks unicode strings
 +
* Fixed a bug where the list of classes a class inherits may get disordered resulting in some interesting things to happen
 +
* Greatly improved speed of class magic functions: JsonSerialize() ShouldJsonSerialize() __Set() _Get() __IsSet() __Unset()
 +
* Fixed a bug where isset($a['Bar']); would not call the class function __IsSet() with first param as 'Bar' at all
 +
* Fixed a bug where isset($a['Bar']); would call the class function __Get() when it shouldnt
 +
* Fixed a bug where unset($a['Bar']); would call the class function __Get() when it shouldnt
 +
* Fixed a glitch where if there is no class function __Unset() and you did unset($a['Bar']); it would try unset the elemnent
 +
* Parent::FunctionName() will no longer give an error if you inherited more than one class and will instead use the first inherited class to locate the function if it is not found on the first it wil try the second and so on until it finds it
 +
* Renamed function Use() to PluginLoad()
 +
* Renamed function Unuse() to PluginUnload()
 +
* Removed function TokenClass()
 +
* Removed function IsToken()
 +
* The parser no longer needs to use TokenClass()/IsToken() or ObjToVar() and as a result is more user friendly also it doesnt require pointers anymore (the calc example has been updated to show this change)
 +
* Fixed a minor issue where Parse() might not return NULL on a certain failure
 +
* You no longer need to have the __Construct() { } as an empty when using the parser you can now omit it entirely
 +
* Renamed magic class function __call() to __invoke()
 +
* Added magic class function __call() it has two arguments the first is a function name and the second is an array of params this will get called if you try call a class function that does not exist its name and arguments you tried to use will be passed to __call()
 +
* Added magic class function __callStatic() it works similar to __call() but instead of working on an instance it works in static context only
 +
* Call() no longer checks if you typed a static function
 +
* CallArray() no longer checks if you typed a static function
 +
* ->/=> no longer checks if you typed a static function
 +
* class::function no longer tells you if you didnt type a static function
 +
* self:: now shows an error if there is no self class found
 +
* Removed requirements that enum (when using flags) values be divisible by 2 and and higher than 0 this means you get to decide what the number is and join multiple flags together however you should take care to make sure the number is valid
 +
* Renamed rule "override" on enums to "replace"
 +
* Renamed rule "override" on functions to "replace"
 +
* Added UInteger() and the new cast (UInteger) for unsigned 64-bit integer (or highest available)
 +
* You can now use the "Not" keyword instead of "!" for example if (NOT $a) is the same as if (!$a)
 +
* You can now do $array .= "Value" and no longer need to encase "Value" in array("Value")
 +
* You can now do $array ..= "Value" and no longer need to encase "Value" in array("Value")
 +
* Fixed a bug where say("CAT") x 3 would print "CATCATCAT" instead of printing each one on a new line
 +
* Fixed same bug as above this time time with xx instead of x
 +
* You can now have infinite $ on your variable for use with Variable Variables like $$$$bar it will resolve each one
 +
* Added IntDiv() it works like a normal $a / $b when using integers but does it in a function
 +
* Added FDiv() it works like IntDiv() but for use with floating point numbers
 +
* Fixed a bug where Switch() wasnt working properly with ranges and regex
 +
* Fixed a bug in preprocessor where #predef and #unpredef would get confused by case now it is properly case insensitive
 +
* Fixed a bug with the parser that caused the current instance of Sputnik to get lost on second parse when using preprocessor
 +
* Fixed a bug where if you did a function name with no brackets like test; the ";" symbol would be used as its *first and only* param this has been fixed so now ; is omitted from any call this also means you can no longer use ; as a computable value
 +
* As a result of the above fix you can now use redo; properly again in try/catch/finally
 +
* You can now omit the ( ) when doing "my $Func = Function() { printr @Args; };" like so "my $Func = Function { printr @Args; };" this will cause the Args rule to set to TRUE automatically so you dont need to type it
 +
* Added new macro @ArgCount this contains the number elements in @Args for functions with infinite params @ArgCount is basically Count(@Args)
 +
 +
== Sputnik 0.34 @ 24-09-2015 05:45 AM ==
 +
* Unknown (was lost somehow)
 +
 +
== Sputnik 0.33 @ 20-09-2015 05:55 PM ==
 +
* Def has been renamed to Const since Def was confusing for some people
 +
* Sputnik classes have been reworked massively internally and now use a lot less ram and should be faster too bascially before this change all new className() would create a new instance of the class (which is a fairly big object) but now only one instance of the class ever exists at a time and instead of creating new ones it simply refs the existing one with an array of the class variables (and id etc) so each individual class you create are all using the same class but different internal array
 +
* Classes no longer require a ; after their declaration (when stand alone)
 +
* Enums no longer require a ; after their declaration (when stand alone)
 +
* You can now embed Functions inside IF statements (or any statement) using the Embedded keyword before the function also you must include a ; after the final }
 +
* You can now embed Classes inside IF statements (or any statement) using the Embedded keyword before the class also you must include a ; after the final }
 +
* You can now embed NAMED Enums inside IF statements (or any statement) using the Embedded keyword before the enum also you must include a ; after the final }
 +
* Removed Compile() function it was a useless thing (now) that should have been removed in 0.32 but I forgot to do so
 +
* Removed UnuseAssembly()
 +
* Drastic performance increase on Str2Hex()
 +
* Drastic performance increase on Hex2Str()
 +
* StrIndex() now returns a CHAR instead of STRING (if getting) and returns NULL on failures instead of alternating between empty strings and false also it is now faster too
 +
* Added TrimToNull() it will trim a string to the first null char it finds (zero)
 +
* StrShuffle() is now faster
 +
* Fixed bug in StrVersCmp() where it only compared the str1 to the length of str2 then stopped now it properly does all the str1
 +
* StrVersCmp() now returns the proper diff instead just -1, 0, 1
 +
* StrTr() now returns NULL on failure and no longer has an exception if an invalid array is given (or no array)
 +
* WordWrap() improved massively it is now faster and works a lot better and no longer has any chance of failing to wrap properly and all bugs are fixed
 +
* Removed GUIInvoke() from SputnikOldGui.dll
 +
* Added GUISendToBack() and GUISendToFront() to the SputnikOldGui.dll to replace the removed GUIInvoke()
 +
* As a result of the above new functions the IDE now properly works once again
 +
* Added @Argc it contains the number of arguments in @Argv so @Argc is bascially Count(@Argv)
 +
* Sputniks internal ReturnStruct no longer uses "ref" keyword so any plugins/commands will need to remove "ref" when using it other than that no real differance
 +
* Made some minor improvements to how -> is handled internally
 +
* Improved speed of objects a little bit should help with classes etc
 +
 +
== Sputnik 0.32 @ 18-09-2015 08:04 PM ==
 +
* Since Sputnik has been used as a *library* for some time now and even more so with the current push to make all Sputniks functions available in the SpkLib class it has been decided to remove all *code* obfusctation and control flow alternations from Sputnik this should make Sputnik run a bit faster (especially so for games)
 +
* Removed % operator for DotNet usage since it has been decided Sputty doesnt need it (this change also removes anything that makes use of the DotNet system Sputnik was using from the % operator)
 +
* Removed Fixed() statement and CharPtr (char*) from Sputnik since it was confusing to have it in and it not needed anymore (it was good a LONG time ago but not anymore)
 +
* Use() can now use an array for first param that contains a type name followed by namespace name this will be used as normal (as if you just used namespace only as usual) but since you also provided a type name Sputnik will try find that type and if it happens to be a Sputnik plugin it will load and activate it this allows Managed C++ plugins to work properly just like C# plugins do (with a bit extra typing of course)
 +
* Fixed CommandSystem in lib which also fixed ConsoleServer example etc
 +
* SocketConnect() no longer crashes if it doesnt connect but instead returns FALSE so you can now do SocketConnect(~~) or die('bla'); etc
 +
* Improved SocketShutdown() the same as SocketConnect()
 +
* Improved SocketSendTo() the same as SocketConnect() and also made it cast a variable to binary if its not already
 +
* Improved SocketSendFile() the same as SocketConnect()
 +
* Improved SocketSend() the same as SocketConnect()
 +
* Improved SocketReceive() the same as SocketConnect()
 +
* Improved SocketReadLine() the same as SocketConnect() also it will return NULL on failures instead of an empty string so you can tell them apart
 +
* Improved SocketReadChar() the same as SocketReadLine()
 +
* Improved SocketPoll() the same as SocketConnect()
 +
* Improved SocketOpt() the same as SocketConnect() also failures will return NULL
 +
* Improved SocketListen() the same as SocketOpt()
 +
* Improved SocketIsBound() the same as SocketOpt()
 +
* Improved SocketIp() the same as SocketOpt() and fixed a bug where if you entered invalid key it would not have an issue
 +
* Improved SocketHandle() the same as SocketOpt()
 +
* Improved SocketClose() the same as SocketOpt()
 +
* Improved SocketBind() the same as SocketOpt()
 +
* Improved SocketAvailable() the same as SocketOpt()
 +
* Improved SocketAccept() the same as SocketOpt()
 +
* Improved SocketCreate() the same as SocketOpt()
 +
* Improved SSApprove() to only return false on failures instead of exceptions
 +
* Improved SSClientIP() to only return NULL on failures instead of exceptions
 +
* Improved SSClientStatus() the same as SSClientIP()
 +
* Improved SSDisapprove() the same as SSApprove()
 +
* Improved SSDrop() the same as SSApprove()
 +
* Improved SSRead() the same as SSClientIP()
 +
* Improved SSRecv() the same as SSClientIP()
 +
* Improved SSSend() the same as SSApprove()
 +
* Improved HostResolve() to return NULL on failure
 +
* BinaryIndexOfAny() supports proper start/length position stuff of Sputnik
 +
* Added IsHashAny() it works similar to IsHash() but will trigger if at least one element is
 +
* Changed Trainer examples to use the new SpkProc since the old read/write have been replaced with it
 +
* Updated Dark Earth Trainer to store its data in JSON to avoid issues reading it in future
 +
* Added HasFlag() it can be used to check if an instance of an enum contains a given flag or an array of flags
 +
* Added SetFlag() it can be used to set a flag (or array of flags) on/off in the enum instance
 +
* Added HasFlagAny() it works like HasFlag() but returns true if at least one flag matches instead of requiring them all to
 +
* Fixed a possible exception from IntToRom() so it will return an empty string instead
 +
* Hash() now uses UTF8 and all return values are UInt64 instead of Int64 this makes it look a bit better since it doesnt produce negative numbers anymore also any chance of an overflow exception has been fixed
 +
* Fixed several places in Spuntik that look at 0x followed by hex digits and the x was not being checked for case so only x would work no X
 +
* Fixed a crash where StrNew() would evenutally cause a memory exception to explode and kill Sputnik (it correctly allocates now)
 +
* StrChr() now has a param for length
 +
* Strpbrk() now has a param for length
 +
* StrrChr() now has a param for length
 +
* Changed how the index param works on StrIndex() it now works the same as the one in SubStr() does
 +
* StripCSlashes() speeded up a bit by fixing a bug that made it copy the string for no reason
 +
* Modified InStr() a bit and improved it a lot its flag is now a boolean for IgnoreCase it now returns -1 on failure (instead of 0) however it still maintains returning 0 on success also the position it returns (when valid) has been fixed so it correctly starts at the index and that index can be used in substr immediately the start can now be negative like substr() and there is a new length param the same as substr() and finally fixed a bug where it scans the needles length in the haystack even if the neddle is going DEEP past the null terminator which could crash Sputnik
 +
* Removed InStrRev() from lib folder (it was outdated and slow) will add a new speedy one soon
 +
* Added InStrRev() it works similar to InStr() but instead of searching from left to right it searches from right to left it is very fast (just like InStr()) however it only starts inside the start/length you give it and not beyond that so if you want to search half your string set start to 0 and length to strlen / 2
 +
* Fixed a bug in InStr() (and indirectly InStrRev()) where if the item was not found it may return -2 or something now the cap is -1
 +
* StrCmp() now has start/length params
 +
* StrStr() now has start/length params and it returns NULL on failure instead of FALSE and fixed a bug where if the match was the first char in the string it would return NULL
 +
* StrPos() offset param has been removed and replaced with start/length params (This will break any scripts using StrPos() but it is a very minor change all you do is shift the offset to after the flags and everything will work again)
 +
* Added StrDup() it is just a simple duplication function for strings (similar to clone() does)
 +
 
== Sputnik 0.31 @ 14-09-2015 10:18 PM ==
 
== Sputnik 0.31 @ 14-09-2015 10:18 PM ==
 
* ReadMem() has been changed to use UnpackSingle() instead of Unpack() so only one thing can be read at a time (but you can of course read entire chunks of ram and process it using Unpack()) also there is no "binary" def anymore instead you simply do not include a def at all and it iwl use the size to read the many bytes and return it as raw bytes
 
* ReadMem() has been changed to use UnpackSingle() instead of Unpack() so only one thing can be read at a time (but you can of course read entire chunks of ram and process it using Unpack()) also there is no "binary" def anymore instead you simply do not include a def at all and it iwl use the size to read the many bytes and return it as raw bytes

Latest revision as of 12:00, 9 November 2016

Contents

Sputnik 0.38 @ 09-11-2016 12:00 PM

Sputnik 0.37 @ 13-04-2016 12:17 AM

Sputnik 0.36 @ 19-12-2015 12:17 AM

Sputnik 0.35 @ 29-09-2015 12:17 AM

Sputnik 0.34 @ 24-09-2015 05:45 AM

Sputnik 0.33 @ 20-09-2015 05:55 PM

Sputnik 0.32 @ 18-09-2015 08:04 PM

Sputnik 0.31 @ 14-09-2015 10:18 PM

Sputnik 0.30 @ 26-06-2015 03:33 PM

Sputnik 0.29 @ 25-06-2015 08:40 AM

Sputnik 0.28 @ 19-06-2015 07:12 PM

Sputnik 0.27 @ 14-06-2015 01:15 PM

Sputnik 0.26 @ 07-06-2015 10:08 AM

Sputnik 0.25 @ 16-12-2014 08:06 AM

Sputnik 0.24 @ 29-11-2014 01:05 AM

Whats New

Known issues in current version:

Sputnik 0.23b3 @ 14-08-2014 10:09 PM

Whats New

Sputnik 0.23b2 @ 14-08-2014 02:18 PM

Whats New

Sputnik 0.23b1 @ 12-08-2014 02:23 AM

Whats New

Sputnik 0.23 @ 08-11-2014 05:54 AM

Whats New

Sputnik 0.22 @ 03-21-2014 05:54 AM

Whats New

Sputnik 0.21 @ 09-28-2013 05:26 PM

Whats New

Sputnik 0.20 @ 09-19-2013 10:58 PM

Whats New

Sputnik 0.19 @ 09-16-2013 10:25 PM

Whats New

Sputnik 0.18 @ 09-12-2013 01:42 AM

Whats New

$a = array(); $a[0] = "blah"; $a[1] = $a;

println("C:\\"); // Where as this would fail <-- No longer fails

Sputnik 0.17 @ 08-29-2013 05:49 PM

Whats New

Sputnik 0.16 @ 08-25-2013 07:56 AM

Whats New

Sputnik 0.15 @ 08-25-2013 01:15 AM

Whats New

Lower than 0.15

No information available.

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox