HOUSE SYSTEM 1.0, CREA CASE PER I GIOCATORI

« Older   Newer »
  Share  
view post Posted on 10/10/2013, 18:03     +1   -1
Avatar

super300

Group:
ADMIN
Posts:
1,126
Reputation:
+1

Status:


- Possibbilità di creare le case dal game con /creacasa [ID] [Costo],
- Possibbilità di rimuoverle con /removehouse,
- Di cambiare Interior alle casa con /sethint [ID Casa] [Interior] (Ho messo solo 5 interior perchè devo finirli)..
- Di cambiare il costo con /sethcosto [Id Casa] [Costo].
- Di gotarsi alle case con /gotocasa [Id Casa] e altri cmds..
- Possibbilità di comprare più di 1 casa
- Possibbilità di ritirare/depositare soldi
- Possibbilità di vendere la casa ma al metà prezzo
- Possibbilità di chiudere/aprire la casa
Attenzione: Creare la cartella SCHouse per il corretto funzionamento.

CODICE
// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT

#include <a_samp>
#include <SII>
#include <zcmd>
#include <sscanf>

#define MAX_HOUSE                                               50              // - Massime Case Creabili Aumentare se ne dovete creare di più
#define H_FILE_PATH                                             "SCHouse/%d.ini"// - Destinazione file Case.
#define MENUCASA                                                5001            // - Dialog menù Casa
#define MENUVENDICASA                                           5005            // - Dialog menù vendi Casa
#define DEPOSITASOLDICASA                                       5006            // - Dialog Deposita Soldi
#define RITIRASOLDICASA                                         5007            // - Dialog Ritira Soldi



enum HouseInfo
{
       Float:X,
       Float:Y,
       Float:Z,
       Float:Xu,
       Float:Yu,
       Float:Zu,
       hText[64],
       hCosto,
       Interior,
       VirtualW,
       Proprietario[24],
       Comprata,
       Chiusa,
       Cassaforte
}

new hInfo[MAX_HOUSE][HouseInfo];
new InCasa[MAX_PLAYERS];
new file[256], stringa[256], PickupID[MAX_HOUSE];


public OnFilterScriptInit()
{
       print("\n--------------------------------------");
       print(" Blank Filterscript by your name here");
       print("--------------------------------------\n");
       LoadHouse();
       return 1;
}

public OnFilterScriptExit()
{
       return 1;
}

public OnPlayerConnect(playerid)
{
   InCasa[playerid] = -1;
       return 1;
}

CMD:creacasa(playerid, params[])
{
       new ID, Costo, Float:Pos[3];
       if(sscanf(params, "dd", ID, Costo))return SendClientMessage(playerid, -1, "/creacasa [ID] [COSTO]");
       if(Costo < 0 || Costo > 1000000)return SendClientMessage(playerid, -1, "Costo troppo alto, Minimo 0 Massimo 1000000");
       if(!IsPlayerAdmin(playerid))return 0;
       format(file, sizeof(file), H_FILE_PATH, ID);
       if(INI_Exist(file))return SendClientMessage(playerid, -1, "C'è già una casa creata con questo ID!");
       GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
       INI_Open(file);
   INI_WriteFloat("FloatX", Pos[0]);
   INI_WriteFloat("FloatY", Pos[1]);
   INI_WriteFloat("FloatZ", Pos[2]);
   INI_WriteFloat("FloatXUscita", 235.508994);
   INI_WriteFloat("FloatYUscita", 1189.169897);
   INI_WriteFloat("FloatZUscita", 1080.339966);
       INI_WriteString("Descrizione", "Nuova Casa");
       INI_WriteInt("CostoCasa", Costo);
       INI_WriteInt("Interior", 3);
       INI_WriteInt("VirtualW", ID+999);
       INI_WriteInt("Comprata", 0);
       INI_WriteInt("Chiusa", 0);
       INI_WriteInt("Cassaforte", 0);
       INI_WriteString("Proprietario", "Invendita");
       INI_Save();
       INI_Close();
       hInfo[ID][X] = Pos[0];
       hInfo[ID][Y] = Pos[1];
       hInfo[ID][Z] = Pos[2];
       hInfo[ID][Xu] = 235.508994;
       hInfo[ID][Yu] = 1189.169897;
       hInfo[ID][Zu] = 1080.339966;
       strmid(hInfo[ID][hText], "Casa in vendita", 0, strlen("Casa in vendita"), 999);
       hInfo[ID][hCosto] = Costo;
       hInfo[ID][Interior] = 3;
       hInfo[ID][VirtualW] = ID+999;
       hInfo[ID][Comprata] = 0;
       hInfo[ID][Chiusa] = 0;
       hInfo[ID][Cassaforte] = 0;
       strmid(hInfo[ID][Proprietario], "Invendita", 0, strlen("Invendita"), 999);
       PickupID[ID] = CreatePickup(1273, 24, Pos[0], Pos[1], Pos[2]);
       return 1;
}

