TodaLaOnda

Sistema de casas dinamico

Mar 8th, 2015
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 12.89 KB | None | 0 0
  1. /*******************************************************************************
  2. *                                                                              *
  3. *                            Sistema de casas                                  *
  4. *                                Dinamico                                      *
  5. *                                  German - Toda la onda                       *
  6. ********************************************************************************/
  7. /*Usar if(strcmp(NombreJugador(playerid), CasaInfo[i][cDueno], true) == 1)return SendClientMessage(playerid, COLOR_WHITE, "No eres el dueño de la casa.");
  8. Para saber si es el dueño de la casa a la hora de ejecutar un comando por ejemplo /cerradura*/
  9. #include <a_samp>
  10. #include <zcmd>
  11. #include <dini>
  12. #include <sscanf2>
  13. #include <streamer>
  14.  
  15. #define DIR_CASAS                   "Casas/Casa%d.ini"
  16. #define MAX_CASAS                   100
  17. #define COLOR_WHITE                 0xCECECEFF
  18.  
  19. enum INFOCS
  20. {
  21.     cDueno[MAX_PLAYER_NAME],
  22.     cIDCasa,
  23.     Float:PosCasa[3],
  24.     Float:PosIntCasa[3],
  25.     cIntCasa,
  26.     cComprada,
  27.     cCerradura,
  28. };
  29.  
  30. // News
  31. new Text3D:CasaLabel[MAX_CASAS], CasasActuales, DeNuevo[MAX_PLAYERS],
  32.     CasaInfo[MAX_CASAS][INFOCS];
  33.  
  34. public OnFilterScriptInit(){
  35.     CargarCasas();
  36.     return 1;
  37. }
  38.  
  39. public OnFilterScriptExit(){
  40.     GuardarCasas();
  41.     return 1;
  42. }
  43.  
  44. CMD:crearcasa(playerid, params[]){
  45.     // New
  46.     new string[154],Float:X,Float:Y,Float:Z,Float:A, NuevaCasa = CasasActuales+1,
  47.         mStr[50];
  48.     if(NuevaCasa >= MAX_CASAS) return SendClientMessage(playerid, COLOR_WHITE, "Llegaste al limite de casas, no puedes poner más!");
  49.     format(string, sizeof(string), DIR_CASAS, NuevaCasa);
  50.     if(dini_Exists(string))
  51.     {
  52.     AumentarCasa();
  53.     format(string, sizeof(string), "La casa ID: %d ya existe, ingresa /crearcasa nuevamente.", NuevaCasa);
  54.     SendClientMessage( playerid, COLOR_WHITE, string);
  55.     }
  56.     else
  57.     {
  58.     GetPlayerPos(playerid, X,Y,Z),GetPlayerFacingAngle(playerid, A);
  59.  
  60.     strmid(CasaInfo[NuevaCasa][cDueno], "El Estado", 0, 24, 255);
  61.     CasaInfo[NuevaCasa][PosCasa][0] = X;
  62.     CasaInfo[NuevaCasa][PosCasa][1] = Y;
  63.     CasaInfo[NuevaCasa][PosCasa][2] = Z;
  64.     CasaInfo[NuevaCasa][PosIntCasa][0] = 0;
  65.     CasaInfo[NuevaCasa][PosIntCasa][1] = 0;
  66.     CasaInfo[NuevaCasa][PosIntCasa][2] = 0;
  67.     CasaInfo[NuevaCasa][cIntCasa] = 0;
  68.     CasaInfo[NuevaCasa][cComprada] = 0;
  69.     CasaInfo[NuevaCasa][cCerradura] = 1;//Cerrada
  70.     dini_Create(string);
  71.     // Archivos
  72.  
  73.     dini_IntSet(string, "cIDCasa", CasaInfo[NuevaCasa][cIDCasa]);
  74.     for(new m = 0; m < 3; m++){
  75.         format(mStr,sizeof(mStr), "CasaPos%d", m);
  76.         dini_FloatSet(string,mStr, CasaInfo[NuevaCasa][PosCasa][m]);
  77.     }
  78.  
  79.     DeNuevo[playerid] = 0;
  80.     AumentarCasa();
  81.     CasaInfo[NuevaCasa][cIDCasa] = CreateDynamicPickup(19134, 1, CasaInfo[NuevaCasa][PosCasa][0], CasaInfo[NuevaCasa][PosCasa][1], CasaInfo[NuevaCasa][PosCasa][2], 0, 0);
  82.     format(string, sizeof(string), "\t {00A400}Casa EN VENTA\n{FFFFFF}ID: {00A400}%d\n{FFFFFF}¡ Utiliza el comando {00A400}/comprarcasa !", NuevaCasa);
  83.     CasaLabel[NuevaCasa] = CreateDynamic3DTextLabel(string, COLOR_WHITE, CasaInfo[NuevaCasa][PosCasa][0], CasaInfo[NuevaCasa][PosCasa][1], CasaInfo[NuevaCasa][PosCasa][2]+0.5,10.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,0,0,-1,-1, 100.0);
  84.  
  85.     SendClientMessage(playerid, COLOR_WHITE, "¡Casa creada exitosamente!");
  86.     GuardarCasas();
  87.     }
  88.     return 1;
  89. }
  90.  
  91. CMD:casaint(playerid, params[]){
  92.     new CasaID, string[127], Float:X,Float:Y,Float:Z;
  93.     if(sscanf(params, "d", CasaID) )return SendClientMessage(playerid,-1,"{FFFFFF}* USA: {DEE613}/casaint");
  94.     format(string, sizeof(string), DIR_CASAS, CasaID);
  95.     if(!fexist(string)) return SendClientMessage(playerid, COLOR_WHITE, "No existe esa casa!");
  96.     GetPlayerPos(playerid,X,Y,Z);
  97.     CasaInfo[CasaID][PosIntCasa][0] = X;
  98.     CasaInfo[CasaID][PosIntCasa][1] = Y;
  99.     CasaInfo[CasaID][PosIntCasa][2] = Z;
  100.     CasaInfo[CasaID][cIntCasa] = GetPlayerInterior(playerid);
  101.     GuardarCasas();
  102.     return 1;
  103. }
  104.  
  105. CMD:borrarcasa(playerid, params[]){
  106.     new CasaID, string[127], ArchivoASD[128];
  107.     for(CasaID = 0; CasaID < sizeof(CasaInfo); CasaID++){
  108.         if(IsPlayerInRangeOfPoint(playerid, 1.0, CasaInfo[CasaID][PosCasa][0], CasaInfo[CasaID][PosCasa][1], CasaInfo[CasaID][PosCasa][2])){
  109.         format(string, sizeof(string), DIR_CASAS, CasaID);
  110.         if(!fexist(string)) return SendClientMessage(playerid, COLOR_WHITE, "No existe ese Quiosco!");
  111.  
  112.         CasaInfo[CasaID][PosCasa][0] = 0;
  113.         CasaInfo[CasaID][PosCasa][1] = 0;
  114.         CasaInfo[CasaID][PosCasa][2] = 0;
  115.         DestroyDynamicPickup(CasaInfo[CasaID][cIDCasa]);
  116.         DestroyDynamic3DTextLabel(CasaLabel[CasaID]);
  117.  
  118.         format(string, sizeof(string), "{FFFFFF}* Has eliminado la Casa {00A400}ID: {FFFFFF}%d.", CasaID);
  119.         SendClientMessage(playerid, COLOR_WHITE, string);
  120.         format(ArchivoASD, sizeof(ArchivoASD), DIR_CASAS, CasaID);
  121.         dini_Remove(ArchivoASD);
  122.         DisminuirQuiosco();
  123.         }
  124.     }
  125.     return 1;
  126. }
  127. CMD:salircasa(playerid, params[]){
  128.     for(new i = 0; i < sizeof(CasaInfo); i++){
  129.         if(IsPlayerInRangeOfPoint(playerid, 3.0, CasaInfo[i][PosIntCasa][0], CasaInfo[i][PosIntCasa][1], CasaInfo[i][PosIntCasa][2])){
  130.         SetPlayerPos(playerid, CasaInfo[i][PosCasa][0], CasaInfo[i][PosCasa][1], CasaInfo[i][PosCasa][2]);
  131.         SetPlayerInterior(playerid, 0);
  132.         SetPlayerVirtualWorld(playerid, 0);
  133.         }
  134.     }
  135.     return 1;
  136. }
  137. CMD:entrarcasa(playerid, params[]){
  138.     for(new i = 0; i < sizeof(CasaInfo); i++){
  139.         if(IsPlayerInRangeOfPoint(playerid, 3.0, CasaInfo[i][PosCasa][0], CasaInfo[i][PosCasa][1], CasaInfo[i][PosCasa][2])){
  140.         if(CasaInfo[i][cCerradura] == 1) return SendClientMessage(playerid, COLOR_WHITE, "{FFFFFF}* La puerta esta cerrada.");
  141.         if(strcmp(NombreJugador(playerid), CasaInfo[i][cDueno], true) == 1)return SendClientMessage(playerid, COLOR_WHITE, "No eres el dueño de la casa.");
  142.         SetPlayerPos(playerid, CasaInfo[i][PosIntCasa][0], CasaInfo[i][PosIntCasa][1], CasaInfo[i][PosIntCasa][2]);
  143.         SetPlayerInterior(playerid, CasaInfo[i][cIntCasa]);
  144.         SetPlayerVirtualWorld(playerid, i);
  145.         }
  146.     }
  147.     return 1;
  148. }
  149. CMD:cerradura(playerid, params[]){
  150.     for(new i = 0; i < sizeof(CasaInfo); i++){
  151.         if(IsPlayerInRangeOfPoint(playerid, 3.0, CasaInfo[i][PosCasa][0], CasaInfo[i][PosCasa][1], CasaInfo[i][PosCasa][2])){
  152.         if(strcmp(NombreJugador(playerid), CasaInfo[i][cDueno], true) == 1)return SendClientMessage(playerid, COLOR_WHITE, "{FFFFFF}* No estas en tu casa.");
  153.         if(CasaInfo[i][cCerradura] == 1)
  154.         {
  155.             CasaInfo[i][cCerradura] = 0;
  156.             SendClientMessage(playerid, COLOR_WHITE, "{FFFFFF}* La Puerta se a abierto.");
  157.         }else if(CasaInfo[i][cCerradura] == 0){
  158.             CasaInfo[i][cCerradura] = 1;
  159.             SendClientMessage(playerid, COLOR_WHITE, "{FFFFFF}* La Puerta se a cerrado.");
  160.             }
  161.         }
  162.     }
  163.     return 1;
  164. }
  165. CMD:comprarcasa(playerid, params[]){
  166.     new i, string[256];
  167.     for(i = 0; i < sizeof(CasaInfo); i++){
  168.         if(IsPlayerInRangeOfPoint(playerid, 3.0, CasaInfo[i][PosCasa][0], CasaInfo[i][PosCasa][1], CasaInfo[i][PosCasa][2])){
  169.         if(CasaInfo[i][cComprada] == 1) return SendClientMessage(playerid, COLOR_WHITE, "{FFFFFF}* La casa no esta en venta.");
  170.         DestroyDynamic3DTextLabel(CasaLabel[i]);
  171.         format(string, sizeof(string), "\t {00A400}Casa comprada\n{FFFFFF}ID: {00A400}%d\n{FFFFFF}Dueño: {00A400}%s", i, NombreJugador(playerid));
  172.         CasaLabel[i] = CreateDynamic3DTextLabel(string, COLOR_WHITE, CasaInfo[i][PosCasa][0], CasaInfo[i][PosCasa][1], CasaInfo[i][PosCasa][2]+0.5,10.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,0,0,-1,-1, 100.0);
  173.         strmid(CasaInfo[i][cDueno], NombreJugador(playerid), 0, strlen(NombreJugador(playerid)), 255);
  174.         CasaInfo[i][cComprada] = 1;
  175.         }
  176.     }
  177.     return 1;
  178. }
  179.  
  180. stock NombreJugador(playerid)
  181. {
  182.     new NombrePJ[24];
  183.     GetPlayerName(playerid,NombrePJ,24);
  184.     new N[24];
  185.     strmid(N,NombrePJ,0,strlen(NombrePJ),24);
  186.     for(new i = 0; i < MAX_PLAYER_NAME; i++)
  187.     {
  188.         if (N[i] == '_') N[i] = ' ';
  189.     }
  190.     return N;
  191. }
  192.  
  193. // ProxDetector
  194. stock ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)
  195. {
  196.     if(IsPlayerConnected(playerid))
  197.     {
  198.         new Float:posx, Float:posy, Float:posz;
  199.         new Float:oldposx, Float:oldposy, Float:oldposz;
  200.         new Float:tempposx, Float:tempposy, Float:tempposz;
  201.         GetPlayerPos(playerid, oldposx, oldposy, oldposz);
  202.         for(new i=0; i<MAX_PLAYERS; i++)
  203.         {
  204.             if(IsPlayerConnected(i) && (GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i)))
  205.             {
  206.                 GetPlayerPos(i, posx, posy, posz);
  207.                 tempposx = (oldposx -posx);
  208.                 tempposy = (oldposy -posy);
  209.                 tempposz = (oldposz -posz);
  210.                 if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
  211.                 {
  212.                     SendClientMessage(i, col1, string);
  213.                 }
  214.                 else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
  215.                 {
  216.                     SendClientMessage(i, col2, string);
  217.                 }
  218.                 else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
  219.                 {
  220.                     SendClientMessage(i, col3, string);
  221.                 }
  222.                 else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
  223.                 {
  224.                     SendClientMessage(i, col4, string);
  225.                 }
  226.                 else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
  227.                 {
  228.                     SendClientMessage(i, col5, string);
  229.                 }
  230.             }
  231.         }
  232.     }
  233.     return 1;
  234. }
  235.  
  236. // Stocks
  237. stock AumentarCasa(){
  238.     CasasActuales++;
  239.     return 1;
  240. }
  241.  
  242. stock DisminuirQuiosco(){
  243.     CasasActuales--;
  244.     return 1;
  245. }
  246.  
  247. stock CargarCasas(){
  248.     new Archivo[128], string[256];
  249.     for(new i = 0; i < MAX_CASAS; i++){
  250.         format(Archivo, sizeof(Archivo), DIR_CASAS, i);
  251.         if(dini_Exists(Archivo)){
  252.             strmid(CasaInfo[i][cDueno], dini_Get(Archivo,       "Dueño"), 0, strlen(dini_Get(Archivo,"Dueño")), 255);
  253.             CasaInfo[i][cIDCasa]        = dini_Int(Archivo,     "cIDCasa");
  254.             CasaInfo[i][PosCasa][0]     = dini_Float(Archivo,   "CasaPos0");
  255.             CasaInfo[i][PosCasa][1]     = dini_Float(Archivo,   "CasaPos1");
  256.             CasaInfo[i][PosCasa][2]     = dini_Float(Archivo,   "CasaPos2");
  257.             CasaInfo[i][PosIntCasa][0]  = dini_Float(Archivo,   "CasaIntPos0");
  258.             CasaInfo[i][PosIntCasa][1]  = dini_Float(Archivo,   "CasaIntPos1");
  259.             CasaInfo[i][PosIntCasa][2]  = dini_Float(Archivo,   "CasaIntPos2");
  260.             CasaInfo[i][cIntCasa]       = dini_Int(Archivo,     "IntCasa");
  261.             CasaInfo[i][cComprada]      = dini_Int(Archivo,     "Comprada");
  262.             CasaInfo[i][cCerradura]     = dini_Int(Archivo,     "Cerradura");
  263.             CasaInfo[i][cIDCasa]        = CreateDynamicPickup(19134, 1, CasaInfo[i][PosCasa][0], CasaInfo[i][PosCasa][1], CasaInfo[i][PosCasa][2], 0, 0);
  264.             AumentarCasa();
  265.             if(CasaInfo[i][cComprada] == 1){
  266.             format(string, sizeof(string), "\t {00A400}Casa Comprada\n{FFFFFF}ID: {00A400}%d\n{FFFFFF}Dueño:{00A400} %s", i, CasaInfo[i][cDueno]);
  267.             CasaLabel[i] = CreateDynamic3DTextLabel(string, COLOR_WHITE, CasaInfo[i][PosCasa][0], CasaInfo[i][PosCasa][1], CasaInfo[i][PosCasa][2]+0.5,10.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,0,0,-1,-1, 100.0);
  268.             }else if(CasaInfo[i][cComprada] == 0){
  269.             format(string, sizeof(string), "\t {00A400}Casa EN VENTA\n{FFFFFF}ID: {00A400}%d\n{FFFFFF}¡ Utiliza el comando {00A400}/comprarcasa !", i);
  270.             CasaLabel[i] = CreateDynamic3DTextLabel(string, COLOR_WHITE, CasaInfo[i][PosCasa][0], CasaInfo[i][PosCasa][1], CasaInfo[i][PosCasa][2]+0.5,10.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,0,0,-1,-1, 100.0);
  271.             }
  272.         }
  273.     }
  274.     return 1;
  275. }
  276.  
  277. stock GuardarCasa(i){
  278.     new Archivo[128];
  279.     format(Archivo, sizeof(Archivo), DIR_CASAS, i);
  280.     if(dini_Exists(Archivo)){
  281.         dini_Set(Archivo,       "Dueño",           CasaInfo[i][cDueno]);
  282.         dini_IntSet(Archivo,    "IDCasa",           CasaInfo[i][cIDCasa]);
  283.         dini_FloatSet(Archivo,  "CasaPos0",         CasaInfo[i][PosCasa][0]);
  284.         dini_FloatSet(Archivo,  "CasaPos1",         CasaInfo[i][PosCasa][1]);
  285.         dini_FloatSet(Archivo,  "CasaPos2",         CasaInfo[i][PosCasa][2]);
  286.         dini_FloatSet(Archivo,  "CasaIntPos0",      CasaInfo[i][PosIntCasa][0]);
  287.         dini_FloatSet(Archivo,  "CasaIntPos1",      CasaInfo[i][PosIntCasa][1]);
  288.         dini_FloatSet(Archivo,  "CasaIntPos2",      CasaInfo[i][PosIntCasa][2]);
  289.         dini_IntSet(Archivo,    "IntCasa",          CasaInfo[i][cIntCasa]);
  290.         dini_IntSet(Archivo,    "Comprada",         CasaInfo[i][cComprada]);
  291.         dini_IntSet(Archivo,    "Cerradura",        CasaInfo[i][cCerradura]);
  292.     }
  293.     return 1;
  294. }
  295.  
  296. stock GuardarCasas(){
  297.     for(new i = 0; i < MAX_CASAS; i++){
  298.         GuardarCasa(i);
  299.     }
  300.     return 1;
  301. }
  302.  
  303. //Gracias zume por tu sistema de Hotdogs xd
Advertisement
Add Comment
Please, Sign In to add comment