| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- #include <YSI_Coding\y_hooks>
- hook OnGameModeInit()
- {
- Iter_Init(PropertyKey);
- Iter_Init(VehicleKey);
- }
- hook OnPlayerDisconnect(playerid, reason)
- {
- Iter_Clear(PropertyKey[playerid]);
- Iter_Clear(VehicleKey[playerid]);
- }
- hook OnCharacterLoaded(playerid)
- {
- inline const OnKeysLoaded()
- {
- new rows = cache_num_rows();
- new type;
- new subjectid;
- for(new i; i < rows; i++)
- {
- cache_get_value_name_int(i, "type", type);
- cache_get_value_name_int(i, "subject_id", subjectid);
- switch(type)
- {
- case KEY_PROPERTY: Iter_Add(PropertyKey[playerid], subjectid);
- case KEY_VEHICLE: Iter_Add(VehicleKey[playerid], subjectid);
- }
- }
- }
- MySQL_TQueryInline(MySQL_GetHandle(), using inline OnKeysLoaded, "SELECT type, subject_id FROM character_keys WHERE owner_id = %d", Character_GetSQLID(playerid));
- }
- CMD:givekey(playerid, params[])
- {
- if(isnull(params)) return SendSyntaxMessage(playerid, "/givekey (property/vehicle)");
- if(!strcmp(params, "property", true, 8))
- {
- new targetid, propertyid;
- if(sscanf(params, "{s[9]}ui", targetid, propertyid)) return SendSyntaxMessage(playerid, "/givekey property (playerid) (propertyid)");
- if(!IsPlayerConnected(targetid)) return SendErrorMessage(playerid, "You specified an invalid player.");
- if(!IsPlayerNearPlayer(playerid, targetid, 2.0)) return SendErrorMessage(playerid, "You're too far from that player.");
- if(!Iter_Contains(PropertyKey[playerid], propertyid)) return SendErrorMessage(playerid, "You don't have the keys to that property.");
- if(Iter_Contains(PropertyKey[targetid], propertyid)) return SendErrorMessage(playerid, "That player already has the keys to this property.");
- if(!IsPlayerOwningProperty(playerid, propertyid)) Iter_Remove(PropertyKey[playerid], propertyid);
- Iter_Add(PropertyKey[targetid], propertyid);
- SendInfoMessageF(playerid, "You gave a duplicate key to %s. (Property ID %d)", ReturnPlayerRPName(playerid), propertyid);
- SendInfoMessageF(targetid, "%s gave you a duplicate key for the %d property. (Use /dropduplicatekey to drop it)");
- Key_Give(targetid, KEY_PROPERTY, propertyid);
- }
- else if(!strcmp(params, "vehicle", true, 7))
- {
- new targetid, vehiclesqlid;
- if(sscanf(params, "{s[8]}ui", targetid, vehiclesqlid)) return SendSyntaxMessage(playerid, "/givekey vehicle (playerid) (vehicle SQL ID)");
- if(!IsPlayerConnected(targetid)) return SendErrorMessage(playerid, "You specified an invalid player.");
- if(!IsPlayerNearPlayer(playerid, targetid, 2.0)) return SendErrorMessage(playerid, "You're too far from that player.");
- if(!Iter_Contains(VehicleKey[playerid], vehiclesqlid)) return SendErrorMessage(playerid, "You don't have the keys to that vehicle.");
- if(Iter_Contains(VehicleKey[targetid], vehiclesqlid)) return SendErrorMessage(playerid, "That player already has the keys to this vehicle.");
- if(!IsPlayerOwningVehicle(playerid, vehiclesqlid)) Iter_Remove(VehicleKey[playerid], vehiclesqlid);
- Iter_Add(VehicleKey[targetid], vehiclesqlid);
- SendInfoMessageF(playerid, "You gave a duplicate key to %s. (Vehicle SQL ID %d)", ReturnPlayerRPName(playerid), vehiclesqlid);
- SendInfoMessageF(targetid, "%s gave you a duplicate key for the %d vehicle SQL ID. (Use /dropvehiclekey to drop it)");
- Key_Give(targetid, KEY_VEHICLE, vehiclesqlid);
- }
- else SendSyntaxMessage(playerid, "/givekey (property/vehicle)");
- return 1;
- }
- CMD:dropkey(playerid, params[])
- {
- if(isnull(params)) return SendSyntaxMessage(playerid, "/dropkey (property/vehicle)");
- if(!strcmp(params, "property", true, 8))
- {
- new propertyid;
- if(sscanf(params, "{s[9]}i", propertyid)) return SendSyntaxMessage(playerid, "/dropkey property (propertyid)");
- if(!Iter_Contains(PropertyKey[playerid], propertyid)) return SendErrorMessage(playerid, "You don't have the keys to that property.");
- if(IsPlayerOwningProperty(playerid, propertyid)) return SendErrorMessage(playerid, "You can't drop the keys of your own property.");
- Iter_Remove(PropertyKey[playerid], propertyid);
- SendInfoMessageF(playerid, "You just dropped the keys to %d property.", propertyid);
- Key_Remove(playerid, KEY_PROPERTY, propertyid);
- }
- else if(!strcmp(params, "vehicle", true, 7))
- {
- new vehiclesqlid;
- if(sscanf(params, "{s[8]}i", vehiclesqlid)) return SendSyntaxMessage(playerid, "/dropkey vehicle (vehicle SQL ID)");
- if(!Iter_Contains(PropertyKey[playerid], vehiclesqlid)) return SendErrorMessage(playerid, "You don't have the keys to that vehicle.");
- if(IsPlayerOwningProperty(playerid, vehiclesqlid)) return SendErrorMessage(playerid, "You can't drop the keys of your own vehicle.");
- Iter_Remove(VehicleKey[playerid], vehiclesqlid);
- SendInfoMessageF(playerid, "You just dropped the keys to %d vehicle SQL ID.", vehiclesqlid);
- Key_Remove(playerid, KEY_VEHICLE, vehiclesqlid);
- }
- else SendSyntaxMessage(playerid, "/dropkey (property/vehicle)");
- return 1;
- }
- Key_Give(playerid, type, subjectid)
- {
- new query[128];
- 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);
- mysql_tquery(MySQL_GetHandle(), query);
- }
- Key_Remove(playerid, type, subjectid)
- {
- new query[128];
- 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);
- mysql_tquery(MySQL_GetHandle(), query);
- }
- stock bool:IsPlayerOwningVehicleKey(playerid, subjectid)
- {
- if(Iter_Contains(VehicleKey[playerid], subjectid))
- {
- return true;
- }
- return false;
- }
- stock bool:IsPlayerOwningPropertyKey(playerid, subjectid)
- {
- if(Iter_Contains(PropertyKey[playerid], subjectid))
- {
- return true;
- }
- return false;
- }
|