Advertisement
Guest User

Avest-X House System (+ edit by QWER)

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