CMD:gotocasa(playerid, params[])
{
       new ID;
       if(sscanf(params, "d", ID))return SendClientMessage(playerid, -1, "/gotocasa [ID]");
       if(!IsPlayerAdmin(playerid))return 0;
       SetPlayerInterior(playerid, 0);
       SetPlayerVirtualWorld(playerid, 0);
       SetPlayerPos(playerid, hInfo[ID][X], hInfo[ID][Y], hInfo[ID][Z]);
       return 1;
}

CMD:sethcosto(playerid, params[])
{
       new ID, Costo;
       if(sscanf(params, "dd", ID, Costo))return SendClientMessage(playerid, -1, "/sethcosto [Id Casa] [Costo]");
       if(!IsPlayerAdmin(playerid))return 0;
       hInfo[ID][hCosto] = Costo;
       format(file, sizeof(file), "Hai impostato alla casa ID %d il costo a $%d", ID, Costo);
       SendClientMessage(playerid, -1, file);
       return 1;
}

CMD:sethexit(playerid, params[])
{
       new ID, Float:x, Float:y, Float:z;
       if(sscanf(params, "d", ID))return SendClientMessage(playerid, -1, "/sethexit [Id Casa]");
       if(!IsPlayerAdmin(playerid))return 0;
       GetPlayerPos(playerid, x, y, z);
       hInfo[ID][Xu] = x;
       hInfo[ID][Yu] = y;
       hInfo[ID][Zu] = z;
       hInfo[ID][Interior] = GetPlayerInterior(playerid);
       format(file, sizeof(file), "Hai impostato alla casa ID %d l'uscita qui!", ID);
       SendClientMessage(playerid, -1, file);
       return 1;
}

