| - 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]);
} } } }
|