rendered paste body//S:Props 0.2 By Sacky
#if defined _sprops_include
#endinput
#else
#define _sprops_include
#endif
#pragma library sprops
#if !defined GetArgString
#define GetArgString(%1,%2) for(new x=0;getarg(%1,x)!='\0';x++) %2[x] = getarg(%1,x)
#endif
#if !defined GetArgType
#define TYPE_STR 1
#define TYPE_FLO 2
#define TYPE_INT 3
#define GetArgType(%1,%2) if(getarg(%1,0) > 0) %2 = TYPE_STR; else if(Float:getarg(%1) == floatstr(strfloat(Float:getarg(%1)))) %2 = TYPE_FLO; else %2 = TYPE_INT
#endif
#if !defined strfloat
stock strfloat(Float:value){
new str[64];
format(str,sizeof(str),"%f",value);
return str;
}
#endif
stock SetProperty({Float,_}:...){
new num = numargs();
new totalstr[256];
for(new i=0;i<num-1;i++){
new semistr[64];
GetArgString(i,semistr);
if(!strlen(totalstr)) format(totalstr,sizeof(totalstr),"%s",semistr);
else format(totalstr,sizeof(totalstr),"%s - %s",totalstr,semistr);
}
new type,input[256];
GetArgType(num-1,type);
switch(type){
case TYPE_STR: GetArgString(num-1,inpaut);
case TYPE_FLO: format(input,sizeof(input),"%f",Float:getarg(num-1));
case TYPE_INT: format(input,sizeof(input),"%d",getarg(num-1));
}
setproperty(0,"",checksum(totalstr),input);
}
stock GetProperty({Float,_}:...){
new num = numargs();
new totalstr[256];
for(new i=0;i<num;i++){
new semistr[128];
GetArgString(i,semistr);
if(!strlen(totalstr)) format(totalstr,sizeof(totalstr),"%s",semistr);
else format(totalstr,sizeof(totalstr),"%s - %s",totalstr,semistr);
}
printf("totalstr = %s",totalstr);
new retstr[255];
if(existproperty(0,"",checksum(totalstr))){
getproperty(0,"",checksum(totalstr),retstr);
strunpack(retstr,retstr);
}
else printf("Property Does not exist: %s",totalstr);
return retstr;
}
stock IntProperty({Float,_}:...){
new num = numargs();
new totalstr[256];
for(new i=0;i<num;i++){
new semistr[64];
GetArgString(i,semistr);
if(!strlen(totalstr)) format(totalstr,sizeof(totalstr),"%s",semistr);
else format(totalstr,sizeof(totalstr),"%s - %s",totalstr,semistr);
}
return strval(GetProperty(totalstr));
}
stock Float:FloatProperty({Float,_}:...){
new num = numargs();
new totalstr[256];
for(new i=0;i<num;i++){
new semistr[64];
GetArgString(i,semistr);
if(!strlen(totalstr)) format(totalstr,sizeof(totalstr),"%s",semistr);
else format(totalstr,sizeof(totalstr),"%s - %s",totalstr,semistr);
}
return floatstr(GetProperty(totalstr));
}
stock bool:BoolProperty({Float,_}:...){
new num = numargs();
new totalstr[256];
for(new i=0;i<num;i++){
new semistr[64];
GetArgString(i,semistr);
if(!strlen(totalstr)) format(totalstr,sizeof(totalstr),"%s",semistr);
else format(totalstr,sizeof(totalstr),"%s - %s",totalstr,semistr);
}
return bool:strval(GetProperty(totalstr));
}
stock checksum(buffer[],mod = 65521){ //based on Yoms Hash
new a = 0,b = 1,c = 2,d = 3;
for(new i=0,j=strlen(buffer);i<j;i++){
a = ((a + buffer[i]) % mod);
b = ((a + b) % mod);
c = ((a + b + c) % mod);
d = ((a + b + c + d) % mod);
}
return ((d << 16) + (a + b + c));
}
//For testing
#include <a_samp>
#include <sprops>
main(){
print("\n");
SetProperty("This","Is","A","Test","String Test");
printf("%s - 1",GetProperty("This","Is","A","Test"));
SetProperty("This","Is","A","Test2",1098.87);
printf("%f - 2",FloatProperty("This","Is","A","Test2"));
SetProperty("This","Is","A","Test3",1847535);
printf("%d - 3",IntProperty("This","Is","A","Test3"));
SetProperty("This","Is","A","Test4",true);
printf("%d - 4",BoolProperty("This","Is","A","Test4"));
}
public OnGameModeInit() return 1;