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);
}
}