Gate Editor 0.3e bug
#1

Hello, I'm using 0.3e Gate Editor on my roleplay server, and I have a bug, when I create or move a gate to me it's happen to duplicate the Object and then I can't move it, Only with a restart at server will dissapear the second object.

Код:
CMD:gedit(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] >= 4 || PlayerInfo[playerid][pShopTech] == 1)
	{
		new x_job[128], gateid, Float:ofloat, string[128];

		if(sscanf(params, "s[128]if", x_job, gateid, ofloat))
		{
			SendClientMessageEx(playerid, COLOR_WHITE, "USAGE: /gedit [name] [gateid] [value]");
			SendClientMessageEx(playerid, COLOR_GREY, "Available names: HID, Model, VW, Int, Open, Closed  PosX(M), PosY(M), PosZ(M), RotX(M), RotZ(M)");
			SendClientMessageEx(playerid, COLOR_GREY, "Available names: ToMe(M), range, speed, status, gate, renderhq");
			return 1;
		}

		if(strcmp(x_job, "hid", true) == 0)
		{
			new value = floatround(ofloat, floatround_round);
		    if(value > MAX_HOUSES) return SendClientMessageEx(playerid, COLOR_WHITE, "* Invalid House ID!");
		    GateInfo[gateid][gHID] = value;
		    format(string, sizeof(string), "Gate HID assigned to %d", GateInfo[gateid][gHID]);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();

		    format(string, sizeof(string), "%s has edited GateID %d's House ID to %d.", GetPlayerNameEx(playerid), gateid, value);
		    Log("logs/gedit.log", string);
		}
		else if(strcmp(x_job, "model", true) == 0)
		{
		    new value = floatround(ofloat, floatround_round);

		    if(value == 0)
		    {
		        GateInfo[gateid][gPosX] = 0.0;
		        GateInfo[gateid][gPosY] = 0.0;
		        GateInfo[gateid][gPosZ] = 0.0;
		        GateInfo[gateid][gRotX] = 0.0;
		        GateInfo[gateid][gRotY] = 0.0;
				GateInfo[gateid][gRotZ] = 0.0;
				GateInfo[gateid][gPosXM] = 0.0;
				GateInfo[gateid][gPosYM] = 0.0;
				GateInfo[gateid][gPosZM] = 0.0;
				GateInfo[gateid][gRotXM] = 0.0;
				GateInfo[gateid][gRotYM] = 0.0;
				GateInfo[gateid][gRotZM] = 0.0;
				GateInfo[gateid][gVW] = 0;
				GateInfo[gateid][gInt] = 0;
			}

		    GateInfo[gateid][gModel] = value;
		    format(string, sizeof(string), "Gate Model assigned to %d", GateInfo[gateid][gModel]);
		    if(IsValidDynamicObject(GateInfo[gateid][gGATE])) DestroyDynamicObject(GateInfo[gateid][gGATE]);
            CreateGate(gateid);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();

		    format(string, sizeof(string), "%s has edited GateID %d's Model to %d.", GetPlayerNameEx(playerid), gateid, value);
		    Log("logs/gedit.log", string);
		}
		else if(strcmp(x_job, "vw", true) == 0)
		{
		    new value = floatround(ofloat, floatround_round);
		    GateInfo[gateid][gVW] = value;
		    format(string, sizeof(string), "Gate VW assigned to %d", GateInfo[gateid][gVW]);
		    if(IsValidDynamicObject(GateInfo[gateid][gGATE])) DestroyDynamicObject(GateInfo[gateid][gGATE]);
            CreateGate(gateid);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();

		    format(string, sizeof(string), "%s has edited GateID %d's VW to %d.", GetPlayerNameEx(playerid), gateid, value);
		    Log("logs/gedit.log", string);
		}
		else if(strcmp(x_job, "int", true) == 0)
		{
		    new value = floatround(ofloat, floatround_round);
		    GateInfo[gateid][gInt] = value;
		    format(string, sizeof(string), "Gate Int assigned to %d", GateInfo[gateid][gInt]);
		    if(IsValidDynamicObject(GateInfo[gateid][gGATE])) DestroyDynamicObject(GateInfo[gateid][gGATE]);
			CreateGate(gateid);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();

		    format(string, sizeof(string), "%s has edited GateID %d's InteriorID to %d.", GetPlayerNameEx(playerid), gateid, value);
		    Log("logs/gedit.log", string);
        }
		else if(strcmp(x_job, "open", true) == 0)
		{
	        for (new i = 0; i != playerid; i++)
			{
				if(GetPVarInt(i, "EditingGateID") == gateid && i != playerid)
				{
					format(string, sizeof(string), "ERROR: %s (ID: %d) is currently editing this gate.", GetPlayerNameEx(i), i);
					return SendClientMessageEx(playerid, COLOR_WHITE, string);
				}
			}
			SetPVarInt(playerid, "gEdit", 1);
			SetPVarInt(playerid, "EditingGateID", gateid);
			SetDynamicObjectPos(GateInfo[gateid][gGATE], GateInfo[gateid][gPosX], GateInfo[gateid][gPosY], GateInfo[gateid][gPosZ]);
			SetDynamicObjectRot(GateInfo[gateid][gGATE], GateInfo[gateid][gRotX], GateInfo[gateid][gRotY], GateInfo[gateid][gRotZ]);
			EditDynamicObject(playerid, GateInfo[gateid][gGATE]);
			format(string, sizeof(string), "Acum editezi pozitia de deschidere a Gate-ului %d.", gateid);
			SendClientMessage(playerid, COLOR_WHITE, string);
			SendClientMessage(playerid, 0xFFFFAAAA, "HINT: Apasa {8000FF}~k~~PED_SPRINT~ {FFFFAA}ca sa muti camera, apasa escape sa opresti editarea.");
		}
		else if(strcmp(x_job, "closed", true) == 0)
		{
			for (new i = 0; i != playerid; i++)
			{
				if(GetPVarInt(i, "EditingGateID") == gateid && i != playerid)
				{
					format(string, sizeof(string), "Eroare: %s (ID: %d) editeaza acest gate acum.", GetPlayerNameEx(i), i);
					return SendClientMessageEx(playerid, COLOR_WHITE, string);
				}
			}
			SetPVarInt(playerid, "gEdit", 2);
			SetPVarInt(playerid, "EditingGateID", gateid);
			EditDynamicObject(playerid, GateInfo[gateid][gGATE]);
			format(string, sizeof(string), "Acum editezi pozitia de inchidere a gate-ului %d.", gateid);
			SendClientMessage(playerid, COLOR_WHITE, string);
			SendClientMessage(playerid, 0xFFFFAAAA, "HINT: Apasa {8000FF}~k~~PED_SPRINT~ {FFFFAA}ca sa muti camera, apasa escape sa opresti editarea");
		}
		else if(strcmp(x_job, "range", true) == 0)
		{
		    new value = floatround(ofloat, floatround_round);
		    GateInfo[gateid][gRange] = value;
		    format(string, sizeof(string), "Gate Range assigned to %d", GateInfo[gateid][gRange]);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();

		    format(string, sizeof(string), "%s has edited GateID %d's Range to %d.", GetPlayerNameEx(playerid), gateid, value);
		    Log("logs/gedit.log", string);
		}
		else if(strcmp(x_job, "speed", true) == 0)
		{
		    new value = floatround(ofloat, floatround_round);
		    GateInfo[gateid][gSpeed] = value;
		    format(string, sizeof(string), "Gate Speed assigned to %d", GateInfo[gateid][gSpeed]);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();

		    format(string, sizeof(string), "%s has edited GateID %d's Speed to %d.", GetPlayerNameEx(playerid), gateid, value);
		    Log("logs/gedit.log", string);
		}
		else if(strcmp(x_job, "posx", true) == 0)
		{
		    GateInfo[gateid][gPosX] = ofloat;
		    format(string, sizeof(string), "PosX %f assigned to Gate %d", GateInfo[gateid][gPosX], gateid);
		    SetDynamicObjectPos(GateInfo[gateid][gGATE], GateInfo[gateid][gPosX], GateInfo[gateid][gPosY], GateInfo[gateid][gPosZ]);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();
		}
		else if(strcmp(x_job, "posy", true) == 0)
		{
		    GateInfo[gateid][gPosY] = ofloat;
		    format(string, sizeof(string), "PosY %f assigned to Gate %d", GateInfo[gateid][gPosY], gateid);
		    SetDynamicObjectPos(GateInfo[gateid][gGATE], GateInfo[gateid][gPosX], GateInfo[gateid][gPosY], GateInfo[gateid][gPosZ]);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();
		}
		else if(strcmp(x_job, "posz", true) == 0)
		{
			GateInfo[gateid][gPosZ] = ofloat;
		    format(string, sizeof(string), "PosZ %f assigned to Gate %d", GateInfo[gateid][gPosZ], gateid);
		    SetDynamicObjectPos(GateInfo[gateid][gGATE], GateInfo[gateid][gPosX], GateInfo[gateid][gPosY], GateInfo[gateid][gPosZ]);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();
		}
		else if(strcmp(x_job, "posxm", true) == 0)
		{
		    GateInfo[gateid][gPosXM] = ofloat;
		    format(string, sizeof(string), "PosXM %f assigned to Gate %d", GateInfo[gateid][gPosXM], gateid);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();
		}
		else if(strcmp(x_job, "posym", true) == 0)
		{
		    GateInfo[gateid][gPosYM] = ofloat;
		    format(string, sizeof(string), "PosYM %f assigned to Gate %d", GateInfo[gateid][gPosYM], gateid);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();
		}
		else if(strcmp(x_job, "poszm", true) == 0)
		{
		    GateInfo[gateid][gPosZM] = ofloat;
		    format(string, sizeof(string), "PosZM %f assigned to Gate %d", GateInfo[gateid][gPosZM], gateid);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();
		}
		else if(strcmp(x_job, "rotx", true) == 0)
		{
		    GateInfo[gateid][gRotX] = ofloat;
		    format(string, sizeof(string), "RotX %f assigned to Gate %d", GateInfo[gateid][gRotX], gateid);
		    SetDynamicObjectRot(GateInfo[gateid][gGATE], GateInfo[gateid][gRotX],GateInfo[gateid][gRotY],GateInfo[gateid][gRotZ]);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();
		}
		else if(strcmp(x_job, "roty", true) == 0)
		{
		    GateInfo[gateid][gRotY] = ofloat;
		    format(string, sizeof(string), "RotY %f assigned to Gate %d", GateInfo[gateid][gRotY], gateid);
		    SetDynamicObjectRot(GateInfo[gateid][gGATE], GateInfo[gateid][gRotX],GateInfo[gateid][gRotY],GateInfo[gateid][gRotZ]);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();
		}
		else if(strcmp(x_job, "rotz", true) == 0)
		{
			GateInfo[gateid][gRotZ] = ofloat;
		    format(string, sizeof(string), "RotZ %f assigned to Gate %d", GateInfo[gateid][gRotZ], gateid);
		    SetDynamicObjectRot(GateInfo[gateid][gGATE], GateInfo[gateid][gRotX],GateInfo[gateid][gRotY],GateInfo[gateid][gRotZ]);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();
		}
		else if(strcmp(x_job, "rotxm", true) == 0)
		{
		    GateInfo[gateid][gRotXM] = ofloat;
		    format(string, sizeof(string), "RotXM %f assigned to Gate %d", GateInfo[gateid][gRotXM], gateid);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();
		}
		else if(strcmp(x_job, "rotym", true) == 0)
		{
		    GateInfo[gateid][gRotYM] = ofloat;
		    format(string, sizeof(string), "RotYM %f assigned to Gate %d", GateInfo[gateid][gRotYM], gateid);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();
		}
		else if(strcmp(x_job, "rotzm", true) == 0)
		{
		    GateInfo[gateid][gRotZM] = ofloat;
		    format(string, sizeof(string), "RotZM %f assigned to Gate %d", GateInfo[gateid][gRotZM], gateid);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();
		}
        else if(strcmp(x_job, "tome", true) == 0)
		{
		    GetPlayerPos(playerid,GateInfo[gateid][gPosX],GateInfo[gateid][gPosY], GateInfo[gateid][gPosZ]);
		    GateInfo[gateid][gVW] = GetPlayerVirtualWorld(playerid);
		    GateInfo[gateid][gInt] = GetPlayerInterior(playerid);
			format(string, sizeof(string), "Gate Pos moved to %f %f %f, VW: %d INT: %d", GateInfo[gateid][gPosX], GateInfo[gateid][gPosY], GateInfo[gateid][gPosZ], GateInfo[gateid][gVW], GateInfo[gateid][gInt]);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    if(GateInfo[gateid][gModel] == 0)
			{
			    GateInfo[gateid][gModel] = 18631;
			    GateInfo[gateid][gRange] = 10;
			    GateInfo[gateid][gSpeed] = 5;
			}
		    if(IsValidDynamicObject(GateInfo[gateid][gGATE])) DestroyDynamicObject(GateInfo[gateid][gGATE]);
			CreateGate(gateid);
			SaveGates();

			format(string, sizeof(string), "%s has edited GateID %d's Position.", GetPlayerNameEx(playerid), gateid);
		    Log("logs/gedit.log", string);
		}
		else if(strcmp(x_job, "tomem", true) == 0)
		{
		    GetPlayerPos(playerid,GateInfo[gateid][gPosXM],GateInfo[gateid][gPosYM], GateInfo[gateid][gPosZM]);
			format(string, sizeof(string), "Gate PosM moved to %f %f %f", GateInfo[gateid][gPosXM], GateInfo[gateid][gPosYM], GateInfo[gateid][gPosZM]);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
			SaveGates();

			format(string, sizeof(string), "%s has edited GateID %d's Moved Position.", GetPlayerNameEx(playerid), gateid);
		    Log("logs/gedit.log", string);
		}
		else if(strcmp(x_job, "renderhq", true) == 0)
		{
		    new value = floatround(ofloat, floatround_round);
		    GateInfo[gateid][gRenderHQ] = value;
		    format(string, sizeof(string), "Gate RenderHQ assigned to %d", GateInfo[gateid][gRenderHQ]);
		    if(IsValidDynamicObject(GateInfo[gateid][gGATE])) DestroyDynamicObject(GateInfo[gateid][gGATE]);
            CreateGate(gateid);
		    SendClientMessageEx(playerid, COLOR_WHITE, string);
		    SaveGates();

		    format(string, sizeof(string), "%s has edited GateID %d's RenderHQ to %d.", GetPlayerNameEx(playerid), gateid, value);
		    Log("logs/gedit.log", string);
		}
	}
	else
	{
	    SendClientMessageEx(playerid, COLOR_GRAD2, "You are not authorized to use that command!");
		return 1;
	}
	return 1;
}