CMD:sethint(playerid, params[])
{
       new ID, Int, string[128];
       if(sscanf(params, "dd", ID, Int))return SendClientMessage(playerid, -1, "/sethexit [Id Casa] [Interior]");
       if(!IsPlayerAdmin(playerid))return 0;
       if(Int > 0 && Int > 4) return SendClientMessage(playerid, -1, "ID nterior da 1 a 4!");
       switch(Int)
       {
       case 0:
       {
            hInfo[ID][Xu] = 235.508994;
                hInfo[ID][Yu] = 1189.169897;
                hInfo[ID][Zu] = 1080.339966;
                hInfo[ID][Interior] = 3;
            format(string, sizeof string, "Hai impostato alla casa ID %d l'interior a %d", ID, Int);
            SendClientMessage(playerid, -1, string);
       }
       case 1:
       {
            hInfo[ID][Xu] = 225.756989;
            hInfo[ID][Yu] = 1240.000000;
                hInfo[ID][Zu] = 1082.149902;
                hInfo[ID][Interior] = 2;
                format(string, sizeof string, "Hai impostato alla casa ID %d l'interior a %d", ID, Int);
            SendClientMessage(playerid, -1, string);
   }
       case 2:
       {
            hInfo[ID][Xu] = 223.043991;
                hInfo[ID][Yu] = 1289.259888;
                hInfo[ID][Zu] = 1082.199951;
                hInfo[ID][Interior] = 1;
                format(string, sizeof string, "Hai impostato alla casa ID %d l'interior a %d", ID, Int);
            SendClientMessage(playerid, -1, string);
       }
       case 3:
       {
            hInfo[ID][Xu] = 225.630997;
                hInfo[ID][Yu] = 1022.479980;
            hInfo[ID][Zu] = 1084.069946;
                hInfo[ID][Interior] = 7;
                format(string, sizeof string, "Hai impostato alla casa ID %d l'interior a %d", ID, Int);
            SendClientMessage(playerid, -1, string);
       }
       case 4:
       {
            hInfo[ID][Xu] = 295.138977;
                hInfo[ID][Yu] = 1474.469971;
                hInfo[ID][Zu] = 1080.519897;
            hInfo[ID][Interior] = 15;
            format(string, sizeof string, "Hai impostato alla casa ID %d l'interior a %d", ID, Int);
            SendClientMessage(playerid, -1, string);
       }
       }
       return 1;
}

