public wallTagEdit(playerid) { SetPVarInt(playerid, "MovingTag", 1); SelectObject(playerid); return 1; } public wallTagDelete(playerid) { SetPVarInt(playerid, "MovingTag", 2); SelectObject(playerid); return 1; }
walltagsOnPlayerEditObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) { query[0] = 0;//[128]; if(response != EDIT_RESPONSE_FINAL) { return 0; } new sqlid = findWallTagSQLIDByObjID(objectid); new index = findWallTagByObjID(objectid); if(index != -1) { WallTagInfo[index][pWallTagX] = x; WallTagInfo[index][pWallTagY] = y; WallTagInfo[index][pWallTagZ] = z; WallTagInfo[index][pWallTagRotX] = rx; WallTagInfo[index][pWallTagRotY] = ry; WallTagInfo[index][pWallTagRotZ] = rz; SendClientMessage(playerid, X11_TOMATO_2, "Tag position saved!"); format(query, sizeof(query), "UPDATE `walltags` SET `X` = %f, `Y` = %f, `Z` = %f, `rotx` = %f, `roty` = %f, `rotz` = %f WHERE `id` = %d",x,y,z,rx,ry,rz,sqlid); SetDynamicObjectPos(objectid, x, y, z); SetDynamicObjectRot(objectid, rx, ry, rz); mysql_function_query(g_mysql_handle, query, true, "EmptyCallback",""); } return 1; }
You're using SelectObject.
https://sampwiki.blast.hk/wiki/SelectObject SelectObject displays the cursor and allows the player to select an object. OnPlayerSelectObject is called when the player selects an object. I recommend using EditObject instead of SelectObject. I assume this was your original intention. You don't want players being allowed to select any object. |
I'm not downloading anything. Post the related code on the forums.
|
YCMD:siren(playerid, params[], help) { new carid = GetPlayerVehicleID(playerid); if(carid == INVALID_VEHICLE_ID || GetPlayerState(playerid) != PLAYER_STATE_DRIVER) { SendClientMessage(playerid, X11_TOMATO_2, "* You must be in a vehicle!"); return 1; } if(!IsAnLEO(playerid)) { SendClientMessage(playerid, X11_TOMATO_2, "You aren't a cop!"); return 1; } if(!IsOnDuty(playerid)) { SendClientMessage(playerid, X11_TOMATO_2, "You are not on duty!"); return 1; } AddVehicleCarToy(carid, 0, 1); return 1; } YCMD:buycartoy(playerid, params[], help) { new carid = GetPlayerVehicleID(playerid); if(carid == INVALID_VEHICLE_ID || GetPlayerState(playerid) != PLAYER_STATE_DRIVER) { SendClientMessage(playerid, X11_TOMATO_2, "* You must be in a vehicle!"); return 1; } new dps = IsPlayerInRangeOfPoint(playerid, 5.0, 1264.86, -1669.73, 13.54); new job = GetPVarInt(playerid, "Job"); if(job != EJobType_Mechanic && !dps) { SendClientMessage(playerid, X11_TOMATO_2, "You must be a mechanic for this!"); return 1; } if(VehicleInfo[carid][EVType] != EVehicleType_Owned) { SendClientMessage(playerid, X11_TOMATO_2, "* You can only use this on owned vehicles"); return 1; } ShowCarToyBuyMenu(playerid, dps); return 1; } DestroyCarToy(objid, sqldelete = 1) { new carid; new obj = findCarToyByObjID(objid,carid); if(obj == -1) return 0; VehicleCarToys[carid][obj][EVehCarToy_ObjID] = 0; if(VehicleCarToys[carid][obj][EVehCarToy_SQLID] > 0 && sqldelete) { format(query, sizeof(query), "DELETE FROM `playercartoys` WHERE `id` = %d",VehicleCarToys[carid][obj][EVehCarToy_SQLID]); mysql_function_query(g_mysql_handle, query, true, "EmptyCallback", ""); } VehicleCarToys[carid][obj][EVehCarToy_SQLID] = 0; DestroyDynamicObject(objid); return 1; } findCarToyByObjID(objid, &carid = 0) { carid = INVALID_VEHICLE_ID; for(new i=0;i<MAX_VEHICLES;i++) { for(new x=0;x<MAX_CAR_TOYS_PER_CAR;x++) { if(VehicleCarToys[i][x][EVehCarToy_ObjID] == objid) { carid = i; return x; } } } return -1; } findFreeCarToySlot(carid) { for(new i=0;i<MAX_CAR_TOYS_PER_CAR;i++) { if(VehicleCarToys[carid][i][EVehCarToy_ObjID] == 0 && VehicleCarToys[carid][i][EVehCarToy_SQLID] == 0) { return i; } } return -1; } SaveVehicleCarToy(carid, toyidx, update) { if(update) { format(query, sizeof(query), "UPDATE `playercartoys` SET `X` = %f, `Y` = %f, `Z` = %f, `RX` = %f, `RY` = %f, `RZ` = %f WHERE `id` = %d",VehicleCarToys[carid][toyidx][EVehCarToy_X],VehicleCarToys[carid][toyidx][EVehCarToy_Y],VehicleCarToys[carid][toyidx][EVehCarToy_Z],VehicleCarToys[carid][toyidx][EVehCarToy_RX],VehicleCarToys[carid][toyidx][EVehCarToy_RY],VehicleCarToys[carid][toyidx][EVehCarToy_RZ],VehicleCarToys[carid][toyidx][EVehCarToy_SQLID]); } else { format(query, sizeof(query), "INSERT INTO `playercartoys` SET `X` = %f, `Y` = %f, `Z` = %f, `RX` = %f, `RY` = %f, `RZ` = %f, `carid` = %d, `toyidx` = %d",VehicleCarToys[carid][toyidx][EVehCarToy_X],VehicleCarToys[carid][toyidx][EVehCarToy_Y],VehicleCarToys[carid][toyidx][EVehCarToy_Z],VehicleCarToys[carid][toyidx][EVehCarToy_RX],VehicleCarToys[carid][toyidx][EVehCarToy_RY],VehicleCarToys[carid][toyidx][EVehCarToy_RZ],GetVehicleSQLID(carid),VehicleCarToys[carid][toyidx][EVehCarToy_ToyIdx]); } mysql_function_query(g_mysql_handle, query, true, "OnSaveCarToy", "ddd", carid, toyidx, update); } forward OnSaveCarToy(carid, toyidx, update); public OnSaveCarToy(carid, toyidx, update) { new id = mysql_insert_id(); if(!update) { VehicleCarToys[carid][toyidx][EVehCarToy_SQLID] = id; } }
YCMD:cartoys(playerid, params[], help) { new carid = GetPlayerVehicleID(playerid); if(carid == INVALID_VEHICLE_ID || GetPlayerState(playerid) != PLAYER_STATE_DRIVER) { SendClientMessage(playerid, X11_TOMATO_2, "* You must be in a vehicle!"); return 1; } ShowPlayerDialog(playerid, ECarToys_ToyActionMenu, DIALOG_STYLE_LIST, "Car Toy Action Menu","Edit Toy\nDelete Toy\n","Select", "Cancel"); return 1; } ShowCarToyEditMenu(playerid) { new carid = GetPlayerVehicleID(playerid); if(carid == INVALID_VEHICLE_ID) { SendClientMessage(playerid, X11_TOMATO_2, "You must be in a vehicle!"); return 1; } tempstr[0] = 0; dialogstr[0] = 0; for(new i=0;i<MAX_CAR_TOYS_PER_CAR;i++) { if(VehicleCarToys[carid][i][EVehCarToy_ObjID] != 0) { format(tempstr, sizeof(tempstr), "%s\n",CarToys[VehicleCarToys[carid][i][EVehCarToy_ToyIdx]][ECarToy_Name]); strcat(dialogstr, tempstr, sizeof(dialogstr)); } } ShowPlayerDialog(playerid, ECarToys_EditMenu, DIALOG_STYLE_LIST, "Select Car Toy",dialogstr,"Select", "Cancel"); return 1; }
AddVehicleCarToy |
AddVehicleCarToy(carid, toyidx, nosql = 0) { new Float:CX, Float:CY, Float:CZ; new Float:Angle; GetVehicleZAngle(carid, Angle); GetVehiclePos(carid, CX, CY, CZ); new playerid = GetVehicleDriver(carid); new slot = findFreeCarToySlot(carid); if(slot == -1) { SendClientMessage(playerid, X11_TOMATO_2, "* You have enough vehicle toys already"); return -1; } if(playerid == INVALID_PLAYER_ID && nosql != 2) { return -1; } new objid = CreateDynamicObject(CarToys[toyidx][ECarToy_ModelID], CX, CY, CZ+2.5, 0.0, 0.0, 0.0); VehicleCarToys[carid][slot][EVehCarToy_ObjID] = objid; VehicleCarToys[carid][slot][EVehCarToy_ToyIdx] = toyidx; if(nosql > 0) { VehicleCarToys[carid][slot][EVehCarToy_SQLID] = -1; } else { VehicleCarToys[carid][slot][EVehCarToy_SQLID] = 0; } if(nosql != 2) { //attaching is handled elsewhere EditDynamicObject(playerid, objid); EditingCarToy[playerid] = 1; SendClientMessage(playerid, COLOR_GREEN, "* Move the object to where you want it on the car."); } return slot; } RespawnCarObjectForMoving(objectid) { new carid; new cartoy = findCarToyByObjID(objectid,carid); new Float:CX, Float:CY, Float:CZ; new Float:Angle; GetVehicleZAngle(carid, Angle); GetVehiclePos(carid, CX, CY, CZ); DestroyDynamicObject(objectid); new playerid = GetVehicleDriver(carid); new toyidx = VehicleCarToys[carid][cartoy][EVehCarToy_ToyIdx]; objectid = CreateDynamicObject(CarToys[toyidx][ECarToy_ModelID], CX, CY, CZ+2.5, 0.0, 0.0, 0.0); VehicleCarToys[carid][cartoy][EVehCarToy_ObjID] = objectid; if(playerid != INVALID_PLAYER_ID) { EditDynamicObject(playerid, objectid); EditingCarToy[playerid] = 1; } else { SetCarObjectPos(carid, cartoy, objectid, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); } return 1; } carToysOnEditObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) { if(EditingCarToy[playerid] == 1) { new pcarid = GetPlayerVehicleID(playerid), carid; new cartoy = findCarToyByObjID(objectid,carid); if(pcarid == INVALID_VEHICLE_ID || pcarid != carid) { DestroyCarToy(objectid); SendClientMessage(playerid, X11_TOMATO_2, "You are not in a vehicle, car toy destroyed!"); return 1; } if(response == EDIT_RESPONSE_FINAL || response == EDIT_RESPONSE_CANCEL) { EditingCarToy[playerid] = 0; new Float:cx, Float:cy, Float:cz; GetVehiclePos(pcarid, cx, cy, cz); if(GetPointDistance(x,y,z, cx, cy, cz) > 3.5) { RespawnCarObjectForMoving(objectid); SendClientMessage(playerid, X11_TOMATO_2, "* Vehicle toy is too far, please reposition it."); return 1; } ObjectPosToCarSpace(carid, x, y, z, rx, ry, rz); SetCarObjectPos(carid, cartoy, objectid, x, y, z, rx, ry, rz); if(VehicleCarToys[carid][cartoy][EVehCarToy_SQLID] != -1) SaveVehicleCarToy(carid, cartoy, VehicleCarToys[carid][cartoy][EVehCarToy_SQLID] != 0); }/* else if(response == EDIT_RESPONSE_CANCEL) { if(VehicleCarToys[carid][cartoy][EVehCarToy_SQLID] == 0) { SendClientMessage(playerid, X11_TOMATO_2, "* Vehicle Toy adding cancelled"); DestroyCarToy(objectid); } else { SetCarObjectPos(carid, cartoy, objectid, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0); } }*/ } return 0; }
SetCarObjectPos(carid, cartoy, objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) { VehicleCarToys[carid][cartoy][EVehCarToy_X] = x; VehicleCarToys[carid][cartoy][EVehCarToy_Y] = y; VehicleCarToys[carid][cartoy][EVehCarToy_Z] = z; VehicleCarToys[carid][cartoy][EVehCarToy_RX] = rx; VehicleCarToys[carid][cartoy][EVehCarToy_RY] = ry; VehicleCarToys[carid][cartoy][EVehCarToy_RZ] = rz; AttachDynamicObjectToVehicle(objectid, carid, x, y, z, rx, ry, rz); } ObjectPosToCarSpace(carid, &Float:X, &Float:Y, &Float:Z, &Float:RX, &Float:RY, &Float:RZ) { new Float:CX, Float:CY, Float:CZ; new Float:CRX, Float:CRY, Float:CRZ; GetVehiclePos(carid, CX, CY, CZ); GetVehicleZAngle(carid, CRZ); X = X-CX; Y = Y-CY; Z = Z-CZ; X = X*floatcos(CRZ, degrees)+Y*floatsin(CRZ, degrees); Y = -X*floatsin(CRZ, degrees)+Y*floatcos(CRZ, degrees); RZ = RZ-CRZ; } cartoysOnPlayerSelectObject(playerid, objectid, modelid, Float:x, Float:y, Float:z) { #pragma unused modelid #pragma unused x #pragma unused y #pragma unused z if(EditingCarToy[playerid] == 2) { EditingCarToy[playerid] = 1; EditDynamicObject(playerid, objectid); } }