|
|
- //----------------------------------------------------------
- //
- // GRAND LARCENY common functions include.
- //
- //----------------------------------------------------------
-
- stock LoadStaticVehiclesFromFile(const filename[])
- {
- new File:file_ptr;
- new line[256];
- new var_from_line[64];
- new vehicletype;
- new Float:SpawnX;
- new Float:SpawnY;
- new Float:SpawnZ;
- new Float:SpawnRot;
- new Color1, Color2;
- new index;
- new vehicles_loaded;
-
- file_ptr = fopen(filename,filemode:io_read);
- if(!file_ptr) return 0;
-
- vehicles_loaded = 0;
-
- while(fread(file_ptr,line,256) > 0)
- {
- index = 0;
-
- // Read type
- index = token_by_delim(line,var_from_line,',',index);
- if(index == (-1)) continue;
- vehicletype = strval(var_from_line);
- if(vehicletype < 400 || vehicletype > 611) continue;
-
- // Read X, Y, Z, Rotation
- index = token_by_delim(line,var_from_line,',',index+1);
- if(index == (-1)) continue;
- SpawnX = floatstr(var_from_line);
-
- index = token_by_delim(line,var_from_line,',',index+1);
- if(index == (-1)) continue;
- SpawnY = floatstr(var_from_line);
-
- index = token_by_delim(line,var_from_line,',',index+1);
- if(index == (-1)) continue;
- SpawnZ = floatstr(var_from_line);
-
- index = token_by_delim(line,var_from_line,',',index+1);
- if(index == (-1)) continue;
- SpawnRot = floatstr(var_from_line);
-
- // Read Color1, Color2
- index = token_by_delim(line,var_from_line,',',index+1);
- if(index == (-1)) continue;
- Color1 = strval(var_from_line);
-
- index = token_by_delim(line,var_from_line,';',index+1);
- Color2 = strval(var_from_line);
-
- //printf("%d,%.2f,%.2f,%.2f,%.4f,%d,%d",vehicletype,SpawnX,SpawnY,SpawnZ,SpawnRot,Color1,Color2);
-
- AddStaticVehicleEx(vehicletype,SpawnX,SpawnY,SpawnZ,SpawnRot,Color1,Color2,(30*60)); // respawn 30 minutes
-
- /*new numplate_test[32+1];
- format(numplate_test,32,"GRLC{44AA33}%d",vid);
- SetVehicleNumberPlate(vid, numplate_test);*/
-
- vehicles_loaded++;
- }
-
- fclose(file_ptr);
- printf("Loaded %d vehicles from: %s",vehicles_loaded,filename);
- return vehicles_loaded;
- }
-
- //----------------------------------------------------------
-
- stock strtok(const string[], &index)
- {
- new length = strlen(string);
- while ((index < length) && (string[index] <= ' '))
- {
- index++;
- }
-
- new offset = index;
- new result[20];
- while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
- {
- result[index - offset] = string[index];
- index++;
- }
- result[index - offset] = EOS;
- return result;
- }
-
- //------------------------------------------------
-
- stock strrest(const string[], &index)
- {
- new length = strlen(string);
- while ((index < length) && (string[index] <= ' '))
- {
- index++;
- }
- new offset = index;
- new result[128];
- while ((index < length) && ((index - offset) < (sizeof(result) - 1)))
- {
- result[index - offset] = string[index];
- index++;
- }
- result[index - offset] = EOS;
- return result;
- }
-
- //----------------------------------------------------------
- // Tokenise by a delimiter
- // Return string and index of the end determined by the
- // provided delimiter in delim
-
- stock token_by_delim(const string[], return_str[], delim, start_index)
- {
- new x=0;
- while(string[start_index] != EOS && string[start_index] != delim) {
- return_str[x] = string[start_index];
- x++;
- start_index++;
- }
- return_str[x] = EOS;
- if(string[start_index] == EOS) start_index = (-1);
- return start_index;
- }
-
- //----------------------------------------------------------
-
- stock isNumeric(const string[])
- {
- new length=strlen(string);
- if (length==0) return false;
- for (new i = 0; i < length; i++)
- {
- if (
- (string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') // Not a number,'+' or '-'
- || (string[i]=='-' && i!=0) // A '-' but not at first.
- || (string[i]=='+' && i!=0) // A '+' but not at first.
- ) return false;
- }
- if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
- return true;
- }
-
- //----------------------------------------------------------
-
- stock IsKeyJustDown(key, newkeys, oldkeys)
- {
- if((newkeys & key) && !(oldkeys & key)) return 1;
- return 0;
- }
-
- //----------------------------------------------------------
-
- stock PlaySoundForAll(soundid, Float:x, Float:y, Float:z)
- {
- for(new i=0; i<MAX_PLAYERS; i++)
- {
- if(IsPlayerConnected(i))
- {
- PlayerPlaySound(i, soundid, x, y, z);
- }
- }
- }
-
- //----------------------------------------------------------
-
- stock PlaySoundForPlayersInRange(soundid, Float:range, Float:x, Float:y, Float:z)
- {
- for(new i=0; i<MAX_PLAYERS; i++)
- {
- if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,range,x,y,z))
- {
- PlayerPlaySound(i, soundid, x, y, z);
- }
- }
- }
-
- //----------------------------------------------------------
-
- #define RETURN_USER_FAILURE -1
- #define RETURN_USER_MULTIPLE -2
-
- stock ReturnUser(text[])
- {
- new pos = 0;
- new userid = RETURN_USER_FAILURE;
-
- while(text[pos] < 0x21) { // Strip out leading spaces
- if(text[pos] == 0) return RETURN_USER_FAILURE; // No passed text
- pos++;
- }
-
- if(isNumeric(text[pos])) { // Check whole passed string
- userid = strval(text[pos]);
- if(userid >=0 && userid < MAX_PLAYERS)
- {
- if(IsPlayerConnected(userid)) return userid;
- return RETURN_USER_FAILURE;
- }
- }
-
- // They entered [part of] a name or the id search failed (check names just incase)
- new len = strlen(text[pos]);
- new count = 0;
- new name[MAX_PLAYER_NAME+1];
-
- for(new i = 0; i < MAX_PLAYERS; i++)
- {
- if(IsPlayerConnected(i))
- {
- GetPlayerName(i, name, sizeof(name));
- if(strcmp(name, text[pos], true, len) == 0) // Check segment of name
- {
- if(len == strlen(name)) { // Exact match
- return i;
- }
- else { // Partial match
- count++;
- userid = i;
- }
- }
- }
- }
-
- if(!count) return RETURN_USER_FAILURE;
- if(count > 1) return RETURN_USER_MULTIPLE;
-
- return userid;
- }
-
- //----------------------------------------------------------
|