CMD:removehouse(playerid, params[])
{
       new ID, string[128];
       if(sscanf(params, "d", ID))return SendClientMessage(playerid, -1, "/removehouse [Id Casa]");
       if(!IsPlayerAdmin(playerid))return 0;
       format(file, sizeof(file), H_FILE_PATH, ID);
       if(!INI_Exist(file))return SendClientMessage(playerid, -1, "Non c'è una casa con questo ID creata, quindi, non puoi eliminarla");
       INI_Open(file);
       INI_Remove(file);
       INI_Save();
       INI_Close();
   hInfo[ID][X] = 0.0;
   hInfo[ID][Y] = 0.0;
       hInfo[ID][Z] = 0.0;
       hInfo[ID][Interior] = 0;
       hInfo[ID][Cassaforte] = 0;
       DestroyPickup(PickupID[ID]);
       format(string, sizeof(string), "Hai eliminato la casa ID %d", ID);
       SendClientMessage(playerid, -1, string);
       return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
   if(pickupid == PickupID[GetH(playerid)])// Quando il player entra nel pickup delle case.
       {
               if(hInfo[GetH(playerid)][Comprata] == 0)
               {
               format(stringa, sizeof(stringa), "%­s~n~~w~Costo Casa: ~g~$%d", hInfo[GetH(playerid)][hText], hInfo[GetH(playerid)][hCosto]);
               GameTextForPlayer(playerid, stringa, 3500, 3);
               }
               else if(hInfo[GetH(playerid)][Comprata] == 1)
               {
           format(stringa, sizeof(stringa), "~n~~w~Proprietario: ~g~%­s", hInfo[GetH(playerid)][Proprietario]);
               GameTextForPlayer(playerid, stringa, 3500, 3);
           }
       }
       return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
   if(newkeys == KEY_SECONDARY_ATTACK)//Entrata Case
       {
          for(new i = 0; i < MAX_HOUSE; i++)
               {
          if(InCasa[playerid] == -1 && IsPlayerInRangeOfPoint(playerid, 1.0, hInfo[i][X], hInfo[i][Y], hInfo[i][Z]))
          {
                          if(hInfo[i][Chiusa] == 1)return SendClientMessage(playerid, -1, "[INFO:] Casa Chiusa!");
                          SetPlayerPos(playerid, hInfo[i][Xu], hInfo[i][Yu], hInfo[i][Zu]);
                          SetPlayerInterior(playerid,  hInfo[i][Interior]);
                          SetPlayerVirtualWorld(playerid,  hInfo[i][VirtualW]);
                          InCasa[playerid] = i;
                  }
              else if(InCasa[playerid] != -1 && IsPlayerInRangeOfPoint(playerid, 2.0, hInfo[InCasa[playerid]][Xu], hInfo[InCasa[playerid]][Yu], hInfo[InCasa[playerid]][Zu]))
          {
               if(GetPlayerVirtualWorld(playerid) == hInfo[i][VirtualW])
               {
                  if(hInfo[i][Chiusa] == 1)return SendClientMessage(playerid, -1, "[INFO:] Casa Chiusa!");
                          SetPlayerPos(playerid, hInfo[i][X], hInfo[i][Y], hInfo[i][Z]);
                          SetPlayerInterior(playerid, 0);
                          SetPlayerVirtualWorld(playerid, 0);
                          InCasa[playerid] = -1;
                               }
              }
           }
   }
   if(newkeys == KEY_JUMP)
       {
      if(IsPlayerInRangeOfPoint(playerid, 1.0, hInfo[GetH(playerid)][X], hInfo[GetH(playerid)][Y], hInfo[GetH(playerid)][Z]))
      {
              if(GetPlayerMoney(playerid) < hInfo[GetH(playerid)][hCosto])return SendClientMessage(playerid, -1, "Non hai abbastanza Soldi!");
                  if(hInfo[GetH(playerid)][Comprata] == 1)return SendClientMessage(playerid, -1, "Questa casa non è in vendita!");
                  hInfo[GetH(playerid)][Comprata] = 1;
                  GivePlayerMoney(playerid, -hInfo[GetH(playerid)][hCosto]);
                  new nome[24];
          GetPlayerName(playerid, nome, sizeof(nome));
          SendClientMessage(playerid, -1, "Hai comprato questa casa con successo!");
          InCasa[playerid] = GetH(playerid);
          SetPlayerPos(playerid, hInfo[GetH(playerid)][Xu], hInfo[GetH(playerid)][Yu], hInfo[GetH(playerid)][Zu]);
          SetPlayerInterior(playerid, hInfo[GetH(playerid)][Interior]);
          SetPlayerVirtualWorld(playerid, hInfo[GetH(playerid)][VirtualW]);
                  DestroyPickup(PickupID[GetH(playerid)]);
                  PickupID[GetH(playerid)] = CreatePickup(1272, 24, hInfo[GetH(playerid)][X], hInfo[GetH(playerid)][Y], hInfo[GetH(playerid)][Z]);
                  INI_Open(file);
          INI_WriteString("Proprietario", nome);
                  hInfo[GetH(playerid)][Proprietario] = nome;
                  INI_WriteString("Descrizione", "Casa non in vendita");
                  INI_WriteInt("Comprata", 1);
          INI_Save();
          INI_Close();
      }
       }
   if(newkeys == KEY_WALK)
       {
      if(IsPlayerInRangeOfPoint(playerid, 1.0, hInfo[GetH(playerid)][X], hInfo[GetH(playerid)][Y], hInfo[GetH(playerid)][Z]))
      {
           new nome[24];
           GetPlayerName(playerid, nome, sizeof(nome));
           if(strcmp(hInfo[GetH(playerid)][Proprietario], nome) != 0) return SendClientMessage(playerid,0xFF1E00FF,"Questa casa non è tua!");
                       if(hInfo[GetH(playerid)][Comprata] == 0)return SendClientMessage(playerid,0xFF1E00FF,"Questa casa non è tua!");
                       ShowPlayerDialog(playerid, MENUCASA, DIALOG_STYLE_LIST, "Casa", "Vendi Casa\nChiudi/Apri Casa\nRitira Soldi\nDeposita Soldi", "Seleziona", "Annulla");
          }
          return 1;
       }
       return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
   if(dialogid == MENUCASA && response)
       {
       if(!response)return 0;
       switch(listitem)
       {
   case 0:
   {
                 new string[128];
                 format(string, sizeof(string), "Sei sicuro di voler vendere la tua casa per $%d ?", hInfo[GetH(playerid)][hCosto]/2);
                 ShowPlayerDialog(playerid, MENUVENDICASA, DIALOG_STYLE_MSGBOX, "Vendi", string, "Si", "No");
   }
       case 1:
   {
             if(hInfo[GetH(playerid)][Chiusa] == 0)
                 {
                                      hInfo[GetH(playerid)][Chiusa] = 1;
                                      SendClientMessage(playerid, -1, "[INFO:] Hai chiuso la tua casa");
                                      SaveHouse();
                 }
                 else if(hInfo[GetH(playerid)][Chiusa] == 1)
                 {
                                      hInfo[GetH(playerid)][Chiusa] = 0;
                                      SendClientMessage(playerid, -1, "[INFO:] Hai aperto la tua casa");
                                      SaveHouse();
                 }
   }
   case 2:ShowPlayerDialog(playerid, RITIRASOLDICASA, DIALOG_STYLE_INPUT, "Ritiro", "Scrivi la cifra che vuoi ritirare dalla casa", "Ritira", "Annulla");
       case 3:ShowPlayerDialog(playerid, DEPOSITASOLDICASA, DIALOG_STYLE_INPUT, "Deposito", "Scrivi la cifra che vuoi depositare in casa", "Deposita", "Annulla");
       }
       return 1;
}
       if(dialogid == MENUVENDICASA && response)
       {
               if(!response)return 0;
               new string[256];
               GivePlayerMoney(playerid, hInfo[GetH(playerid)][hCosto]/2);
               format(string, sizeof(string), "Hai venduto la tua casa per $%d ", hInfo[GetH(playerid)][hCosto]/2);
               SendClientMessage(playerid, -1, string);
               hInfo[GetH(playerid)][Comprata] = 0;
               DestroyPickup(PickupID[GetH(playerid)]);
       PickupID[GetH(playerid)] = CreatePickup(1273, 24, hInfo[GetH(playerid)][X], hInfo[GetH(playerid)][Y], hInfo[GetH(playerid)][Z]);
       format(file, sizeof(file), H_FILE_PATH, GetH(playerid));
       INI_Open(file);
       INI_WriteString("Proprietario", "Nessuno");
       INI_WriteInt("Comprata", 0);
       INI_Save();
       INI_Close();
               SaveHouse();
       }
       if(dialogid == DEPOSITASOLDICASA && response)
       {
                new string[200];
                if(!response)return 0;
                if(GetPlayerMoney(playerid) < strval(inputtext))return ShowPlayerDialog(playerid, DEPOSITASOLDICASA, DIALOG_STYLE_INPUT, "Deposito", "Non hai tutti questi soldi!\nScrivi la cifra che vuoi depositare in casa", "Deposita", "Annulla");
                hInfo[GetH(playerid)][Cassaforte] = hInfo[GetH(playerid)][Cassaforte]+strval(inputtext);
                format(string, sizeof(string), "Hai depositato %d in casa tua, ricorda di non venderla quando hai soldi in casa, oppure li perderai", strval(inputtext));
                SendClientMessage(playerid, -1, string);
                GivePlayerMoney(playerid, -strval(inputtext));
       }
       if(dialogid == RITIRASOLDICASA && response)
       {
                new string[200];
                if(!response)return 0;
                if(strval(inputtext) > hInfo[GetH(playerid)][Cassaforte])return ShowPlayerDialog(playerid, RITIRASOLDICASA, DIALOG_STYLE_INPUT, "Ritiro", "Non hai tutti questi soldi in casa!\nScrivi la cifra che vuoi ritirare dalla casa", "Ritira", "Annulla");
                hInfo[GetH(playerid)][Cassaforte] = hInfo[GetH(playerid)][Cassaforte]-strval(inputtext);
                format(string, sizeof(string), "Hai ritirato %d dalla tua casa!", strval(inputtext));
                SendClientMessage(playerid, -1, string);
                GivePlayerMoney(playerid, -strval(inputtext));
       }
       return 1;
}