This is the script to edit the gate with arrows, 0.3e version


Код:
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
	if(response == EDIT_RESPONSE_FINAL)
	{
		new string[128];
		if(GetPVarInt(playerid, "gEdit") == 1)
		{
			if(PlayerInfo[playerid][pAdmin] < 4) return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to perform this action!");
			new gateid = GetPVarInt(playerid, "EditingGateID");
			GateInfo[gateid][gPosX] = x;
			GateInfo[gateid][gPosY] = y;
			GateInfo[gateid][gPosZ] = z;
			GateInfo[gateid][gRotX] = rx;
			GateInfo[gateid][gRotY] = ry;
			GateInfo[gateid][gRotZ] = rz;
			SaveGates();
			format(string, sizeof(string), "Ai terminat de editat pozitia de deschidere a Gate-ului cu ID-ul: %d", gateid);
			SendClientMessage(playerid, COLOR_WHITE, string);
			DeletePVar(playerid, "gEdit");
			DeletePVar(playerid, "EditingGateID");
		}
		if(GetPVarInt(playerid, "gEdit") == 2)
		{
			if(PlayerInfo[playerid][pAdmin] < 4) return SendClientMessageEx(playerid, COLOR_GREY, "You are not authorized to perform this action!");
			new gateid = GetPVarInt(playerid, "EditingGateID");
			GateInfo[gateid][gPosXM] = x;
			GateInfo[gateid][gPosYM] = y;
			GateInfo[gateid][gPosZM] = z;
			GateInfo[gateid][gRotXM] = rx;
			GateInfo[gateid][gRotYM] = ry;
			GateInfo[gateid][gRotZM] = rz;
			SaveGates();
			format(string, sizeof(string), "Ai terminat de editat pozitia de inchidere a Gate-ului cu ID-ul: %d", gateid);
			SendClientMessage(playerid, COLOR_WHITE, string);
			DeletePVar(playerid, "gEdit");
			DeletePVar(playerid, "EditingGateID");
		}
	}
	if(response == EDIT_RESPONSE_CANCEL)
    {
    	if(GetPVarType(playerid, "gEdit") == 1)
		{
			CreateGate(GetPVarInt(playerid, "EditingGateID"));
			DeletePVar(playerid, "gEdit");
			DeletePVar(playerid, "EditingGateID");
			SendClientMessage(playerid, COLOR_WHITE, "Te-ai oprit din editarea Gate-ului.");
		}
	}
	return 1;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)