Advertisement
Guest User

Untitled

a guest
Jun 3rd, 2013
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /* SA-MP Include SpeicherSystem
  2.  *
  3.  * (c) by Kaliber, 2013
  4.  *
  5.  */
  6. #if !defined _samp_included
  7.     #include <a_samp>
  8. #endif
  9. #if defined _SaveSystem
  10.     #endinput
  11. #endif
  12. #define _SaveSystem
  13. #define User::%0(%1) \
  14.     (__%0(%1))
  15. #define INVALID_ID 0
  16. #if !defined MAX_BUFFER
  17.     #define MAX_BUFFER 256
  18. #endif
  19. stock __save(pfad[], pw[], arg[], {Float,_}:...) {
  20.     new buffer[MAX_BUFFER];
  21.     format(buffer,MAX_BUFFER,"%s|",pw);
  22.     for(new i=3,l=numargs(); i<l; i++) {
  23.         new buf[32];
  24.         switch(arg[i-3]) {
  25.             case 'd','i': format(buf,32,"%d|",getarg(i,0)),strins(buffer,buf,strlen(buffer),MAX_BUFFER);
  26.             case 's': {
  27.                 for(new s; s<32; s++) if(getarg(i,s) != '\0') buf[s] = getarg(i,s);
  28.                 format(buf,32,"%s|",buf),strins(buffer,buf,strlen(buffer),MAX_BUFFER);
  29.             }
  30.             case 'f': format(buf,32,"%f|",getarg(i,0)),strins(buffer,buf,strlen(buffer),MAX_BUFFER);
  31.         }
  32.     }
  33.     new File:f=fopen(pfad,io_write);
  34.     return fwrite(f,buffer),fclose(f),1;
  35. }
  36. stock __load(pfad[], pw[], args[], {Float,_}:...) {
  37.     new buffer[MAX_BUFFER];
  38.     if(!fexist(pfad)) return INVALID_ID;
  39.     new File:f=fopen(pfad,io_read),pos,s_buf[32],l_pos,arg=2,idx;
  40.     fread(f,buffer),fclose(f);
  41.     while(pos != -1) {
  42.         pos = strfind(buffer,"|",false,l_pos);
  43.         if(pos == -1) break;
  44.         strmid(s_buf,buffer,l_pos,pos,32);
  45.         if(!l_pos) {
  46.             if(strcmp(s_buf,pw) != 0) return INVALID_ID;
  47.         }
  48.         else {
  49.             switch(args[idx]) {
  50.                 case 'd','i': setarg(arg,0,strval(s_buf));
  51.                 case 's': for(new i,l=sizeof(s_buf); i!=l; i++) if(s_buf[i] != '\0') setarg(arg,i,s_buf[i]);
  52.                 case 'f': setarg(arg,0,_:floatstr(s_buf));
  53.                 default: return INVALID_ID;
  54.             }
  55.             idx++;
  56.         }
  57.         l_pos = pos+1,arg++;
  58.     }
  59.     return 1;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement