YSI Wiki
Advertisement

Introduction[]

This is just a brief introduction to where I would like YSI to go, some parts are more urgent than others, but some of these parts have been on the cards for a long time because they're outside my area of expertise.  The tasks have been split in to three groups:


- Library Development,

- Mode Development (including mini-mode development),

- Web Development.

Library Development []

This has often been the sole preserve of myself, but that is because few other people have as much knowledge of the internals of YSI as I do, which does make it hard for others to develop libraries for YSI.  I have attempted to document some of the processes, but it is still a skilled art (though for my own sake I have gone to great lengths to simplify the code).  However if people are willing to assist in this area I am VERY willing to offer help and support whenever possible.  My time for coding is very limited at the moment, however I am always on IRC and if people wish to chat about things I'm sure I can spend a few minutes helping them out.  There are a number of libraries already in development, and more in the pipeline or requiring attention:


- Require attention:

- y_ini - When the first version of this was released it was VASTLY faster than any other system available because it used a vastly different read system to the others.  I still maintain that it is a good system, however people seem intent on using dini style function calls so a dual system would seem to be the best bet.  In that regard I have an idea for a cache system which is a direct replacement for dini:


[pawn]

LoadFunc(file)

{

gSomeVar = dini_Int(file, "value"); // Open and cache the file here.

gSo


  1. define _A_LONG_SYMBOL_ENDING_WITH_AN_A%0> "A"_A_LONG_SYMBOL_ENDING_WITH_AN_%0
  1. define _A_LONG_SYMBOL_ENDING_WITH_AN_B%0> "A"_A_LONG_SYMBOL_ENDING_WITH_AN_%0
  1. define _A_LONG_SYMBOL_ENDING_WITH_AN_C%0> "A"_A_LONG_SYMBOL_ENDING_WITH_AN_%0


  1. define _H(%0) _A_LONG_SYMBOL_ENDING_WITH_AN_%0>


main()

{

print(_H(ABC));

}

[/pawn]


That gives an error which lists, but doesn't find "_A_LONG_SYMBOL_ENDING_WITH_AN_A".  I tried forcing a reparse with a tagged function but that didn't work.  As I said, I doubt this is possible, so don't worry too much about it.


- y_iterate - There's an error message "Something went wrong, please tell Y_Less".  I've had a few people report it but I don't know why it happens, only that it sometimes does.  I can't rule out the possibility that they're not using it right.


- y_classes - Still needs some work to make usage smooth.

- y_minimode - y_minimode is a plan for a major minimode wrapper.  Minimodes will be written as entirely separate scripts and compiled to the server/minimodes folder (which CAN be loaded from using loadfs).  The callbacks in the modes will be new, for example "OnMiniModeInit", "OnPlayerJoin", "OnMiniModeStart", plus all the other in-play callbacks ("OnPlayerDeath" etc) and YSI callbacks ("OnPlayerLogin", which will be called automatically for people logged in before they join the mode).  This will provide a subset of all available functions and callbacks so you can write modes essentially in a sandbox - calling things like "CreatePlayerCheckpoint" will automatically call the streamed version underneath (where applicable) for example, and all resources will be cleaned up after.  Any settings the player had before joining the mode will be automatically restored.  This will involve two includes being written - y_minimode and a_minimode, the former being the code included by the main gamemode to allow people to join and start modes, the latter being the include used to write minimodes.  More information available on request.  Note that although this is listed under "In development", it really isn't very far.


- Planned:

I have plans for libraries for basically anything you can think of.  Jobs, properties (YSI 0.1 has one already, but it's intertwined with the CP streamer which has been dropped in favour of plugins), items, anything else anyone can think of.  This is probably the easiest job for a person new to YSI development to do because there's very little dependency on other libraries or code to learn.


- y_mouse - Ages ago I wrote a topic on how to use the mouse from the SA:MP server, this needs wrapping up and making smoother.  Most of the problem with this is finding a way to force fast updates (as you get when in aim mode - possibly by setting a player's animation).


- y_menu - Define menu systems generically.


- y_gui - Read basic bitmap files and convert the apperance to a set of textdraws to draw GUIs on a person's screen.  This would ideally be combined with y_mouse to make a whole new set of input options (think inventories in other games).


- y_player - A user system with interchangable backends (SQLite, MySQL, INI, XML etc) with dynamic code so that you don't need to define your databases in advance (Slice has also demonstrated this in the past).

Advertisement