stock GetH(playerid)//Getta l'ID della casa in cui il player è..
{
 for(new i=0; i<MAX_HOUSE; i++)
 {
   if(IsPlayerInRangeOfPoint(playerid, 2.0, hInfo[i][X], hInfo[i][Y], hInfo[i][Z]))
   {
     return i;
   }
 }
 return -230;
}

stock SaveHouse()//Carica Le case
{
  for(new i = 0; i<MAX_HOUSE; i++)
  {
     format(file, sizeof(file), H_FILE_PATH, i);
     if(INI_Exist(file))
     {
         INI_Open(file);
         INI_WriteFloat("FloatX", hInfo[i][X ]);
         INI_WriteFloat("FloatY", hInfo[i][Y]);
         INI_WriteFloat("FloatZ", hInfo[i][Z]);
         INI_WriteFloat("FloatXUscita", hInfo[i][Xu]);
         INI_WriteFloat("FloatYUscita", hInfo[i][Yu]);
         INI_WriteFloat("FloatZUscita", hInfo[i][Zu]);
         INI_WriteString("Descrizione", hInfo[i][hText]);
         INI_WriteInt("CostoCasa", hInfo[i][hCosto]);
         INI_WriteInt("Interior", hInfo[i][Interior]);
         INI_WriteInt("VirtualW", hInfo[i][VirtualW]);
         INI_WriteInt("Comprata", hInfo[i][Comprata]);
         INI_WriteInt("Chiusa", hInfo[i][Chiusa]);
         INI_WriteInt("Cassaforte", hInfo[i][Cassaforte]);
         INI_WriteString("Proprietario", hInfo[i][Proprietario]);
         INI_Save();
         INI_Close();
         }
  }
}
stock LoadHouse()//Carica Le case
{
  new Nome[MAX_PLAYER_NAME], Desc[64];
  for(new i = 0; i<MAX_HOUSE; i++)
  {
        format(file, sizeof(file), H_FILE_PATH, i);
        if(INI_Exist(file))
        {
            INI_Open(file);
            hInfo[i][X] = INI_ReadFloat("FloatX");
            hInfo[i][Y] = INI_ReadFloat("FloatY");
            hInfo[i][Z] = INI_ReadFloat("FloatZ");
            hInfo[i][Xu] = INI_ReadFloat("FloatXUscita");
            hInfo[i][Yu] = INI_ReadFloat("FloatYUscita");
            hInfo[i][Zu] = INI_ReadFloat("FloatZUscita");
            INI_ReadString(Desc, "Descrizione", 128);
            hInfo[i][hText] = Desc;
            hInfo[i][hCosto] = INI_ReadInt("CostoCasa");
            hInfo[i][Interior] = INI_ReadInt("Interior");
            hInfo[i][VirtualW] = INI_ReadInt("VirtualW");
            hInfo[i][Comprata] = INI_ReadInt("Comprata");
            hInfo[i][Cassaforte] = INI_ReadInt("Cassaforte");
            hInfo[i][Chiusa] = INI_ReadInt("Chiusa");
            INI_ReadString(Nome, "Proprietario", 128);
            hInfo[i][Proprietario] = Nome;
            INI_Close();
        if(hInfo[i][Comprata] == 0)
            {
                PickupID[i] = CreatePickup(1273, 24, hInfo[i][X], hInfo[i][Y], hInfo[i][Z]);

        }
        else if(hInfo[i][Comprata] == 1)
        {
                PickupID[i] = CreatePickup(1272, 24, hInfo[i][X], hInfo[i][Y], hInfo[i][Z]);

        }
         }
 }
}
 
Top
0 replies since 10/10/2013, 18:03   666 views
  Share