Атач объектов и их редактирование
#1

ПРОБЛЕМА В КОНЦЕ!
Захотел сделать тюнинг автомобиля.
Создается объект, атачится, и изменяется самим игроком.

Код:
				new aid = TuningInfo[id][TngID];
				VehicleInfo[vehicleid][vObject][VehicleInfo[vehicleid][vIndex]+3] = CreateDynamicObject(aid,0.0,0.0,0.0,0.0,0.0,0.0);
				AttachDynamicObjectToVehicle(VehicleInfo[vehicleid][vObject][VehicleInfo[vehicleid][vIndex]+3],vehicleid,1.0,	1.0,	0.0-0.2,	0.000000,0.000000,0.000000);		
				to[vehicleid][VehicleInfo[vehicleid][vIndex]][to_id] = id;
				Streamer_Update( playerid );
				EditDynamicObject(playerid, VehicleInfo[vehicleid][vObject][VehicleInfo[vehicleid][vIndex]+3]);
Сами колбэки изменения
Как видите много чего перепробывал.
Код:
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
    new Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ;
    GetDynamicObjectPos(objectid, oldX, oldY, oldZ);
    GetDynamicObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
    SetDynamicObjectPos(objectid, x, y, z);
    SetDynamicObjectRot(objectid, rx, ry, rz);
    if(response == EDIT_RESPONSE_FINAL)
    {
        SendClientMessage(playerid,-1,"Получилось");
    }

    if(response == EDIT_RESPONSE_CANCEL)
    {
        SetDynamicObjectPos(objectid, oldX, oldY, oldZ);
        SetDynamicObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
    }
} 
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
	
	new str[128];
	new Float:fX,Float:fY,Float:fZ;
	new Float:fRotX,Float:fRotY,Float:fRotZ;
 	fX=x;
	fY=y;
	fZ=z;
	fRotX=rx;
	fRotY=ry;
	fRotZ=rz; 
	new vehicleid = GetPlayerVehicleID(playerid);
	new index = VehicleInfo[vehicleid][vIndex];
    new Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ;
	
	new objectids = VehicleInfo[vehicleid][vObject][VehicleInfo[vehicleid][vIndex]+3];
    GetDynamicObjectPos(objectids, oldX, oldY, oldZ);
    GetDynamicObjectRot(objectids, oldRotX, oldRotY, oldRotZ);
	new a = SetDynamicObjectPos(objectids, fX, fY, fZ);
	new b = SetDynamicObjectRot(objectids, fRotX, fRotY, fRotZ);
	format(str,sizeof(str),""MOD"%d %f,%f,%f,%f,%f,%f",a,oldX, oldY, oldZ, oldRotX, oldRotY, oldRotZ);
	SendClientMessage(playerid, -1,str);
	format(str,sizeof(str),""MOD"%d %f,%f,%f,%f,%f,%f",b,fX, fY, fZ, fRotX, fRotY, fRotZ);
	SendClientMessage(playerid, -1,str);
		
	Streamer_Update( playerid );
	if(response == EDIT_RESPONSE_FINAL)
	{
		SendClientMessage(playerid, -1, ""MOD_ERROR"Сохранен");
		to[vehicleid][index][to_model] = objectids;
		to[vehicleid][index][to_x] = fX;
		to[vehicleid][index][to_y] = fY;
		to[vehicleid][index][to_z] = fZ;
		to[vehicleid][index][to_rx] = fRotX;
		to[vehicleid][index][to_ry] = fRotY;
		to[vehicleid][index][to_rz] = fRotZ;
		SetDynamicObjectPos(objectids, fX, fY, fZ);
		SetDynamicObjectRot(objectids, fRotX, fRotY, fRotZ);
		ObjectUpdate(vehicleid);
	}
	if(response == EDIT_RESPONSE_CANCEL)
	{
		SetDynamicObjectPos(objectids, oldX, oldY, oldZ);
		SetDynamicObjectRot(objectids, oldRotX, oldRotY, oldRotZ);
		SendClientMessage(playerid, -1, ""MOD_ERROR"Не Сохранен");
		//AttachDynamicObjectToVehicle(VehicleInfo[vehicleid][vObject][VehicleInfo[vehicleid][vIndex]+3],vehicleid,to[vehicleid][index][to_x],	to[vehicleid][index][to_y],	to[vehicleid][index][to_z],	to[vehicleid][index][to_rx],to[vehicleid][index][to_ry],to[vehicleid][index][to_rz]);		
	}
}
forward ObjectUpdate(vehicleid);
public ObjectUpdate(vehicleid)
{
	new index = VehicleInfo[vehicleid][vIndex];
	new aid = TuningInfo[to[vehicleid][VehicleInfo[vehicleid][vIndex]][to_id]][TngID];
	DestroyDynamicObject(VehicleInfo[vehicleid][vObject][VehicleInfo[vehicleid][vIndex]+3]);
	VehicleInfo[vehicleid][vObject][VehicleInfo[vehicleid][vIndex]+3] = CreateDynamicObject(aid,to[vehicleid][index][to_x],to[vehicleid][index][to_y],to[vehicleid][index][to_z],	to[vehicleid][index][to_rx],to[vehicleid][index][to_ry],to[vehicleid][index][to_rz]);
	AttachDynamicObjectToVehicle(VehicleInfo[vehicleid][vObject][VehicleInfo[vehicleid][vIndex]+3],vehicleid,to[vehicleid][index][to_x],to[vehicleid][index][to_y],to[vehicleid][index][to_z],	to[vehicleid][index][to_rx],to[vehicleid][index][to_ry],to[vehicleid][index][to_rz]);		
	return 1;
}
Объект создается, появляются GUI интерфейс для редактирования, когда тяну за ползунок, он как бы двигается и обратно становиться на положения атача.
Думаю понятно изъяснил, если что поясню для каждого отдельно)
Reply
#2

а зачем два одинаковых колбека?(точнее по названию)
pawn Код:
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
    new Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ;
    GetDynamicObjectPos(objectid, oldX, oldY, oldZ);....

public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
   
    new str[128];
    new Float:fX,Float:fY,Float:fZ;
    new Float:fRotX,Float:fRotY,Float:fRot....
Reply
#3

Quote:
Originally Posted by long76
Посмотреть сообщение
а зачем два одинаковых колбека? ( точнее по названию )
Два варианта.
Quote:
Originally Posted by Red_Devils
Посмотреть сообщение
Как видите много чего перепробывал.
Reply
#4

Попробуй делать не Set, а Move
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)