Advertisement
Lorenc

LorencPos

Jul 22nd, 2011
324
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.25 KB | None | 0 0
  1. /*
  2.  *                  Lorenc Pos
  3.  *
  4.  *      Used for saving and gathering the saved
  5.  *              position of a player.
  6.  *
  7.  *       May be useful for stunt servers
  8.  *
  9. */
  10.  
  11. #include                        <a_samp>
  12. #include                        <zcmd>
  13.  
  14. /* ** Configuration ** */
  15. #define NULL                    0
  16. #define SERVER_DATABASE         "lorencPos.db"
  17.  
  18. new DB:Database, Query[256], DBResult:Result; // Database CONFIG
  19.  
  20. /* ** Colours ** */
  21. #define COLOR_RED               0xFF0000FF
  22. #define COLOR_YELLOW            0xFFFF00FF
  23.  
  24. /* ** Player Data ** */
  25. enum PLAYER_DATA
  26. {
  27.     Float: E_LAST_X,
  28.     Float: E_LAST_Y,
  29.     Float: E_LAST_Z,
  30.     E_LAST_INT,
  31.     E_LAST_VWORLD,
  32.    
  33.     bool:E_DISABLED,
  34. }
  35.  
  36. new gPlayerData                 [MAX_PLAYERS][PLAYER_DATA];
  37.  
  38. forward spawn__Delay(playerid);
  39.  
  40. public OnFilterScriptInit()
  41. {
  42.     print("\nLorencPos - Loading and Saving Position; For stunt servers :D\n");
  43.     Database = db_open(SERVER_DATABASE);
  44.     db_free_result(db_query(Database, "CREATE TABLE IF NOT EXISTS `USERS` (`NAME`, `X`, `Y`, `Z`, `INT`, `VWORLD`)"));
  45.     return 1;
  46. }
  47.  
  48. public OnFilterScriptExit()
  49. {
  50.     db_close(Database);
  51.     return 1;
  52. }
  53.  
  54. public OnPlayerConnect(playerid)
  55. {
  56.     gPlayerData[playerid][E_DISABLED] = false;
  57.     return 1;
  58. }
  59.  
  60. public OnPlayerSpawn(playerid)
  61. {
  62.     SetTimerEx("spawn__Delay", 2000, false, "d", playerid);
  63.     return 1;
  64. }
  65.  
  66. public spawn__Delay(playerid)
  67. {
  68.     if(gPlayerData[playerid][E_DISABLED] == false) return 1;
  69.     format(Query, sizeof(Query), "SELECT * FROM `USERS` WHERE `NAME` = '%s'", ReturnPlayerName(playerid));
  70.     Result = db_query(Database, Query);
  71.     if(db_num_rows(Result))
  72.     {
  73.         new Field[20];
  74.         db_get_field_assoc(Result, "X", Field, 20);
  75.         gPlayerData[playerid][E_LAST_X] = floatstr(Field);
  76.  
  77.         db_get_field_assoc(Result, "Y", Field, 20);
  78.         gPlayerData[playerid][E_LAST_Y] = floatstr(Field);
  79.  
  80.         db_get_field_assoc(Result, "Z", Field, 20);
  81.         gPlayerData[playerid][E_LAST_Z] = floatstr(Field);
  82.  
  83.         db_get_field_assoc(Result, "INT", Field, 20);
  84.         gPlayerData[playerid][E_LAST_INT] = strval(Field);
  85.  
  86.         db_get_field_assoc(Result, "VWORLD", Field, 20);
  87.         gPlayerData[playerid][E_LAST_VWORLD] = strval(Field);
  88.  
  89.         SetPlayerPos(playerid, gPlayerData[playerid][E_LAST_X], gPlayerData[playerid][E_LAST_Y], gPlayerData[playerid][E_LAST_Z]);
  90.         SetPlayerInterior(playerid, gPlayerData[playerid][E_LAST_INT]);
  91.         SetPlayerVirtualWorld(playerid, gPlayerData[playerid][E_LAST_VWORLD]);
  92.  
  93.         SendLPOSMessage(playerid, "You have been set back to your last location!");
  94.     }
  95.     return 1;
  96. }
  97.  
  98. CMD:pos(playerid, params[])
  99. {
  100.     new Float:X, Float:Y, Float:Z, pInt = GetPlayerInterior(playerid), pWorld = GetPlayerVirtualWorld(playerid);
  101.     GetPlayerPos(playerid, X, Y, Z);
  102.     format(Query, sizeof(Query), "SELECT * FROM `USERS` WHERE `NAME` = '%s'", ReturnPlayerName(playerid));
  103.     Result = db_query(Database, Query);
  104.     if(isnull(params)) SendLPOSMessage(playerid, "USAGE: /pos [last/set/toggle]");
  105.     else if(strmatch(params, "set"))
  106.     {
  107.         if(db_num_rows(Result))
  108.         {
  109.             format(Query, sizeof(Query), "UPDATE `USERS` SET X = '%f', Y = '%f', Z = '%f', INT = '%d', VWORLD = '%d' WHERE `NAME` = '%s'", X, Y, Z, pInt, pWorld, ReturnPlayerName(playerid));
  110.             db_free_result(db_query(Database, Query));
  111.         }
  112.         else
  113.         {
  114.             format(Query, sizeof(Query), "INSERT INTO `USERS` (`NAME`, `X`, `Y`, `Z`, `INT`, `VWORLD`) VALUES('%s','%f','%f','%f','%d','%d')", ReturnPlayerName(playerid), X, Y, Z, pInt, pWorld);
  115.             db_free_result(db_query(Database, Query));
  116.         }
  117.         gPlayerData[playerid][E_LAST_X] = X;
  118.         gPlayerData[playerid][E_LAST_Y] = Y;
  119.         gPlayerData[playerid][E_LAST_Z] = Z;
  120.         gPlayerData[playerid][E_LAST_INT] = pInt;
  121.         gPlayerData[playerid][E_LAST_VWORLD] = pWorld;
  122.         SendLPOSMessage(playerid, "Location set!");
  123.     }
  124.     else if(strmatch(params, "last"))
  125.     {
  126.         if(db_num_rows(Result) && gPlayerData[playerid][E_LAST_X] != 0 && gPlayerData[playerid][E_LAST_Y] != 0)
  127.         {
  128.             SetPlayerPos(playerid, gPlayerData[playerid][E_LAST_X], gPlayerData[playerid][E_LAST_Y], gPlayerData[playerid][E_LAST_Z]);
  129.             SetPlayerInterior(playerid, gPlayerData[playerid][E_LAST_INT]);
  130.             SetPlayerVirtualWorld(playerid, gPlayerData[playerid][E_LAST_VWORLD]);
  131.         } else SendLPOSMessage(playerid, "ERROR: Nothing had been created/set!");
  132.     }
  133.     else if(strmatch(params, "toggle"))
  134.     {
  135.         if(gPlayerData[playerid][E_DISABLED] == false) gPlayerData[playerid][E_DISABLED] = true, SendLPOSMessage(playerid, "Toggled");
  136.         else gPlayerData[playerid][E_DISABLED] = false, SendLPOSMessage(playerid, "Un-Toggled");
  137.     }
  138.     else SendLPOSMessage(playerid, "USAGE: /pos [last/set/toggle]");
  139.     return 1;
  140. }
  141.  
  142. ///////////////////////////////////
  143. ///         Functions           ///
  144. //////////////////////////////////
  145.  
  146. stock strmatch(const String1[], const String2[])
  147. {
  148.     if ((strcmp(String1, String2, true, strlen(String2)) == 0) && (strlen(String2) == strlen(String1))) {
  149.         return true;
  150.     }
  151.     else {
  152.         return false;
  153.     }
  154. }
  155.  
  156. stock ReturnPlayerName(playerid)
  157. {
  158.     new pname[MAX_PLAYER_NAME];
  159.     GetPlayerName(playerid, pname, sizeof(pname));
  160.     return pname;
  161. }
  162.  
  163. stock SendLPOSMessage(playerid, const Message[])
  164. {
  165.     new string[128];
  166.     format(string, sizeof(string), "{0012E7}LorencPos: {FFFFFF}%s", Message);
  167.     SendClientMessage(playerid, -1, string);
  168.     return 1;
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement