Advertisement
Hauke

Housesystem with h_interiors

Aug 4th, 2011
576
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.60 KB | None | 0 0
  1. #include <a_samp>
  2. #include <h_interiors>
  3. #define MAX_HOUSES 10
  4. #define HOUSEFILE "test.houses"
  5. #define HOUSEDATAFILE "test.housedata"
  6. #define stf(%0) floatstr(%0)
  7. #define stv(%0) strval(%0)
  8. #define UNALLOWED_NAME "-1NOBODY-1"
  9. #define _GetPlayerMoney(%0)     GetPlayerMoney(%0)
  10. #define _GivePlayerMoney(%0,%1)  GivePlayerMoney(%0,%1)
  11.  
  12. main()
  13. {
  14.     print("\n----------------------------------");
  15.     print(" Housesystem tutorial by Hauke");
  16.     print("----------------------------------\n");
  17. }
  18.  
  19. enum houseinfo {
  20.     sID,
  21.     InteriorID
  22. }
  23.  
  24. enum housedata {
  25.     sID,
  26.     Prize,
  27.     AllowRent,
  28.     Owner[ MAX_PLAYER_NAME ],
  29.     Tenant[ MAX_PLAYER_NAME ],
  30.     Rent,
  31.     Lockstate
  32. }
  33.  
  34. new HouseData[ MAX_HOUSES ][ housedata ];
  35.  
  36. new House[ MAX_HOUSES ][ houseinfo ];
  37.  
  38. new ActualHouse[ MAX_PLAYERS ];
  39.  
  40. new CreatedHouses;
  41.  
  42. public OnGameModeInit()
  43. {
  44.     LoadHouses ( );
  45.     LoadHouseData ( );
  46.     SetGameModeText("Blank Script");
  47.     AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  48.     return 1;
  49. }
  50.  
  51. public OnGameModeExit()
  52. {
  53.     SaveHouseData ( );
  54.     return 1;
  55. }
  56.  
  57. public OnPlayerRequestClass(playerid, classid)
  58. {
  59.     SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  60.     SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  61.     SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  62.     return 1;
  63. }
  64.  
  65. public OnPlayerConnect(playerid)
  66. {
  67.     new name[ MAX_PLAYER_NAME ];
  68.     GetPlayerName ( playerid , name , MAX_PLAYER_NAME );
  69.     if ( !strcmp ( name , UNALLOWED_NAME ) )
  70.     {
  71.         SendClientMessage ( playerid , 0x666666AA , "Es tut uns leid, aber dieser Name ist nicht zulässig." );
  72.         Kick ( playerid );
  73.     }
  74.     return 1;
  75. }
  76.  
  77. public OnPlayerCommandText(playerid, cmdtext[])
  78. {
  79.     if ( !strcmp ( cmdtext , "/lockhouse" ) )
  80.     {
  81.         new HouseDataIndex = GetPlayerHouse ( playerid );
  82.         if ( HouseDataIndex != -1 )
  83.             if ( HouseData[ HouseDataIndex ][ Lockstate ] == 0 )
  84.             {
  85.                 HouseData[ HouseDataIndex ][ Lockstate ] = 1;
  86.                 SendClientMessage ( playerid , 0x666666AA , "Du hast das Haus abgeschlossen!" );
  87.             }
  88.             else
  89.             {
  90.                 HouseData[ HouseDataIndex ][ Lockstate ] = 0;
  91.                 SendClientMessage ( playerid , 0x666666AA , "Du hast das Haus aufgeschlossen!" );
  92.             }
  93.         else
  94.             SendClientMessage ( playerid , 0x666666AA , "Du besitzt kein Haus!" );
  95.     }
  96.     if ( !strcmp ( cmdtext , "/buyhouse" ) )
  97.     {
  98.         new HouseDataIndex = GetHouseDataIndex ( ActualHouse[ playerid ] ) , PlayerName[ MAX_PLAYER_NAME ] , string[ 128 ];
  99.         GetPlayerName ( playerid , PlayerName , MAX_PLAYER_NAME );
  100.         if ( ActualHouse[ playerid ] != -1 )
  101.         {
  102.             if ( GetPlayerHouse ( playerid ) != -1 )
  103.                 return SendClientMessage ( playerid , 0x666666AA , "Du besitzt schon ein Haus!" );
  104.             if ( !strcmp ( HouseData[ HouseDataIndex ][ Owner ] , UNALLOWED_NAME ) )
  105.             {
  106.                 if ( HouseData[ HouseDataIndex ][ Prize ] < _GetPlayerMoney ( playerid ) )
  107.                 {
  108.                     _GivePlayerMoney ( playerid , 0 - HouseData[ HouseDataIndex ][ Prize ] );
  109.                     format ( HouseData[ HouseDataIndex ][ Owner ] , MAX_PLAYER_NAME , PlayerName );
  110.                     format ( string , 128 , "Du hast die dieses Haus für %d$ gekauft!" , HouseData[ HouseDataIndex ][ Prize ] );
  111.                 }
  112.                 else
  113.                     format ( string , 128 , "Du hast nicht genug Geld für dieses Haus. Du benötigst %d$!" , HouseData[ HouseDataIndex ][ Prize ] );
  114.                 return SendClientMessage ( playerid , 0x666666AA , string );
  115.             }
  116.             else
  117.                 return SendClientMessage ( playerid , 0x666666AA , "Dieses Haus ist nicht zu verkaufen!" );
  118.         }
  119.         else
  120.             return SendClientMessage ( playerid , 0x666666AA , "Du befindest dich in keinem Haus!" );
  121.     }
  122.     if ( !strcmp ( cmdtext , "/renthouse" ) )
  123.     {
  124.         new HouseDataIndex = GetHouseDataIndex ( ActualHouse[ playerid ] ) , PlayerName[ MAX_PLAYER_NAME ] , string[ 128 ];
  125.         GetPlayerName ( playerid , PlayerName , MAX_PLAYER_NAME );
  126.         if ( ActualHouse[ playerid ] != -1 )
  127.         {
  128.             if ( GetPlayerHouse ( playerid ) != -1 )
  129.                 return SendClientMessage ( playerid , 0x666666AA , "Du wohnst schon in einem Haus!" );
  130.             if ( !strcmp ( HouseData[ HouseDataIndex ][ Tenant ] , UNALLOWED_NAME ) && HouseData[ HouseDataIndex ][ AllowRent ] && strcmp ( HouseData[ HouseDataIndex ][ Owner ] , PlayerName ) )
  131.             {
  132.                 format ( HouseData[ HouseDataIndex ][ Tenant ] , MAX_PLAYER_NAME , PlayerName );
  133.                 format ( string , 128 , "Du bist nun Untermieter dieses Haus für %d$!" , HouseData[ HouseDataIndex ][ Rent ] );
  134.             }
  135.             else
  136.                 return SendClientMessage ( playerid , 0x666666AA , "Du kannst hier nicht einmieten." );
  137.         }
  138.         else
  139.             return SendClientMessage ( playerid , 0x666666AA , "Du befindest dich in keinem Haus!" );
  140.     }
  141.     if ( !strcmp ( cmdtext , "/money" ) )
  142.     {
  143.         GivePlayerMoney(playerid,100000);
  144.     }
  145.     return 1;
  146. }
  147.  
  148. public OnPlayerEnterInterior(playerid ,interior ,method)
  149. {
  150.     new HouseIndex = GetHouseIndex ( interior ) , HouseDataIndex = GetHouseDataIndex ( interior ) , PlayerName[ MAX_PLAYER_NAME ];
  151.     GetPlayerName ( playerid , PlayerName , MAX_PLAYER_NAME );
  152.     if ( HouseIndex != -1 && HouseDataIndex != -1 )
  153.         if ( HouseData[ HouseDataIndex ][ Lockstate ] == 0 )
  154.         {
  155.             if ( strcmp ( PlayerName , HouseData[ HouseDataIndex ][ Owner ] ) && strcmp ( PlayerName , HouseData[ HouseDataIndex ][ Tenant ] ) )
  156.             {
  157.                 new string[ 128 ];
  158.                 if ( strcmp ( UNALLOWED_NAME , HouseData[ HouseDataIndex ][ Owner ] ) )
  159.                     if ( !strcmp ( UNALLOWED_NAME , HouseData[ HouseDataIndex ][ Tenant ] ) )
  160.                         if ( HouseData[ HouseDataIndex ][ AllowRent ] == 0 )
  161.                             format ( string , 128 , "Dieses Haus gehört %s." , HouseData[ HouseDataIndex ][ Owner ] );
  162.                         else
  163.                             format ( string , 128 , "Dieses Haus gehört %s. Hier kannst du für %d$ einmieten! Benutze \"renthouse\"" , HouseData[ HouseDataIndex ][ Owner ] , HouseData[ HouseDataIndex ][ Rent ] );
  164.                     else
  165.                         format ( string , 128 , "Dieses Haus gehört %s. Mieter ist %s." , HouseData[ HouseDataIndex ][ Owner ] , HouseData[ HouseDataIndex ][ Tenant ] );
  166.                 else
  167.                     format ( string , 128 , "Dieses Haus ist für %d$ zu verkaufen. Zum Kaufen benutze \"/buyhouse\"" , HouseData[ HouseDataIndex ][ Prize ] );
  168.                 SendClientMessage ( playerid , 0x666666AA , string );
  169.             }
  170.         }
  171.         else
  172.         {
  173.             SendClientMessage ( playerid , 0x666666AA , "Dieses Haus ist abgeschlossen!" );
  174.             return 0;
  175.         }
  176.     return 1;
  177. }
  178.  
  179. public OnPlayerEnteredInterior(playerid ,interior ,method)
  180. {
  181.     ActualHouse[ playerid ] = interior;
  182.     return 1;
  183. }
  184.  
  185. public OnPlayerLeaveInterior(playerid, interior, method)
  186. {
  187.     new HouseIndex = GetHouseIndex ( interior ) , HouseDataIndex = GetHouseDataIndex ( interior );
  188.     if ( HouseIndex != -1 && HouseDataIndex != -1 )
  189.         if ( HouseData[ HouseDataIndex ][ Lockstate ] == 1 )
  190.         {
  191.             SendClientMessage ( playerid , 0x666666AA , "Die Tür ist verschlossen!" );
  192.             return 0;
  193.         }
  194.     return 1;
  195. }
  196.  
  197. public OnPlayerLeavedInterior(playerid, interior, method)
  198. {
  199.     ActualHouse[ playerid ] = -1;
  200.     return 1;
  201. }
  202.  
  203. LoadHouses ( )
  204. {
  205.     new File:houses = fopen ( HOUSEFILE, io_read ) , content[ 512 ];
  206.     if ( !houses )
  207.         return 0;
  208.     new house;
  209.     while ( fread ( houses , content ) )
  210.     {
  211.         new v[ 23 ][ 64 ] , bool:stop = false , s;
  212.         while ( stop != true )
  213.         {
  214.             if ( strfind ( content , "|" ) != -1 )
  215.             {
  216.                 for ( new x; x < strfind ( content , "|" ); x++ )
  217.                     v[ s ][ x ] = content[ x ];
  218.                 strdel ( content , 0 , strfind ( content , "|" ) + 1 );
  219.             }
  220.             else
  221.             {
  222.                 for ( new x; x < strlen ( content ); x++ )
  223.                     v[ s ][ x ] = content[ x ];
  224.                 stop = true;
  225.             }
  226.             if ( !strcmp ( v[ s ] , "NULL" , true ) )
  227.                 format ( v[ s ] , 16 , "%d" , NULL );
  228.             if ( !strcmp ( v[ s ] , "YES" , true ) )
  229.                 format ( v[ s ] , 16 , "%d" , YES );
  230.             if ( !strcmp ( v[ s ] , "NO" , true ) )
  231.                 format ( v[ s ] , 16 , "%d" , NO );
  232.             s++;
  233.         }
  234.         House[ house ][ sID ] = stv ( v[ 0 ] );
  235.         House[ house ][ InteriorID ] = AddInterior ( v[ 1 ] , stv ( v[ 2 ] ) , stv ( v[ 3 ] ) , stf ( v[ 4 ] ) , stf ( v[ 5 ] ) , stf ( v[ 6 ] ) , stf ( v[ 7 ] ) , stv ( v[ 8 ] ) , stv ( v[ 9 ] ) , stv ( v[ 10 ] ) , stv ( v[ 11 ] ) , v[ 12 ] , stv ( v[ 13 ] ) , stv ( v[ 14 ] ) , stf (v[ 15 ] ) , stf ( v[ 16 ] ) , stf ( v[ 17 ] ) , stf ( v[ 18 ] ) , stv ( v[ 19 ] ) , stv ( v[ 20 ] ) , stv ( v[ 21 ] ) , stv ( v[ 22 ] ) );
  236.         house++;
  237.         CreatedHouses++;
  238.     }
  239.     fclose ( houses );
  240.     return 1;
  241. }
  242.  
  243. LoadHouseData ( )
  244. {
  245.     new File:houses = fopen ( HOUSEDATAFILE , io_read ) , content[ 512 ];
  246.     if ( !houses )
  247.         return 0;
  248.     new house;
  249.     while ( fread ( houses , content ) )
  250.     {
  251.         new v[ 7 ][ 64 ] , bool:stop = false , s;
  252.         while ( stop != true )
  253.         {
  254.             if ( strfind ( content , "|" ) != -1 )
  255.             {
  256.                 for ( new x; x < strfind ( content , "|" ); x++ )
  257.                     v[ s ][ x ] = content[ x ];
  258.                 strdel ( content , 0 , strfind ( content , "|" ) + 1 );
  259.             }
  260.             else
  261.             {
  262.                 for ( new x; x < strlen ( content ); x++ )
  263.                     v[ s ][ x ] = content[ x ];
  264.                 stop = true;
  265.             }
  266.             s++;
  267.         }
  268.         HouseData[ house ][ sID ] = stv ( v[ 0 ] );
  269.         HouseData[ house ][ Prize ] = stv ( v[ 1 ] );
  270.         HouseData[ house ][ AllowRent ] = stv ( v[ 2 ] );
  271.         format ( HouseData[ house ][ Owner ] , 64 , v[ 3 ] );
  272.         format ( HouseData[ house ][ Tenant ] , 64 , v[ 4 ] );
  273.         HouseData[ house ][ Rent ] = stv ( v[ 5 ] );
  274.         HouseData[ house ][ Lockstate ] = stv ( v[ 6 ] );
  275.         house++;
  276.     }
  277.     fclose ( houses );
  278.     if ( CreatedHouses != house )
  279.         printf ( "The Housefiles may are incorrect. Please fix it to prevent Bugs!" );
  280.     return 1;
  281. }
  282.  
  283. SaveHouseData ( )
  284. {
  285.     new File:houses = fopen ( HOUSEDATAFILE , io_write );
  286.     fclose ( houses );
  287.     houses = fopen ( HOUSEDATAFILE , io_append );
  288.     new Line[ 128 ];
  289.     if ( !houses )
  290.         return 0;
  291.     for ( new i; i < CreatedHouses + 1; i++ )
  292.     {
  293.         format ( Line , 128 , "%d|%d|%d|%s|%s|%d|%d\r\n" , HouseData [ i ][ sID ] , HouseData[ i ][ Prize ] , HouseData[ i ][ AllowRent ] , HouseData[ i ][ Owner ] , HouseData[ i ][ Tenant ] , HouseData[ i ][ Rent ] , HouseData[ i ][ Lockstate ] );
  294.         fwrite ( houses , Line );
  295.     }
  296.     fclose ( houses );
  297.     return 1;
  298. }
  299.  
  300. GetHouseIndex ( interior )
  301. {
  302.     for ( new i; i < CreatedHouses + 1; i++ )
  303.         if ( House[ i ][ InteriorID ] == interior )
  304.             return i;
  305.     return -1;
  306. }
  307.  
  308. GetHouseDataIndex ( interior )
  309. {
  310.     new saveID = House[ GetHouseIndex ( interior ) ][ sID ];
  311.     for ( new i; i < CreatedHouses + 1; i++ )
  312.         if ( HouseData[ i ][ sID ] == saveID )
  313.             return i;
  314.     return -1;
  315. }
  316.  
  317. GetPlayerHouse ( playerid )
  318. {
  319.     new PlayerName[ MAX_PLAYER_NAME ];
  320.     GetPlayerName ( playerid , PlayerName , MAX_PLAYER_NAME );
  321.     for ( new i; i < CreatedHouses; i++ )
  322.         if ( !strcmp ( HouseData[ i ][ Owner ] , PlayerName ) || !strcmp ( HouseData[ i ][ Tenant ] , PlayerName ) )
  323.             return i;
  324.     return -1;
  325. }
  326. /*
  327. stock GetPlayeridByName ( name[ ] )
  328. {
  329.     new TempName[ MAX_PLAYER_NAME ];
  330.     for ( new i; i < MAX_PLAYERS; i++ )
  331.     {
  332.         GetPlayerName ( i , TempName , MAX_PLAYER_NAME );
  333.         if ( strcmp ( TempName , name ) )
  334.             return i;
  335.     }
  336. }
  337.  
  338. stock HandleAllRents ( )
  339. {
  340.     for ( new i; i < CreatedHouses + 1; i++ )
  341.     {
  342.         if ( HouseData[ GetHouseDataIndex ( i ) ][ RentAllowed ] && strcmp ( HouseData[ GetHouseDataIndex ( i ) ][ Tenant ] , UNALLOWED_NAME ) )
  343.         {
  344.             new Houseowner = GetPlayeridByName ( HouseData[ GetHouseDataIndex ( i ) ][ Owner ] );
  345.             new Tenant = GetPlayeridByName ( HouseData[ GetHouseDataIndex ( i ) ][ Tenant ] );
  346.         }
  347.     }
  348. }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement