26.02.2014, 21:59
Quote:
If you're using a streamer, and your objects are floors, change them to CreateObject so you don't fall through them. Your topic is pretty vague, though. I suggest telling us the specific issue you're having.
|
pawn Code:
new SurfObject[MAX_PLAYERS];
new Float:FirstPosX[MAX_PLAYERS],Float:FirstPosY[MAX_PLAYERS],Float:FirstPosZ[MAX_PLAYERS];
new Float:FirstOPosX[MAX_PLAYERS],Float:FirstOPosY[MAX_PLAYERS],Float:FirstOPosZ[MAX_PLAYERS];
new Float:FirstDistance[MAX_PLAYERS];
new Float:SecondPosX[MAX_PLAYERS],Float:SecondPosY[MAX_PLAYERS],Float:SecondPosZ[MAX_PLAYERS];
new Float:SecondOPosX[MAX_PLAYERS],Float:SecondOPosY[MAX_PLAYERS],Float:SecondOPosZ[MAX_PLAYERS];
new Float:SecondDistance[MAX_PLAYERS];
new SurfDetect[MAX_PLAYERS];
new SurfDetect2[MAX_PLAYERS];
new SurfDetectActive[MAX_PLAYERS];
pawn Code:
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
if(!IsValidDynamicObject(objectid)) return 0;
MoveDynamicObject(objectid, x, y, z, 10000000, rx, ry, rz);
if(SurfDetectActive[playerid] == 0)
{
SurfObject[playerid] = objectid;
SurfDetect[playerid] = SetTimerEx("FirstSurfCheck", 1000, false, "i", playerid);
SurfDetectActive[playerid] = 1;
SendClientMessage(playerid, COLOR_YELLOW, "Edit has activated timer 1");
}
if(response == EDIT_RESPONSE_FINAL)
{
for(new i; i < sizeof(ObjectInfo); i++)
{
if(ObjectInfo[i][oCreated] == 0 && EditingObject[playerid] == -1)
{
new string[128];
ObjectInfo[i][oVW] = GetPlayerVirtualWorld(playerid);
ObjectInfo[i][oINT] = GetPlayerInterior(playerid);
ObjectInfo[i][oX] = x;
ObjectInfo[i][oY] = y;
ObjectInfo[i][oZ] = z;
ObjectInfo[i][oRX] = rx;
ObjectInfo[i][oRY] = ry;
ObjectInfo[i][oRZ] = rz;
ObjectInfo[i][oCreated] = 1;
SaveObjects();
format(string, sizeof(string), "[OBJECT CREATE] ID %d | Name %s | SAVED", i, ObjectInfo[i][oName]);
SendClientMessage(playerid, COLOR_ORANGE, string);
DestroyDynamicObject(ObjectInfo[i][oObject]);
ObjectInfo[i][oObject] = AddDynamicObject(ObjectInfo[i][oModel],ObjectInfo[i][oX],ObjectInfo[i][oY],ObjectInfo[i][oZ],ObjectInfo[i][oRX],ObjectInfo[i][oRY],ObjectInfo[i][oRZ],ObjectInfo[i][oVW],ObjectInfo[i][oINT], -1, 200.0);
if(ObjectInfo[i][oChair] == 1)
{
SendClientMessage(playerid, COLOR_GREY, "You were charged $400 for the chair");
GivePlayerCash(playerid, -400);
}
if(ObjectInfo[i][oBed] == 1)
{
SendClientMessage(playerid, COLOR_GREY, "You were charged $450 for the bed");
GivePlayerCash(playerid, -450);
}
if(ObjectInfo[i][oTable] == 1)
{
SendClientMessage(playerid, COLOR_GREY, "You were charged $150 for the table");
GivePlayerCash(playerid, -150);
}
if(ObjectInfo[i][oElectronic] == 1)
{
SendClientMessage(playerid, COLOR_GREY, "You were charged $500 for the electronics");
GivePlayerCash(playerid, -500);
}
if(ObjectInfo[i][oCabinet] == 1)
{
SendClientMessage(playerid, COLOR_GREY, "You were charged $250 for the cabinet");
GivePlayerCash(playerid, -250);
}
if(ObjectInfo[i][oKitchen] == 1)
{
SendClientMessage(playerid, COLOR_GREY, "You were charged $300 for the kitchen furniture");
GivePlayerCash(playerid, -300);
}
if(ObjectInfo[i][oPicture] == 1)
{
SendClientMessage(playerid, COLOR_GREY, "You were charged $80 for the picture");
GivePlayerCash(playerid, -80);
}
if(ObjectInfo[i][oDoor] == 1)
{
SendClientMessage(playerid, COLOR_GREY, "You were charged $200 for the door");
GivePlayerCash(playerid, -200);
}
if(ObjectInfo[i][oSafe] == 1)
{
SendClientMessage(playerid, COLOR_GREY, "You were charged $2000 for the safe");
GivePlayerCash(playerid, -2000);
}
if(ObjectInfo[i][oBath] == 1)
{
SendClientMessage(playerid, COLOR_GREY, "You were charged $250 for the bathroom furniture");
GivePlayerCash(playerid, -250);
}
EditMode[playerid] = 0;
SurfObject[playerid] = 0;
SurfDetectActive[playerid] = 0;
KillTimer(SurfDetect[playerid]);
KillTimer(SurfDetect2[playerid]);
FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
return 1;
}
if(ObjectInfo[i][oCreated] == 1 && EditingObject[playerid] == i)
{
new string[128];
ObjectInfo[i][oVW] = GetPlayerVirtualWorld(playerid);
ObjectInfo[i][oINT] = GetPlayerInterior(playerid);
ObjectInfo[i][oX] = x;
ObjectInfo[i][oY] = y;
ObjectInfo[i][oZ] = z;
ObjectInfo[i][oRX] = rx;
ObjectInfo[i][oRY] = ry;
ObjectInfo[i][oRZ] = rz;
ObjectInfo[i][oCreated] = 1;
SaveObjects();
format(string, sizeof(string), "[OBJECT EDIT] ID %d | Name %s | SAVED", i, ObjectInfo[i][oName]);
SendClientMessage(playerid, COLOR_ORANGE, string);
DestroyDynamicObject(ObjectInfo[i][oObject]);
ObjectInfo[i][oObject] = AddDynamicObject(ObjectInfo[i][oModel],ObjectInfo[i][oX],ObjectInfo[i][oY],ObjectInfo[i][oZ],ObjectInfo[i][oRX],ObjectInfo[i][oRY],ObjectInfo[i][oRZ],ObjectInfo[i][oVW],ObjectInfo[i][oINT], -1, 200.0);
EditingObject[playerid] = -1;
EditMode[playerid] = 0;
SurfObject[playerid] = 0;
SurfDetectActive[playerid] = 0;
KillTimer(SurfDetect[playerid]);
KillTimer(SurfDetect2[playerid]);
FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
return 1;
}
}
}
if(response == EDIT_RESPONSE_CANCEL)
{
for(new i; i < sizeof(ObjectInfo); i++)
{
if(ObjectInfo[i][oCreated] == 0 && EditingObject[playerid] == -1)
{
DestroyDynamicObject(ObjectInfo[i][oObject]);
SendClientMessage(playerid, COLOR_ORANGE, "[OBJECT CREATE] - Cancelled");
ObjectInfo[i][oModel] = 0;
ObjectInfo[i][oObject] = 0;
ObjectInfo[i][oChair] = 0;
ObjectInfo[i][oBed] = 0;
ObjectInfo[i][oTable] = 0;
ObjectInfo[i][oElectronic] = 0;
ObjectInfo[i][oCabinet] = 0;
ObjectInfo[i][oKitchen] = 0;
ObjectInfo[i][oPicture] = 0;
ObjectInfo[i][oDoor] = 0;
ObjectInfo[i][oSafe] = 0;
strdel(ObjectInfo[i][oName], 0, 20);
EditMode[playerid] = 0;
SurfObject[playerid] = 0;
SurfDetectActive[playerid] = 0;
KillTimer(SurfDetect[playerid]);
KillTimer(SurfDetect2[playerid]);
FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
return 1;
}
if(ObjectInfo[i][oCreated] == 1 && EditingObject[playerid] == i)
{
DestroyDynamicObject(ObjectInfo[i][oObject]);
ObjectInfo[i][oObject] = AddDynamicObject(ObjectInfo[i][oModel],ObjectInfo[i][oX],ObjectInfo[i][oY],ObjectInfo[i][oZ],ObjectInfo[i][oRX],ObjectInfo[i][oRY],ObjectInfo[i][oRZ],ObjectInfo[i][oVW],ObjectInfo[i][oINT], -1, 200.0);
SendClientMessage(playerid, COLOR_ORANGE, "[OBJECT EDIT] - Cancelled");
EditingObject[playerid] = -1;
EditMode[playerid] = 0;
SurfObject[playerid] = 0;
SurfDetectActive[playerid] = 0;
KillTimer(SurfDetect[playerid]);
KillTimer(SurfDetect2[playerid]);
FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
return 1;
}
}
}
return true;
}
pawn Code:
forward FirstSurfCheck(playerid);
public FirstSurfCheck(playerid)
{
new string[128];
GetPlayerPos(playerid, FirstPosX[playerid], FirstPosY[playerid], FirstPosZ[playerid]);
GetDynamicObjectPos(SurfObject[playerid], FirstOPosX[playerid], FirstOPosY[playerid], FirstOPosZ[playerid]);
FirstDistance[playerid] = GetPlayerDistanceFromPoint(playerid, FirstOPosX[playerid], FirstOPosY[playerid], FirstOPosZ[playerid]);
SurfDetect2[playerid] = SetTimerEx("SecondSurfCheck", 1000, false, "i", playerid);
SendClientMessage(playerid, COLOR_YELLOW, "Timer 1 is active");
format(string, sizeof(string), "Distance 1 = %f", FirstDistance[playerid]);
SendClientMessage(playerid, COLOR_ORANGE, string);
}
forward SecondSurfCheck(playerid);
public SecondSurfCheck(playerid)
{
new string[128];
GetPlayerPos(playerid, SecondPosX[playerid], SecondPosY[playerid], SecondPosZ[playerid]);
GetDynamicObjectPos(SurfObject[playerid], SecondOPosX[playerid], SecondOPosY[playerid], SecondOPosZ[playerid]);
SecondDistance[playerid] = GetPlayerDistanceFromPoint(playerid, SecondOPosX[playerid], SecondOPosY[playerid], SecondOPosZ[playerid]);
SendClientMessage(playerid, COLOR_YELLOW, "Timer 2 is active");
format(string, sizeof(string), "Distance 2 = %f", SecondDistance[playerid]);
SendClientMessage(playerid, COLOR_ORANGE, string);
if(SecondDistance[playerid] == FirstDistance[playerid])
{
SendClientMessage(playerid, COLOR_YELLOW, "Distances matched");
if(SecondPosX[playerid] != FirstPosX[playerid] || SecondPosY[playerid] != FirstPosY[playerid] || SecondPosZ[playerid] != FirstPosZ[playerid])
{
SendClientMessage(playerid, COLOR_YELLOW, "Player moved aswell");
if(SecondOPosX[playerid] != FirstOPosX[playerid] || SecondOPosY[playerid] != FirstOPosY[playerid] || SecondOPosZ[playerid] != FirstOPosZ[playerid])
{
GameTextForPlayer(playerid, "~r~OBJECT SURFING DETECTED", 3000, 5);
for(new i = 0; i < sizeof(HouseInfo); i++)
{
if(GetPlayerVirtualWorld(playerid) == HouseInfo[i][EnterWorld] && GetPlayerInterior(playerid) == HouseInfo[i][EnterInterior])
{
SendClientMessage(playerid, COLOR_YELLOW, "Timer 2 has detected surfing");
SetPlayerPos(playerid, HouseInfo[i][hExitX], HouseInfo[i][hExitY], HouseInfo[i][hExitZ]);
SetTimerEx("CancelEditForPlayer", 1000, false, "i", playerid);
KillTimer(SurfDetect[playerid]);
KillTimer(SurfDetect2[playerid]);
}
}
}
else
{
SendClientMessage(playerid, COLOR_YELLOW, "Timer 2 did not detect surfing");
FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
SurfDetect[playerid] = SetTimerEx("FirstSurfCheck", 1000, false, "i", playerid);
}
}
else
{
SendClientMessage(playerid, COLOR_YELLOW, "Timer 2 did not detect surfing");
FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
SurfDetect[playerid] = SetTimerEx("FirstSurfCheck", 1000, false, "i", playerid);
}
}
else
{
SendClientMessage(playerid, COLOR_YELLOW, "Timer 2 did not detect surfing");
FirstPosX[playerid] = 0; SecondPosX[playerid] = 0;
FirstPosY[playerid] = 0; SecondPosY[playerid] = 0;
FirstPosZ[playerid] = 0; SecondPosZ[playerid] = 0;
FirstOPosX[playerid] = 0; SecondOPosX[playerid] = 0;
FirstOPosY[playerid] = 0; SecondOPosY[playerid] = 0;
FirstOPosZ[playerid] = 0; SecondOPosZ[playerid] = 0;
FirstDistance[playerid] = 0; SecondDistance[playerid] = 0;
SurfDetect[playerid] = SetTimerEx("FirstSurfCheck", 1000, false, "i", playerid);
}
}
forward CancelEditForPlayer(playerid);
public CancelEditForPlayer(playerid)
{
SendClientMessage(playerid, COLOR_YELLOW, "Timer 2 has cancelled editing for player");
CancelEdit(playerid);
}