Advertisement
Guest User

Immobiliensystem

a guest
Oct 14th, 2012
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 9.75 KB | None | 0 0
  1. /*
  2. Immobiliensystem (1.0)
  3. (c) by NeRoTeX
  4.  
  5. Stand: 14.10.2012
  6.  
  7. Der Verkauf dieses Werkes ist untersagt!
  8. */
  9.  
  10. #include <a_samp>
  11. #include <dini>
  12.  
  13. #define MAX_IMMOS 50 //Maximale Anzahl an Immobilien
  14. #define IMMO_RESELL 0.5 //Immobilienpreis * IMMO_RESELL = Verkaufspreis
  15. #define IMMO_ICON 1274
  16. #define IMMO_DRAW_DIS 15.0 //Darstellungsdistanz des 3DLabels
  17. #define IMMO_RANGE 2.0 //Maximale Distanz für GetPlayerImmo
  18. #define IMMO_MAX_NAME 32 //Maximale Länge des Names einer Immobilie
  19. #define IMMO_COLOR 0xFFD200FF //Farbe des 3DLabels
  20.  
  21. #define IMMO_FILE "/IMMO_FILES/" //Speicherordner für Immobilien
  22.  
  23. enum ImmoEnum
  24. {
  25.     iID,
  26.     iName[IMMO_MAX_NAME],
  27.     iPreis,
  28.     iOwner[MAX_PLAYER_NAME],
  29.     Text3D:iLabel,
  30.     iGewinn,
  31.     Float:iXPos,
  32.     Float:iYPos,
  33.     Float:iZPos,
  34.     iPickup
  35. };
  36. //Enum + Array
  37. new Immo[MAX_IMMOS][ImmoEnum];
  38.  
  39. //Natives
  40. /*
  41. native CreateImmo(id,Name[],Preis,Gewinn,Float:XPos,Float:YPos,Float:ZPos);
  42. native DeleteImmo(id);
  43. native LoadImmo(id, bool:reload=false);
  44. native SaveImmo(id, bool:unload=false);
  45. native LoadAllImmos(bool:reload=false);
  46. native SaveAllImmos(bool:unload=false);
  47. native UpdateImmo(id);
  48. native BuyImmo(id, playerid, bool:force=false);
  49. native SellImmo(id, playerid=-1);
  50. native MoveImmo(id, Float:x, Float:y, Float:z);
  51. native IsImmoCreated(id);
  52. native IsImmoFree(id);
  53. native GetFreeImmoID();
  54. native SetImmoGewinn(id, Gewinn);
  55. native SetImmoPreis(id, Preis);
  56. native SetImmoName(id, Name[]);
  57. native SetImmoOwner(id, playerid);
  58. native GetImmoOwnerByName(id);
  59. native GetImmoPos(id, &Float:x, &Float:y, &Float:z);
  60. native GetImmoGewinn(id);
  61. native GetImmoPreis(id);
  62. native GetImmoName(id);
  63. native GetImmoOwner(id);
  64. native GetPlayerImmo(playerid);
  65. native IsPlayerImmoOwner(id, playerid);
  66. native GetPlayerImmoCount(playerid);
  67. */
  68.  
  69. //Funktionen
  70. stock LoadAllImmos(bool:reload=false)
  71. {
  72.     for(new i; i < MAX_IMMOS; i++)
  73.     {
  74.         if(reload==false)
  75.             LoadImmo(i);
  76.         if(reload==true)
  77.             LoadImmo(i,true);
  78.     }
  79. }
  80.  
  81. stock SaveAllImmos(bool:unload=false)
  82. {
  83.     for(new i; i < MAX_IMMOS; i++)
  84.     {
  85.         if(unload==false)
  86.             SaveImmo(i);
  87.         if(unload==true)
  88.             SaveImmo(i,true);
  89.     }
  90. }
  91.  
  92. stock UpdateImmo(id)
  93. {
  94.     if(Immo[id][iID] == -1)return 1;
  95.     new string[256];
  96.     format(string,sizeof(string),"%s\nBesitzer: %s\nPreis: $%d\nGewinn: $%d",Immo[id][iName],Immo[id][iOwner],Immo[id][iPreis],Immo[id][iGewinn]);
  97.     Update3DTextLabelText(Immo[id][iLabel],IMMO_COLOR,string);
  98.     printf("Immobilie %d geupdated!",id);
  99.     return 1;
  100. }
  101.  
  102. stock IsImmoFree(id)
  103. {
  104.     if(Immo[id][iID] == -1)return 0;
  105.     if(!strcmp(Immo[id][iOwner], "Niemand"))return 1;
  106.     return 0;
  107. }
  108.  
  109. stock IsImmoCreated(id)
  110. {
  111.     if(Immo[id][iID] != -1)return 1;
  112.     return 0;
  113. }
  114.  
  115. stock IsPlayerImmoOwner(id, playerid)
  116. {
  117.     new name[MAX_PLAYER_NAME];
  118.     GetPlayerName(playerid,name,sizeof(name));
  119.     if(!strcmp(Immo[id][iOwner], name))return 1;
  120.     return 0;
  121. }
  122.  
  123. stock GetPlayerImmoCount(playerid)
  124. {
  125.     new val=0,name[MAX_PLAYER_NAME];
  126.     GetPlayerName(playerid,name,sizeof(name));
  127.     for(new i; i < MAX_IMMOS; i++)
  128.     {
  129.         if(Immo[i][iID] != -1)
  130.         {
  131.             if(!strcmp(Immo[i][iOwner], name))
  132.                 val++;
  133.         }
  134.     }
  135.     return val;
  136. }
  137.  
  138. stock GetImmoPos(id, &Float:x, &Float:y, &Float:z)
  139. {
  140.     if(Immo[id][iID] == -1)return 0;
  141.     x=Immo[id][iXPos];
  142.     y=Immo[id][iYPos];
  143.     z=Immo[id][iZPos];
  144.     return 0;
  145. }
  146.  
  147. stock SellImmo(id, playerid=-1)
  148. {
  149.     if(Immo[id][iID] == -1)return 0;
  150.     if(playerid != -1 && IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
  151.         GivePlayerMoney(playerid, floatround(Immo[id][iPreis]*IMMO_RESELL));
  152.     format(Immo[id][iOwner],MAX_PLAYER_NAME,"Niemand");
  153.     UpdateImmo(id);
  154.     return 0;
  155. }
  156.  
  157. stock BuyImmo(id, playerid, bool:force=false)
  158. {
  159.     if(Immo[id][iID] == -1)return 0;
  160.     if(force == false && !IsImmoFree(id))return 0;
  161.     if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid))return 0;
  162.     if(GetPlayerMoney(playerid) < Immo[id][iPreis])return 0;
  163.     GivePlayerMoney(playerid, -Immo[id][iPreis]);
  164.     new name[MAX_PLAYER_NAME];
  165.     GetPlayerName(playerid,name,sizeof(name));
  166.     format(Immo[id][iOwner],MAX_PLAYER_NAME,name);
  167.     UpdateImmo(id);
  168.     return 0;
  169. }
  170.  
  171. stock SetImmoOwner(id, playerid)
  172. {
  173.     if(Immo[id][iID] == -1)return 0;
  174.     if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid)return 0;
  175.     new name[MAX_PLAYER_NAME];
  176.     GetPlayerName(playerid, name, sizeof(name));
  177.     format(Immo[id][iOwner],MAX_PLAYER_NAME,name);
  178.     UpdateImmo(id);
  179. }
  180.  
  181. stock GetImmoGewinn(id)
  182. {
  183.     if(Immo[id][iID] == -1)return -1;
  184.     return Immo[id][iGewinn];
  185. }
  186.  
  187. stock GetImmoPreis(id)
  188. {
  189.     if(Immo[id][iID] == -1)return -1;
  190.     return Immo[id][iPreis];
  191. }
  192.  
  193. stock GetImmoName(id)
  194. {
  195.     new name[IMMO_MAX_NAME];
  196.     format(name,IMMO_MAX_NAME,Immo[id][iName]);
  197.     return name;
  198. }
  199.  
  200. stock GetImmoOwner(id)
  201. {
  202.     new owner[MAX_PLAYER_NAME];
  203.     format(owner,MAX_PLAYER_NAME,Immo[id][iOwner]);
  204.     return owner;
  205. }
  206.  
  207. stock SetImmoGewinn(id, Gewinn)
  208. {
  209.     if(Immo[id][iID] == -1)return 0;
  210.     Immo[id][iGewinn]=Gewinn;
  211.     UpdateImmo(id);
  212. }
  213.  
  214. stock SetImmoPreis(id, Preis)
  215. {
  216.     if(Immo[id][iID] == -1)return 0;
  217.     Immo[id][iPreis]=Preis;
  218.     UpdateImmo(id);
  219. }
  220.  
  221. stock SetImmoName(id, Name[])
  222. {
  223.     if(Immo[id][iID] == -1)return 0;
  224.     if(strlen(Name) == 0)return 0;
  225.     format(Immo[id][iName],IMMO_MAX_NAME,Name);
  226.     UpdateImmo(id);
  227. }
  228.  
  229. stock MoveImmo(id, Float:x, Float:y, Float:z)
  230. {
  231.     if(Immo[id][iID] == -1)return 0;
  232.     DestroyPickup(Immo[id][iPickup]);
  233.     Delete3DTextLabel(Immo[id][iLabel]);
  234.     Immo[id][iXPos]=x;
  235.     Immo[id][iYPos]=y;
  236.     Immo[id][iZPos]=z;
  237.     Immo[id][iPickup]=CreatePickup(IMMO_ICON, 1, Immo[id][iXPos], Immo[id][iYPos], Immo[id][iZPos]);
  238.     new string2[256];
  239.     format(string2,sizeof(string2),"%s\nBesitzer: %s\nPreis: $%d\nGewinn: $%d",Immo[id][iName],Immo[id][iOwner],Immo[id][iPreis],Immo[id][iGewinn]);
  240.     Immo[id][iLabel]=Create3DTextLabel(string2, IMMO_COLOR, Immo[id][iXPos], Immo[id][iYPos], Immo[id][iZPos]+1.0, IMMO_DRAW_DIS, 0, 1);
  241.     return 0;
  242. }
  243.  
  244. stock LoadImmo(id, bool:reload=false)
  245. {
  246.     if(Immo[id][iID] == -1)return 0;
  247.     new string[32];
  248.     format(string,sizeof(string),"%sIMMO-%d.ini",IMMO_FILE,id);
  249.     if(dini_Exists(string))
  250.     {
  251.         Immo[id][iID]=id;
  252.         format(Immo[id][iName],IMMO_MAX_NAME,dini_Get(string, "Name"));
  253.         Immo[id][iPreis]=dini_Int(string, "Preis");
  254.         format(Immo[id][iOwner],MAX_PLAYER_NAME,dini_Get(string, "Owner"));
  255.         Immo[id][iGewinn]=dini_Int(string, "Gewinn");
  256.         Immo[id][iXPos]=dini_Float(string, "XPos");
  257.         Immo[id][iYPos]=dini_Float(string, "YPos");
  258.         Immo[id][iZPos]=dini_Float(string, "ZPos");
  259.         if(reload == false)
  260.         {
  261.             Immo[id][iPickup]=CreatePickup(IMMO_ICON, 1, Immo[id][iXPos], Immo[id][iYPos], Immo[id][iZPos]);
  262.             new string2[256];
  263.             format(string2,sizeof(string2),"%s\nBesitzer: %s\nPreis: $%d\nGewinn: $%d",Immo[id][iName],Immo[id][iOwner],Immo[id][iPreis],Immo[id][iGewinn]);
  264.             Immo[id][iLabel]=Create3DTextLabel(string2, IMMO_COLOR, Immo[id][iXPos], Immo[id][iYPos], Immo[id][iZPos]+1.0, IMMO_DRAW_DIS, 0, 1);
  265.             printf("Immobilie %d erstellt (Load)!",id);
  266.         }
  267.         printf("Immobilie %d geladen!",id);
  268.     }
  269.     else Immo[id][iID]=-1;
  270.     return 0;
  271. }
  272.  
  273. stock SaveImmo(id, bool:unload=false)
  274. {
  275.     if(Immo[id][iID] == -1)return 0;
  276.     new string[32];
  277.     format(string,sizeof(string),"%sIMMO-%d.ini",IMMO_FILE,id);
  278.     if(!dini_Exists(string))
  279.         dini_Create(string);
  280.     dini_Set(string, "Name", Immo[id][iName]);
  281.     dini_IntSet(string, "Preis", Immo[id][iPreis]);
  282.     dini_Set(string, "Owner", Immo[id][iOwner]);
  283.     dini_IntSet(string, "Gewinn", Immo[id][iGewinn]);
  284.     dini_FloatSet(string, "XPos", Immo[id][iXPos]);
  285.     dini_FloatSet(string, "YPos", Immo[id][iYPos]);
  286.     dini_FloatSet(string, "ZPos", Immo[id][iZPos]);
  287.     printf("Immobilie %d gespeichert!",id);
  288.     if(unload == true)
  289.         DestroyPickup(Immo[id][iPickup]), Delete3DTextLabel(Immo[id][iLabel]), printf("Immobilie %d entladen (Save)!",id), Immo[id][iID]=-1;
  290.     return 0;
  291. }
  292.  
  293. stock DeleteImmo(id)
  294. {
  295.     if(Immo[id][iID] == -1)return 0;
  296.     new string[32];
  297.     format(string,sizeof(string),"%sIMMO-%d.ini",IMMO_FILE,id);
  298.     if(!dini_Exists(string))return 1;
  299.     dini_Remove(string);
  300.     DestroyPickup(Immo[id][iPickup]);
  301.     Delete3DTextLabel(Immo[id][iLabel]);
  302.     Immo[id][iID]=-1;
  303.     printf("Immobilie %d entfernt!",id);
  304.     return 0;
  305. }
  306.  
  307. stock CreateImmo(id,Name[],Preis,Gewinn,Float:XPos,Float:YPos,Float:ZPos)
  308. {
  309.     if(Immo[id][iID] != -1)return 0;
  310.     new string[256];
  311.     Immo[id][iID]=id;
  312.     format(Immo[id][iName],IMMO_MAX_NAME,Name);
  313.     Immo[id][iPreis]=Preis;
  314.     Immo[id][iGewinn]=Gewinn;
  315.     format(Immo[id][iOwner],MAX_PLAYER_NAME,"Niemand");
  316.     Immo[id][iXPos]=XPos;
  317.     Immo[id][iYPos]=YPos;
  318.     Immo[id][iZPos]=ZPos;
  319.     Immo[id][iPickup]=CreatePickup(IMMO_ICON, 1, Immo[id][iXPos], Immo[id][iYPos], Immo[id][iZPos]);
  320.     format(string,sizeof(string),"%s\nBesitzer: %s\nPreis: $%d\nGewinn: $%d",Immo[id][iName],Immo[id][iOwner],Immo[id][iPreis],Immo[id][iGewinn]);
  321.     Immo[id][iLabel]=Create3DTextLabel(string, IMMO_COLOR, Immo[id][iXPos], Immo[id][iYPos], Immo[id][iZPos]+1.0, IMMO_DRAW_DIS, 0, 1);
  322.     SaveImmo(id, false);
  323.     printf("Immobilie %d erstellt (Create)!",id);
  324.     return 0;
  325. }
  326.  
  327. stock GetFreeImmoID()
  328. {
  329.     new stop=0;
  330.     for(new i; i < MAX_IMMOS && stop == 0; i++)
  331.     {
  332.         if(Immo[i][iID]==-1)
  333.         {
  334.             stop=1;
  335.             return i;
  336.         }
  337.     }
  338.     return -1;
  339. }
  340.  
  341. stock GetPlayerImmo(playerid)
  342. {
  343.     new stop=0;
  344.     for(new i; i < MAX_IMMOS && stop == 0; i++)
  345.     {
  346.         if(Immo[i][iID]!=-1)
  347.         {
  348.             if(IsPlayerInRangeOfPoint(playerid,IMMO_RANGE,Immo[i][iXPos],Immo[i][iYPos],Immo[i][iZPos]))
  349.             {
  350.                 stop=1;
  351.                 return i;
  352.             }
  353.         }
  354.     }
  355.     return -1;
  356. }
  357.  
  358. stock GetImmoOwnerByName(id)
  359. {
  360.     if(Immo[id][iID] == -1)return -1;
  361.     new stop=0;
  362.     for(new i; i < MAX_PLAYERS && stop == 0; i++)
  363.     {
  364.         if(IsPlayerConnected(i) && !IsPlayerNPC(i))
  365.         {
  366.             if(IsPlayerImmoOwner(id, i))
  367.             {
  368.                 stop=1;
  369.                 return i;
  370.             }
  371.         }
  372.     }
  373.     return -1;
  374. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement