keys.inc 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. #include <YSI_Coding\y_hooks>
  2. hook OnGameModeInit()
  3. {
  4. Iter_Init(PropertyKey);
  5. Iter_Init(VehicleKey);
  6. }
  7. hook OnPlayerDisconnect(playerid, reason)
  8. {
  9. Iter_Clear(PropertyKey[playerid]);
  10. Iter_Clear(VehicleKey[playerid]);
  11. }
  12. hook OnCharacterLoaded(playerid)
  13. {
  14. inline const OnKeysLoaded()
  15. {
  16. new rows = cache_num_rows();
  17. new type;
  18. new subjectid;
  19. for(new i; i < rows; i++)
  20. {
  21. cache_get_value_name_int(i, "type", type);
  22. cache_get_value_name_int(i, "subject_id", subjectid);
  23. switch(type)
  24. {
  25. case KEY_PROPERTY: Iter_Add(PropertyKey[playerid], subjectid);
  26. case KEY_VEHICLE: Iter_Add(VehicleKey[playerid], subjectid);
  27. }
  28. }
  29. }
  30. MySQL_TQueryInline(MySQL_GetHandle(), using inline OnKeysLoaded, "SELECT type, subject_id FROM character_keys WHERE owner_id = %d", Character_GetSQLID(playerid));
  31. }
  32. CMD:givekey(playerid, params[])
  33. {
  34. if(isnull(params)) return SendSyntaxMessage(playerid, "/givekey (property/vehicle)");
  35. if(!strcmp(params, "property", true, 8))
  36. {
  37. new targetid, propertyid;
  38. if(sscanf(params, "{s[9]}ui", targetid, propertyid)) return SendSyntaxMessage(playerid, "/givekey property (playerid) (propertyid)");
  39. if(!IsPlayerConnected(targetid)) return SendErrorMessage(playerid, "You specified an invalid player.");
  40. if(!IsPlayerNearPlayer(playerid, targetid, 2.0)) return SendErrorMessage(playerid, "You're too far from that player.");
  41. if(!Iter_Contains(PropertyKey[playerid], propertyid)) return SendErrorMessage(playerid, "You don't have the keys to that property.");
  42. if(Iter_Contains(PropertyKey[targetid], propertyid)) return SendErrorMessage(playerid, "That player already has the keys to this property.");
  43. if(!IsPlayerOwningProperty(playerid, propertyid)) Iter_Remove(PropertyKey[playerid], propertyid);
  44. Iter_Add(PropertyKey[targetid], propertyid);
  45. SendInfoMessageF(playerid, "You gave a duplicate key to %s. (Property ID %d)", ReturnPlayerRPName(playerid), propertyid);
  46. SendInfoMessageF(targetid, "%s gave you a duplicate key for the %d property. (Use /dropduplicatekey to drop it)");
  47. Key_Give(targetid, KEY_PROPERTY, propertyid);
  48. }
  49. else if(!strcmp(params, "vehicle", true, 7))
  50. {
  51. new targetid, vehiclesqlid;
  52. if(sscanf(params, "{s[8]}ui", targetid, vehiclesqlid)) return SendSyntaxMessage(playerid, "/givekey vehicle (playerid) (vehicle SQL ID)");
  53. if(!IsPlayerConnected(targetid)) return SendErrorMessage(playerid, "You specified an invalid player.");
  54. if(!IsPlayerNearPlayer(playerid, targetid, 2.0)) return SendErrorMessage(playerid, "You're too far from that player.");
  55. if(!Iter_Contains(VehicleKey[playerid], vehiclesqlid)) return SendErrorMessage(playerid, "You don't have the keys to that vehicle.");
  56. if(Iter_Contains(VehicleKey[targetid], vehiclesqlid)) return SendErrorMessage(playerid, "That player already has the keys to this vehicle.");
  57. if(!IsPlayerOwningVehicle(playerid, vehiclesqlid)) Iter_Remove(VehicleKey[playerid], vehiclesqlid);
  58. Iter_Add(VehicleKey[targetid], vehiclesqlid);
  59. SendInfoMessageF(playerid, "You gave a duplicate key to %s. (Vehicle SQL ID %d)", ReturnPlayerRPName(playerid), vehiclesqlid);
  60. SendInfoMessageF(targetid, "%s gave you a duplicate key for the %d vehicle SQL ID. (Use /dropvehiclekey to drop it)");
  61. Key_Give(targetid, KEY_VEHICLE, vehiclesqlid);
  62. }
  63. else SendSyntaxMessage(playerid, "/givekey (property/vehicle)");
  64. return 1;
  65. }
  66. CMD:dropkey(playerid, params[])
  67. {
  68. if(isnull(params)) return SendSyntaxMessage(playerid, "/dropkey (property/vehicle)");
  69. if(!strcmp(params, "property", true, 8))
  70. {
  71. new propertyid;
  72. if(sscanf(params, "{s[9]}i", propertyid)) return SendSyntaxMessage(playerid, "/dropkey property (propertyid)");
  73. if(!Iter_Contains(PropertyKey[playerid], propertyid)) return SendErrorMessage(playerid, "You don't have the keys to that property.");
  74. if(IsPlayerOwningProperty(playerid, propertyid)) return SendErrorMessage(playerid, "You can't drop the keys of your own property.");
  75. Iter_Remove(PropertyKey[playerid], propertyid);
  76. SendInfoMessageF(playerid, "You just dropped the keys to %d property.", propertyid);
  77. Key_Remove(playerid, KEY_PROPERTY, propertyid);
  78. }
  79. else if(!strcmp(params, "vehicle", true, 7))
  80. {
  81. new vehiclesqlid;
  82. if(sscanf(params, "{s[8]}i", vehiclesqlid)) return SendSyntaxMessage(playerid, "/dropkey vehicle (vehicle SQL ID)");
  83. if(!Iter_Contains(PropertyKey[playerid], vehiclesqlid)) return SendErrorMessage(playerid, "You don't have the keys to that vehicle.");
  84. if(IsPlayerOwningProperty(playerid, vehiclesqlid)) return SendErrorMessage(playerid, "You can't drop the keys of your own vehicle.");
  85. Iter_Remove(VehicleKey[playerid], vehiclesqlid);
  86. SendInfoMessageF(playerid, "You just dropped the keys to %d vehicle SQL ID.", vehiclesqlid);
  87. Key_Remove(playerid, KEY_VEHICLE, vehiclesqlid);
  88. }
  89. else SendSyntaxMessage(playerid, "/dropkey (property/vehicle)");
  90. return 1;
  91. }
  92. Key_Give(playerid, type, subjectid)
  93. {
  94. new query[128];
  95. mysql_format(MySQL_GetHandle(), query, sizeof(query), "INSERT INTO character_keys (owner_id, type, subject_id, created_at) VALUES (%d, %d, %d, NOW())", Character_GetSQLID(playerid), type, subjectid);
  96. mysql_tquery(MySQL_GetHandle(), query);
  97. }
  98. Key_Remove(playerid, type, subjectid)
  99. {
  100. new query[128];
  101. mysql_format(MySQL_GetHandle(), query, sizeof(query), "DELETE FROM character_keys WHERE owner_id = %d AND type = %d AND subject_id = %d", Character_GetSQLID(playerid), type, subjectid);
  102. mysql_tquery(MySQL_GetHandle(), query);
  103. }
  104. stock bool:IsPlayerOwningVehicleKey(playerid, subjectid)
  105. {
  106. if(Iter_Contains(VehicleKey[playerid], subjectid))
  107. {
  108. return true;
  109. }
  110. return false;
  111. }
  112. stock bool:IsPlayerOwningPropertyKey(playerid, subjectid)
  113. {
  114. if(Iter_Contains(PropertyKey[playerid], subjectid))
  115. {
  116. return true;
  117. }
  118. return false;
  119. }