Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Vincent Petritz, 13.04.2012
- Danke an:
- - Maddin (für die in deinem Tutorial stehenden Funktionen)
- - Kleiner Opa (für OCMD)
- - G-Stylezzz (für das MySQL Plugin)
- - Y_Less (für sscanf2)
- */
- #include <a_samp>
- #include <ocmd>
- #include <sscanf2>
- #include <a_mysql>
- #define Host "127.0.0.1"
- #define Benutzer "root"
- #define Datenbank "samp"
- #define Passwort ""
- #define MinHausPreis 1 // Minimaler Hauspreis den ein Haus haben kann
- #define MaxHausPreis 99999 // Maximaler Hauspreis den ein Haus haben kann
- #define MinHausZimmer 1 // Minimale Zimmer pro Haus
- #define MaxHausZimmer 50 // Maximale Zimmer pro Haus
- #define MinHausBeschreibung 5 // Mindestlaenge der Hausbeschreibung
- #define MaxHausBeschreibung 50 // Maximallaenge der Hausbeschreibung
- #define MinHausLevel 7 // Mindestlevel für jenes Haus
- #define MaxHausLevel 99 // Maximallevel für jenes Haus
- #define MaxHaus 2 // Maximale Häuser, man sollte hier nicht übertreiben!
- #define MaxHausTextSehbar 50 // Haus-3DText-Sichtweite
- #define HausPickupModel 1272 // PickupModel (siehe: http://weedarr.wikidot.com/pickups)
- #define Rot 0xEB0000FF
- #define Grun 0x23FF00FF
- #define Weiss 0xF0FFFFFF
- enum Hauser {
- Float:hX, //Haus-X Koordinate
- Float:hY, //Haus-Y Koordinate
- Float:hZ, //Haus-Z Koordinate
- hBesitzer[MAX_PLAYER_NAME], //Besitzer
- hBeschreibung[MaxHausBeschreibung], //Beschreibung
- hLevel, //Hauslevel
- hZimmerA, //Aktuelle Zimmer
- hZimmerM, //Maximale Zimmer
- hPreis, //Hauspreis
- hID, //HausID
- hPickup, //HausPickup
- Text3D:hText //Haus3D-Text
- };
- new Haus[MaxHaus][Hauser], //Enum definiert
- KriegtGeldHausSell = 0; // Kriegt der Spieler den Kaufpreis wieder, wenn er das Haus verkauft?
- /*
- Als erstes die stock's von Maddin's Tutoral, dann meine stock's & dann die CMD's. ;)
- */
- // ========================= Maddin stock's, danke Maddin. ;) =========================
- stock mysql_GetInt(Table[], Field[], Where[], Is[])
- {
- new query[128];
- mysql_real_escape_string(Table, Table);
- mysql_real_escape_string(Field, Field);
- mysql_real_escape_string(Where, Where);
- mysql_real_escape_string(Is, Is);
- format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
- mysql_query(query);
- mysql_store_result();
- new sqlint = mysql_fetch_int();
- mysql_free_result();
- return sqlint;
- }
- stock mysql_GetString(Table[], Field[], Where[], Is[])
- {
- new query[128], Get[128];
- mysql_real_escape_string(Table, Table);
- mysql_real_escape_string(Field, Field);
- mysql_real_escape_string(Where, Where);
- mysql_real_escape_string(Is, Is);
- format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
- mysql_query(query);
- mysql_store_result();
- mysql_fetch_row(Get);
- mysql_free_result();
- return Get;
- }
- stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
- {
- new query[128], Float:sqlfloat;
- mysql_real_escape_string(Table, Table);
- mysql_real_escape_string(Field, Field);
- mysql_real_escape_string(Where, Where);
- mysql_real_escape_string(Is, Is);
- format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
- mysql_query(query);
- mysql_store_result();
- mysql_fetch_float(sqlfloat);
- mysql_free_result();
- return sqlfloat;
- }
- stock mysql_SetInt(Table[], Field[], To, Where[], Where2[])
- {
- new query[128];
- mysql_real_escape_string(Table, Table);
- mysql_real_escape_string(Field, Field);
- mysql_real_escape_string(Where, Where);
- mysql_real_escape_string(Where2, Where2);
- format(query, 128, "UPDATE `%s` SET `%s` = '%d' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
- mysql_query(query);
- return true;
- }
- stock mysql_SetString(Table[], Field[], To[], Where[], Where2[])
- {
- new query[128];
- mysql_real_escape_string(Table, Table);
- mysql_real_escape_string(Field, Field);
- mysql_real_escape_string(To, To);
- mysql_real_escape_string(Where, Where);
- mysql_real_escape_string(Where2, Where2);
- format(query, 128, "UPDATE `%s` SET `%s` = '%s' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
- mysql_query(query);
- return true;
- }
- stock mysql_SetFloat(Table[], Field[], Float:To, Where[], Where2[])
- {
- new query[128];
- mysql_real_escape_string(Table, Table);
- mysql_real_escape_string(Field, Field);
- mysql_real_escape_string(Where, Where);
- mysql_real_escape_string(Where2, Where2);
- format(query, 128, "UPDATE `%s` SET `%s` = '%f' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
- mysql_query(query);
- return true;
- }
- // ========================= Vincent's stock's =========================
- stock GetNearHausID(playerid)
- {
- for(new hWhich; hWhich != MaxHaus; hWhich++)
- {
- if(IsPlayerInRangeOfPoint(playerid, 3.0, Haus[hWhich][hX], Haus[hWhich][hY], Haus[hWhich][hZ])) return hWhich;
- }
- return -1;
- }
- stock LoadHouse(ID)
- {
- new String[5],
- Text[150];
- format(String, sizeof(String), "%d", ID);
- Haus[ID][hZimmerA] = mysql_GetInt("hauser", "Zimmer", "ID", String);
- Haus[ID][hZimmerM] = mysql_GetInt("hauser", "ZimmerMax", "ID", String);
- Haus[ID][hLevel] = mysql_GetInt("hauser", "Level", "ID", String);
- Haus[ID][hPreis] = mysql_GetInt("hauser", "Preis", "ID", String);
- Haus[ID][hX] = mysql_GetFloat("hauser", "HausX", "ID", String);
- Haus[ID][hY] = mysql_GetFloat("hauser", "HausY", "ID", String);
- Haus[ID][hZ] = mysql_GetFloat("hauser", "HausZ", "ID", String);
- Haus[ID][hID] = mysql_GetInt("hauser", "ID", "ID", String);
- format(Haus[ID][hBesitzer], MAX_PLAYER_NAME, mysql_GetString("hauser", "Besitzer", "ID", String));
- format(Haus[ID][hBeschreibung], MaxHausBeschreibung, mysql_GetString("hauser", "Besitzer", "ID", String));
- if(strlen(Haus[ID][hBesitzer]) < 2) { //Wenn die Länge des Hausbesitzers < 2 (sprich unter 2) ist, mache folgendes ...
- format(Text, sizeof(Text), "Haus '%s' zu verkaufen!\nPreis: $%d\nLevel: %d\nZimmer: %d/%d", Haus[ID][hBeschreibung], Haus[ID][hPreis], Haus[ID][hLevel], Haus[ID][hZimmerA], Haus[ID][hZimmerM]); //definiere den String "Text" so
- }
- else { //wenn der aber länger ist, dann ...
- format(Text, sizeof(Text), "Haus '%s'\nBesitzer: %s\nZimmer %d/%d", Haus[ID][hBeschreibung], Haus[ID][hBesitzer], Haus[ID][hZimmerA], Haus[ID][hZimmerM]); //definiere ihn so ...
- }
- Update3DTextLabelText(Haus[ID][hText], Weiss, Text); //ändere/update den TextLabel mit dem formatieren String
- return 1;
- }
- stock SaveHouse()
- {
- for(new Haeuser; Haeuser < MaxHaus; Haeuser++) {
- mysql_SetInt("hauser", "Zimmer", Haus[Haeuser][hZimmerA], "ID", Haus[Haeuser][hID]);
- mysql_SetString("hauser", "Besitzer", Haus[Haeuser][hBesitzer], "ID", Haus[Haeuser][hID]);
- }
- return 1;
- }
- stock GetName(playerid)
- {
- new Name[MAX_PLAYER_NAME];
- GetPlayerName(playerid, Name, sizeof(Name));
- return Name;
- }
- stock DestroyHouse(ID)
- {
- DestroyPickup(Haus[ID][hPickup]);
- Delete3DTextLabel(Haus[ID][hText]);
- return 1;
- }
- stock LoadHouses()
- {
- new Schleife = 1,
- String[5],
- Text[150];
- while(Schleife < MaxHaus) {
- format(String, sizeof(String), "%d", Schleife);
- Haus[Schleife][hZimmerA] = mysql_GetInt("hauser", "Zimmer", "ID", String);
- Haus[Schleife][hZimmerM] = mysql_GetInt("hauser", "ZimmerMax", "ID", String);
- Haus[Schleife][hLevel] = mysql_GetInt("hauser", "Level", "ID", String);
- Haus[Schleife][hPreis] = mysql_GetInt("hauser", "Level", "ID", String);
- Haus[Schleife][hX] = mysql_GetFloat("hauser", "HausX", "ID", String);
- Haus[Schleife][hY] = mysql_GetFloat("hauser", "HausY", "ID", String);
- Haus[Schleife][hZ] = mysql_GetFloat("hauser", "HausZ", "ID", String);
- Haus[Schleife][hID] = mysql_GetInt("hauser", "ID", "ID", String);
- format(Haus[Schleife][hBesitzer], MAX_PLAYER_NAME, mysql_GetString("hauser", "Besitzer", "ID", String));
- format(Haus[Schleife][hBeschreibung], MaxHausBeschreibung, mysql_GetString("hauser", "Beschreibung", "ID", String));
- if(strlen(Haus[Schleife][hBesitzer]) < 2) { // das gleiche wie oben ...
- format(Text, sizeof(Text), "Haus '%s' zu verkaufen!\nPreis: $%d\nLevel: %d\nZimmer: %d/%d", Haus[Schleife][hBeschreibung], Haus[Schleife][hPreis], Haus[Schleife][hLevel], Haus[Schleife][hZimmerA], Haus[Schleife][hZimmerM]);
- }
- else {
- format(Text, sizeof(Text), "Haus '%s'\nBesitzer: %s\nZimmer %d/%d", Haus[Schleife][hBeschreibung], Haus[Schleife][hBesitzer], Haus[Schleife][hZimmerA], Haus[Schleife][hZimmerM]);
- }
- Haus[Schleife][hText] = Create3DTextLabel(Text, Weiss, Haus[Schleife][hX], Haus[Schleife][hY], Haus[Schleife][hZ], MaxHausTextSehbar, 0);
- Haus[Schleife][hPickup] = CreatePickup(HausPickupModel, 23, Haus[Schleife][hX], Haus[Schleife][hY], Haus[Schleife][hZ], -1);
- Update3DTextLabelText(Haus[Schleife][hText], Weiss, Text);
- Schleife++;
- }
- return 1;
- }
- ocmd:hcreate(playerid, params[])
- {
- new Preis,
- Level,
- Zimmeranzahl,
- Beschreibung[MaxHausBeschreibung];
- if(sscanf(params, "ddds[100]", Preis, Level, Zimmeranzahl, Beschreibung)) //siehe: http://easy-scripting.net/index.php?page=Thread&threadID=28
- return SendClientMessage(playerid, Rot, "Falsche Benutzung: /hcreate [Preis] [Level] [Zimmeranzahl] [Beschreibung (max. 50 Zeichen)]");
- if(strlen(Beschreibung) < MinHausBeschreibung || strlen(Beschreibung) > MaxHausBeschreibung) //wenn die Zeichenlänge der Beschreibung zu tief bzw. zu hoch ist, dann ...
- return SendClientMessage(playerid, Rot, "Falsche Benutzung: Beschreibung zu kurz/lang!");//sende diese Nachricht
- if(Preis < MinHausPreis || Preis > MaxHausPreis) //wenn der angegebene Preis zu hoch bzw. zu tief ist, dann ...
- return SendClientMessage(playerid, Rot, "Falsche Benutzung: Preis zu tief/hoch!"); //sende diese Nachricht
- if(Zimmeranzahl < MinHausZimmer || Zimmeranzahl > MaxHausZimmer) //wenn die angegebene Zimmeranzahl zu hoch/tief ist ...
- return SendClientMessage(playerid, Rot, "Falsche Benutzung: Zimmer zu wenig/viel!"); //sende diese Nachricht
- if(Level < MinHausLevel || Level > MaxHausLevel) // wenn das angegebene Hauslevel zu hoch bzw. zu tief ist ...
- return SendClientMessage(playerid, Rot, "Falsche Benutzung: Level zu tief/hoch!"); //sende diese Nachricht
- if(IsPlayerAdmin(playerid)) { //wenn der Spieler ein RCON-Admin ist
- new Float:x,
- Float:y,
- Float:z,
- SQL[300];
- GetPlayerPos(playerid, x, y, z); //gette die Position des Spielers
- format(SQL, sizeof(SQL), "INSERT INTO hauser (Beschreibung, Preis, ZimmerMax, Level, HausX, HausY, HausZ) VALUES ('%s', '%d', '%d', '%d', '%f', '%f', '%f')", Beschreibung, Preis, Zimmeranzahl, Level, x, y, z);
- mysql_query(SQL); //führe den mit "SQL" formatierten String aus
- SendClientMessage(playerid, Rot, "Ein Haus wurde erstellt!"); //sende dann eine Nachricht
- for(new Var; Var < MaxHaus; Var++) { //durchlaufe alle Häuser
- DestroyHouse(Var); //zerstöre deren 3DText & Pickup
- }
- LoadHouses(); // und lade sie neu
- }
- return 1;
- }
- // ========================= Vincent's Befehle =========================
- /*ocmd:hrent(playerid, params[])
- {
- #pragma unused params
- new HausID = GetNearHausID(playerid);
- if(Haus[HausID][hZimmerA] < Haus[HausID][hZimmerM]) {
- mysql_SetInt("...", "SpielerInHaus", ..., "Name", ...);
- Haus[HausID][hZimmerA]++;
- SaveHouse();
- LoadHouse(HausID);
- }
- return 1;
- }
- ocmd:unrent(playerid, params[])
- {
- #pragma unused params
- new HausID = ...[playerid][Miethaus];
- mysql_SetInt("...", "SpielerInHaus", ..., "Name", ...);
- Haus[HausID][hZimmerA]--;
- SaveHouse();
- LoadHouse(HausID);
- return 1;
- }
- */
- ocmd:hdelete(playerid, params[])
- {
- #pragma unused params
- if(IsPlayerAdmin(playerid)) { //wenn der Spieler (playerid) ein RCON-Admin ist
- new HausID = GetNearHausID(playerid), //gette die HausID des in der Nähe befindlichen Hauses
- SQL[100];
- DestroyPickup(Haus[HausID][hPickup]); //Zerstöre dessen Pickup
- Delete3DTextLabel(Haus[HausID][hText]); // & 3D-Text
- format(SQL, sizeof(SQL), "DELETE FROM hauser WHERE ID = '%d'", HausID);
- mysql_query(SQL); //sende den mit SQL formatierten Query
- SendClientMessage(playerid, Grun, "Ein Haus wurde gelöscht!"); //und sende dann diese Nachricht
- }
- return 1;
- }
- ocmd:hbuy(playerid, params[])
- {
- #pragma unused params
- new HausID = GetNearHausID(playerid), //gette die HausID des in der Nähe befindlichen Hauses
- Text[200],
- SQL[200];
- //wenn die HausID über 0 ist & die länge des Hausbesitzers unter 2 & der Spielerscore gleich oder höher dem gefordertem ist & der Spieler gleich oder mehr Geld hat, als das Haus kostet, dann ...
- if(HausID > 0 && strlen(Haus[HausID][hBesitzer]) < 2 && GetPlayerScore(playerid) >= Haus[HausID][hLevel] && GetPlayerMoney(playerid) >= Haus[HausID][hPreis]) {
- format(Haus[HausID][hBesitzer], MAX_PLAYER_NAME, GetName(playerid)); //setze den Namen des Spielers als Hausbesitzer
- GivePlayerMoney(playerid, -Haus[HausID][hPreis]); //Ziehe dem Spieler das Geld ab
- format(Text, sizeof(Text), "Haus '%s'\nBesitzer: %s\nZimmer %d/%d", Haus[HausID][hBeschreibung], Haus[HausID][hBesitzer], Haus[HausID][hZimmerA], Haus[HausID][hZimmerM]); //formatiere den Text-String
- Update3DTextLabelText(Haus[HausID][hText], Weiss, Text);// und ändere ihn in den formatierten
- format(SQL, sizeof(SQL), "UPDATE hauser SET Besitzer = '%s' WHERE ID = '%d'", Haus[HausID][hBesitzer], HausID);
- mysql_query(SQL); //sende den mit SQL definierten & formatierten Query
- }
- else {
- SendClientMessage(playerid, Rot, "Das Haus ist bereits vergeben/du hast zu wenig Geld/dein Level ist zu niedrig!");
- }
- return 1;
- }
- ocmd:hedit(playerid, params[])
- {
- new What[50],
- HowMuch,
- HausID = GetNearHausID(playerid),
- Text[200];
- if(sscanf(params, "s[50]d", What, HowMuch)) // siehe: http://easy-scripting.net/index.php?page=Thread&threadID=28
- return SendClientMessage(playerid, Rot, "Falsche Benutzung: /hedit [Preis/Zimmerzahl/Level] [Neu]");
- if(IsPlayerAdmin(playerid)) { //wenn der Spieler ein RCON-Admin ist
- if(!strcmp(What, "Preis", true)) { //und der Spieler auf den Parameter "What" "Preis" eingegeben hat
- Haus[HausID][hPreis] = HowMuch; // ändere den Preis in den 3. Parameter (HowMuch)
- }
- if(!strcmp(What, "Zimmerzahl", true)) { // das gleiche mit Zimmerzahl
- Haus[HausID][hZimmerM] = HowMuch;
- }
- if(!strcmp(What, "Level", true)) { // das gleiche mit Level
- Haus[HausID][hLevel] = HowMuch;
- }
- if(strlen(Haus[HausID][hBesitzer]) < 2) { //siehe oben
- format(Text, sizeof(Text), "Haus '%s' zu verkaufen!\nPreis: $%d\nLevel: %d\nZimmer: %d/%d", Haus[HausID][hBeschreibung], Haus[HausID][hPreis], Haus[HausID][hLevel], Haus[HausID][hZimmerA], Haus[HausID][hZimmerM]);
- }
- else {
- format(Text, sizeof(Text), "Haus '%s'\nBesitzer: %s\nZimmer %d/%d", Haus[HausID][hBeschreibung], Haus[HausID][hBesitzer], Haus[HausID][hZimmerA], Haus[HausID][hZimmerM]);
- }
- Update3DTextLabelText(Haus[HausID][hText], Weiss, Text);
- }
- return 1;
- }
- ocmd:hsell(playerid, params[])
- {
- #pragma unused params
- new HausID = GetNearHausID(playerid), //gette die HausID des in der Nähe befindlichen Hauses
- Text[200],
- SQL[200];
- if(!strcmp(Haus[HausID][hBesitzer], GetName(playerid), true)) { //wenn der eintragene Besitzer ganz genau der ist, der dem Namen des Spielers entspricht
- format(Haus[HausID][hBesitzer], 0, ""); //setze den Hausbesitzer auf "nichts"
- format(SQL, sizeof(SQL), "UPDATE hauser SET Besitzer = ' ' WHERE ID = '%d'", HausID);
- mysql_query(SQL); // sende den SQL-formatierten Query
- format(Text, sizeof(Text), "Haus '%s' zu verkaufen!\nPreis: $%d\nLevel: %d\nZimmer: %d/%d", Haus[HausID][hBeschreibung], Haus[HausID][hPreis], Haus[HausID][hLevel], Haus[HausID][hZimmerA], Haus[HausID][hZimmerM]);
- Update3DTextLabelText(Haus[HausID][hText], Weiss, Text); //update den 3DText
- if(KriegtGeldHausSell != 0) { //wenn "KriegtGeldHausSell" auf alles außer 0 steht, dann ...
- GivePlayerMoney(playerid, Haus[HausID][hPreis]); //gib ihm den Kaufpreis zurück
- }
- }
- return 1;
- }
- // ========================= Wichtige Callbacks =========================
- public OnFilterScriptInit()
- {
- new Hausx;
- mysql_debug(1);
- print(" MySQL-Haussystem von Vincent Petritz (easy-scripting.net)");
- mysql_connect(Host, Benutzer, Datenbank, Passwort);
- print(" Verbindung hergestellt!");
- while(Hausx < MaxHaus) {
- LoadHouse(Hausx);
- Hausx++;
- }
- return 1;
- }
- public OnFilterScriptExit()
- {
- new Hausy;
- while(Hausy < MaxHaus) {
- DestroyHouse(Hausy);
- Hausy++;
- }
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- /*
- if(...[playerid][Miethaus] > 0) {
- SetPlayerPos(playerid, Haus[Miethaus][hX]);
- SetPlayerPos(playerid, Haus[Miethaus][hY]);
- SetPlayerPos(playerid, Haus[Miethaus][hZ]);
- }
- */
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement