Advertisement
Guest User

Avest_X House System [+ edit by QWER]

a guest
May 26th, 2011
823
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.73 KB | None | 0 0
  1.  
  2. #include <a_samp>
  3. #include <dini>
  4. #define MAX_HOUSES 50
  5.  
  6. //-------------------------------------|
  7. enum HOUSE_DATA
  8. {
  9. Float:p_X,
  10. Float:p_Y,
  11. Float:p_Z,
  12. Float:i_X,
  13. Float:i_Y,
  14. Float:i_Z,
  15. iin,
  16. Cena,
  17. Vlastnik[MAX_PLAYER_NAME],
  18. Dialog,
  19. Text3D:Text,
  20. Pickup,
  21. VW,
  22. Zamek
  23. }
  24. new HouseInfo[MAX_HOUSES][HOUSE_DATA];
  25. new InHouse[MAX_PLAYERS] = {-1,...};
  26. new HouseCount = -1;
  27. //------------------------------------|
  28. forward GetPlayerDistanceToPointEx(playerid,Float:x,Float:y,Float:z);
  29. forward IsPlayerInSphere(playerid,Float:x,Float:y,Float:z,radius);
  30. forward AddHouse(Float:pX, Float:pY, Float:pZ, Float:iX, Float:iY, Float:iZ, ii, Cenik, iddialogu);
  31. //------------------------------------|
  32.  
  33. public AddHouse(Float:pX, Float:pY, Float:pZ, Float:iX, Float:iY, Float:iZ, ii, Cenik, iddialogu)
  34. {
  35. HouseCount ++;
  36. if(HouseCount < MAX_HOUSES)
  37. {
  38. HouseInfo[HouseCount][p_X] = pX;
  39. HouseInfo[HouseCount][p_Y] = pY;
  40. HouseInfo[HouseCount][p_Z] = pZ;
  41.  
  42. HouseInfo[HouseCount][i_X] = iX;
  43. HouseInfo[HouseCount][i_Y] = iY;
  44. HouseInfo[HouseCount][i_Z] = iZ;
  45. HouseInfo[HouseCount][iin] = ii;
  46.  
  47. HouseInfo[HouseCount][Cena] = Cenik;
  48. HouseInfo[HouseCount][VW] = 50+HouseCount;
  49. HouseInfo[HouseCount][Vlastnik] = 0;
  50. HouseInfo[HouseCount][Zamek] = 0;
  51.  
  52. HouseInfo[HouseCount][Dialog] = iddialogu;
  53. new s[128];
  54. format(s,128,"Houses/%d.txt",HouseCount);
  55. if(!fexist(s)){
  56. dini_Create(s);
  57. dini_Set(s,"Owner","none");
  58. dini_IntSet(s,"Locked",0);
  59. }
  60.  
  61. new sx[100];
  62. if(strcmp(dini_Get(s,"Owner"),"none",true) == 0){
  63. format(HouseInfo[HouseCount][Vlastnik],MAX_PLAYER_NAME,"Nikto");
  64. HouseInfo[HouseCount][Zamek] = 0;
  65. HouseInfo[HouseCount][Pickup] = CreatePickup(1273,1,pX, pY, pZ);
  66. format(sx,100,"Dom č.%d\r\nMajiteľ: Nikto\r\nCena: %d",HouseCount,Cenik);
  67. HouseInfo[HouseCount][Text] = Create3DTextLabel(sx,0xFF0000FF,pX,pY,pZ+1,50,0);
  68. }else{
  69. HouseInfo[HouseCount][Pickup] = CreatePickup(1272,1,pX, pY, pZ);
  70. format(HouseInfo[HouseCount][Vlastnik],MAX_PLAYER_NAME,"%s",dini_Get(s,"Owner"));
  71. HouseInfo[HouseCount][Zamek] = dini_Int(s,"Locked");
  72.  
  73. format(sx,100,"Dom č.%d\r\nMajiteľ: %s",HouseCount,dini_Get(s,"Owner"));
  74. HouseInfo[HouseCount][Text] = Create3DTextLabel(sx,0xFF0000FF,pX,pY,pZ+1,50,0);
  75. }
  76.  
  77.  
  78. printf("Dom %d Vytvorený",HouseCount);
  79. }else{
  80. print("<!-- Kapacita AddHouse prekrocena, dum nebyl vytvoren !-->");
  81. }
  82. return 1;
  83. }
  84. //------------------------------------|
  85. public OnPlayerPickUpPickup(playerid, pickupid)
  86. {
  87. for(new h=0;h<HouseCount+1;h++)
  88. {
  89. if(IsPlayerInRangeOfPoint(playerid,2,HouseInfo[h][p_X],HouseInfo[h][p_Y],HouseInfo[h][p_Z]))
  90. {
  91. ShowPlayerDialog(playerid,HouseInfo[h][Dialog],DIALOG_STYLE_LIST,"Dům","Koupit\nProdat\nZamknout\nOdemknout\nInformace o domu\nVstoupit","Použít","Nic");
  92. }
  93. }
  94. return 1;
  95. }
  96. //------------------------------------|
  97. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  98. {
  99. if(newkeys == KEY_WALK)
  100. {
  101. if(InHouse[playerid] != -1){
  102. new HouseId = InHouse[playerid];
  103. if(IsPlayerInRangeOfPoint(playerid,10,HouseInfo[HouseId][i_X],HouseInfo[HouseId][i_Y],HouseInfo[HouseId][i_Z]))
  104. {
  105. SetPlayerPos(playerid,HouseInfo[HouseId][p_X],HouseInfo[HouseId][p_Y],HouseInfo[HouseId][p_Z]);
  106. SetPlayerInterior(playerid,0);
  107. SetPlayerVirtualWorld(playerid,0);
  108. InHouse[playerid] = -1;
  109. }
  110. }
  111. }
  112. return 1;
  113. }
  114. //------------------------------------|
  115. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  116. {
  117. for(new h=0;h<HouseCount+1;h++)
  118. {
  119. if(dialogid == HouseInfo[h][Dialog])
  120. {
  121. if(response == 1)
  122. {
  123. if(listitem == 0)
  124. {
  125. if(GetPlayerMoney(playerid) < HouseInfo[h][Cena]) return SendClientMessage(playerid, 0xFFFFFFFF, "Máš málo peněz !");
  126. if(!IsHouseForSale(h)) return SendClientMessage(playerid, 0xFFFFFFFF, "Tento dům již někdo vlastní !");
  127. new s[128];
  128. format(s,128,"Houses/%d.txt",h);
  129. dini_Set(s,"Owner",PlayerName(playerid));
  130. GivePlayerMoney(playerid, -HouseInfo[h][Cena]);
  131. SendClientMessage(playerid, 0xFFFFFFFF, "Pořidil jsi si dům !");
  132. new sx[100];
  133. format(sx,100,"Dom č.%d\r\nMajiteľ: %s",h,dini_Get(s,"Owner"));
  134. Update3DTextLabelText(HouseInfo[h][Text],0xFF0000FF,sx);
  135. DestroyPickup(HouseInfo[h][Pickup]);
  136. HouseInfo[h][Pickup] = CreatePickup(1272,1,HouseInfo[h][p_X],HouseInfo[h][p_Y],HouseInfo[h][p_Z]);
  137. }
  138. else if(listitem == 1)
  139. {
  140. if(!IsPlayerHouseOwner(playerid,h)) return SendClientMessage(playerid, 0xFFFFFFFF, "Tento dům není tvůj !");
  141. new s[128];
  142. format(s,128,"Houses/%d.txt",h);
  143. dini_Set(s,"Owner","none");
  144. GivePlayerMoney(playerid, HouseInfo[h][Cena]/2);
  145. SendClientMessage(playerid, 0xFFFFFFFF, "Dům prodán, byla ti vrácena cena !");
  146. new sx[100];
  147. format(sx,100,"Dom č.%d\r\nMajiteľ: Nikto\r\nCena: %d",h,HouseInfo[h][Cena]);
  148. Update3DTextLabelText(HouseInfo[h][Text],0xFF0000FF,sx);
  149. DestroyPickup(HouseInfo[h][Pickup]);
  150. HouseInfo[h][Pickup] = CreatePickup(1273,1,HouseInfo[h][p_X],HouseInfo[h][p_Y],HouseInfo[h][p_Z]);
  151. }
  152. else if(listitem == 2)
  153. {
  154. if(!IsPlayerHouseOwner(playerid,h)) return SendClientMessage(playerid, 0xFFFFFFFF, "Tento dům není tvůj !");
  155. new s[128];
  156. format(s,128,"Houses/%d.txt",h);
  157. dini_IntSet(s,"Locked",1);
  158. HouseInfo[h][Zamek] = 0;
  159. SendClientMessage(playerid, 0xFFFFFFFF, "Dům zamknut !");
  160. }
  161. else if(listitem == 3)
  162. {
  163. if(!IsPlayerHouseOwner(playerid,h)) return SendClientMessage(playerid, 0xFFFFFFFF, "Tento dům není tvůj !");
  164. SendClientMessage(playerid, 0xFFFFFFFF, "Dům odemknut !");
  165. new s[128];
  166. format(s,128,"Houses/%d.txt",h);
  167. dini_IntSet(s,"Locked",0);
  168. HouseInfo[h][Zamek] = 1;
  169. }
  170. else if(listitem == 4)
  171. {
  172. SendClientMessage(playerid, 0xFFFFFFFF, "Informace o domu:");
  173. if(HouseInfo[h][Zamek] == 0)
  174. {
  175. SendClientMessage(playerid,0xFFFFFFFF,"Zámek: Zamknutý.");
  176. }else{
  177. SendClientMessage(playerid,0xFFFFFFFF,"Zámek: Odemknutý.");
  178. }
  179. if (IsHouseForSale(h))
  180. {
  181. SendClientMessage(playerid,0xFFFFFFFF,"K Prodeji: Ano");
  182. }else{
  183. SendClientMessage(playerid,0xFFFFFFFF,"K Prodeji: Ne");
  184. }
  185. }
  186. else if(listitem == 5)
  187. {
  188. if(HouseInfo[h][Zamek] == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "Tento dům je zamknut !");
  189. SetPlayerPos(playerid, HouseInfo[h][i_X],HouseInfo[h][i_Y],HouseInfo[h][i_Z]);
  190. SetPlayerInterior(playerid, HouseInfo[h][iin]);
  191. SetPlayerVirtualWorld(playerid,HouseInfo[h][VW]);
  192. InHouse[playerid] = h;
  193. SendClientMessage(playerid, 0xFFFFFFFF, "Dům opustíš L.ALT !");
  194. }
  195. }
  196. }
  197. }
  198. return 1;
  199. }
  200. //------------------------------------|
  201. stock PlayerName(playerid){
  202. new name[MAX_PLAYER_NAME];
  203. GetPlayerName(playerid,name,MAX_PLAYER_NAME);
  204. return name;
  205. }
  206. stock IsPlayerHouseOwner(playerid,houseid)
  207. {
  208. new cesta[50];
  209. format(cesta,150,"Houses/%d.txt",houseid);
  210. if(strcmp(PlayerName(playerid),dini_Get(cesta,"Owner"), false) == 0) return true;
  211. return false;
  212. }
  213.  
  214. stock IsHouseForSale(houseid)
  215. {
  216. new cesta[50];
  217. format(cesta,150,"Houses/%d.txt",houseid);
  218. if(strcmp("none",dini_Get(cesta,"Owner"), false) == 0) return true;
  219. return false;
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement