Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static private bool SSCANF(string parameters, string format, out List<object> argument_list)
- {
- /*
- * Based on: https://wiki.sa-mp.com/wiki/Sscanf_code
- *
- * Differences:
- * - You have to pass in an object list, it cannot be supplied via. parameters.
- * - 'u' will return BasePlayer.
- * - Returns a boolean, true = successful, false = unsuccessful.
- */
- NP_Log.LogDebug("SSCANF: '{0}' '{1}'", parameters, format);
- argument_list = new List<object>();
- if(string.IsNullOrWhiteSpace(parameters))
- {
- NP_Log.LogDebug("SSCANF: parameters is whitespace or null.");
- return false;
- }
- string[] parameter = parameters.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
- for(int i = 0, l = format.Length; i < l; ++i)
- {
- if(parameter.Length == 0)
- {
- NP_Log.LogDebug("SSCANF: Format did not match parameter length.");
- return false;
- }
- try { // Only thing that can throw an error is Parse.
- switch(format[i])
- {
- case ' ': // Skip whitespace.
- continue;
- break;
- case 'c': // Character.
- char c = parameter[0][0];
- argument_list.Add(c);
- parameter = parameter.Skip(1).ToArray();
- break;
- case 'd': // Integer.
- case 'i':
- int number = int.Parse(parameter[0]);
- argument_list.Add(number);
- parameter = parameter.Skip(1).ToArray();
- break;
- case 'h': // HEXADECIMAL (Colour).
- case 'x':
- int hex = int.Parse(parameter[0], NumberStyles.HexNumber);
- argument_list.Add(hex);
- parameter = parameter.Skip(1).ToArray();
- break;
- case 'f': // Float or double.
- float flt = (float) double.Parse(parameter[0]);
- argument_list.Add(flt);
- parameter = parameter.Skip(1).ToArray();
- break;
- case 's': // String.
- string text;
- if((i + 1) == l)
- {
- text = string.Join(" ", parameter);
- }
- else
- {
- text = parameter[0];
- }
- argument_list.Add(text);
- parameter = parameter.Skip(1).ToArray();
- break;
- case 'z': // Optional string.
- break;
- case 'u': // Will try to convert to BasePlayer.
- BasePlayer player = null;
- try
- {
- player = BasePlayer.Find(int.Parse(parameter[0]));
- }
- catch(Exception ex)
- {
- player = BasePlayer.All.FirstOrDefault(p => p.Name.ToLower() == parameter[0].ToLower());
- }
- argument_list.Add(player);
- parameter = parameter.Skip(1).ToArray();
- break;
- default: // Return false to any other string.
- NP_Log.LogDebug("SSCANF: Invalid format.");
- return false;
- break;
- }
- }
- catch(Exception ex)
- {
- NP_Log.LogDebug("SSCANF: Parsing error.");
- return false;
- }
- }
- NP_Log.LogDebug("SSCANF: Success.");
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement