Edit object problem..
#1

Код:
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;
}
Can't edit any object this is example of a walltag code only.. you just cant move to edit any objct in server..idk whats the problem help me please. and those objects doesn't save in mysql aswell... and the other toys doesn't save their position on car aswell...
Reply
#2

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.
Reply
#3

Quote:
Originally Posted by Arthur Kane
Посмотреть сообщение
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.
Will give it a try.. and about the car toys not saving its position on a vehicle..

see the attachment.. please help.
Reply
#4

I'm not downloading anything. Post the related code on the forums.
Reply
#5

Quote:
Originally Posted by Arthur Kane
Посмотреть сообщение
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;
}
You can edit the toys tho.. but it doesnt attach on vehicle.. if we set it on vehicle and move vehicle the cartoy will stay in air.
Reply
#6

Show us the
Quote:

AddVehicleCarToy

function
Reply
#7

Quote:
Originally Posted by JasonRiggs
Посмотреть сообщение
Show us the function
Код:
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;
}
Reply
#8

Quote:
Originally Posted by JasonRiggs
Посмотреть сообщение
Show us the function
Код:
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);		
	}
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)