// Include'y
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include "YSI\y_ini"
#define MAX_OBJECTS_CREATED (2000)
#define DIALOG_CREATE_OBJECTS (5999)
enum oInfo
{
oObjectID,
oModelID,
Float:oX,
Float:oY,
Float:oZ,
Float:roX,
Float:roY,
Float:roZ
};
new ObjectInfo[MAX_OBJECTS_CREATED][oInfo];
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//-------------------- OnFilterScriptInit -----------------------
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
public OnFilterScriptInit()
{
return true;
}
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//-------------------- OnFilterScriptExit -----------------------
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
public OnFilterScriptExit()
{
return true;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_CREATE_OBJECTS:
{
switch(listitem)
{
// Tworzenie obiektu.
case 0:
{
if(!response)return false;
else
{
ShowPlayerDialog(playerid, DIALOG_CREATE_OBJECTS+1, DIALOG_STYLE_INPUT, "ID Obiektu", "Wpisz poniżej ID swojego obiektu", "Wpisz", "Anuluj");
}
}
// Edycja najbliższego obiektu.
case 1:
{
for(new i; i < sizeof(ObjectInfo); i++)
{
new Float:X, Float:Y, Float:Z;
GetObjectPos(ObjectInfo[i][oObjectID], X, Y, Z);
new distance = GetPlayerDistanceToPoint(playerid, X, Y);
if(distance <= 2.0)
{
EditObject(playerid, ObjectInfo[i][oObjectID]);
new string[64];
format(string, sizeof(string), "~y~Edycja obiektu ID: ~r~%d", ObjectInfo[i][oObjectID]);
GameTextForPlayer(playerid, string, 5000, 3);
}
}
return true;
}
// Usuwanie najbliższego obiektu.
case 2:
{
for(new i; i < sizeof(ObjectInfo); i++)
{
new Float:X, Float:Y, Float:Z;
GetObjectPos(ObjectInfo[i][oObjectID], X, Y, Z);
new distance = GetPlayerDistanceToPoint(playerid, X, Y);
if(distance <= 2.0)
{
DestroyObject(ObjectInfo[i][oObjectID]);
new string[64];
format(string, sizeof(string), "~y~Usunieto obiekt o ID: ~r~%d", ObjectInfo[i][oObjectID]);
GameTextForPlayer(playerid, string, 5000, 3);
}
}
return true;
}
}
return true;
}
// Edycja stworzonego obiektu.
case DIALOG_CREATE_OBJECTS+1:
{
if(!response)return false;
else
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z);
GetXYInFrontOfPlayer(playerid, X, Y, 3.0);
for(new i; i < sizeof(ObjectInfo); i++)
{
ObjectInfo[i][oModelID] = strval(inputtext);
ObjectInfo[i][oObjectID] = CreateObject(strval(inputtext), X, Y, Z, 0.0, 0.0, 0.0);
EditObject(playerid, ObjectInfo[i][oObjectID]);
break;
}
}
return true;
}
}
return true;
}
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
switch(response)
{
case EDIT_RESPONSE_FINAL:
{
new Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ;
GetObjectPos(objectid, X, Y, Z);
GetObjectRot(objectid, rX, rY, rZ);
for(new i; i < sizeof(ObjectInfo); i++)
{
if(ObjectInfo[i][oObjectID] == objectid)
{
ObjectInfo[i][oX] = fX;
ObjectInfo[i][oY] = fY;
ObjectInfo[i][oZ] = fZ;
ObjectInfo[i][roX] = fRotX;
ObjectInfo[i][roY] = fRotY;
ObjectInfo[i][roZ] = fRotZ;
DestroyObject(objectid);
ObjectInfo[i][oObjectID] = CreateObject(ObjectInfo[i][oModelID], ObjectInfo[i][oX], ObjectInfo[i][oY], ObjectInfo[i][oZ], ObjectInfo[i][roX], ObjectInfo[i][roY], ObjectInfo[i][roZ]);
new INI:Objects = INI_Open(ObjectFile(GetFreeObjectFileID()));
INI_WriteInt (Objects, "ObjectID", ObjectInfo[i][oObjectID]);
INI_WriteInt (Objects, "ModelID", ObjectInfo[i][oModelID]);
INI_WriteFloat (Objects, "oX", ObjectInfo[i][oX]);
INI_WriteFloat (Objects, "oY", ObjectInfo[i][oY]);
INI_WriteFloat (Objects, "oZ", ObjectInfo[i][oZ]);
INI_WriteFloat (Objects, "roX", ObjectInfo[i][roX]);
INI_WriteFloat (Objects, "roY", ObjectInfo[i][roY]);
INI_WriteFloat (Objects, "roZ", ObjectInfo[i][roZ]);
INI_Close (Objects);
break;
}
}
}
case EDIT_RESPONSE_CANCEL:
{
for(new i; i < sizeof(ObjectInfo); i++)
{
if(ObjectInfo[i][oObjectID] == objectid)
{
DestroyObject(objectid);
ObjectInfo[i][oObjectID] = CreateObject(ObjectInfo[i][oModelID], ObjectInfo[i][oX], ObjectInfo[i][oY], ObjectInfo[i][oZ], ObjectInfo[i][roX], ObjectInfo[i][roY], ObjectInfo[i][roZ]);
break;
}
}
}
}
return true;
}
CMD:creator(playerid, params[])
{
ShowPlayerDialog(playerid, DIALOG_CREATE_OBJECTS, DIALOG_STYLE_LIST, "Kreator obiektуw", "1. Stwуrz obiekt\n2. Edytuj najbliższy obiekt\n3. Usuń najbliższy obiekt", "Wybierz", "Anuluj");
return true;
}
stock ObjectFile(objectid)
{
new filename[32];
format(filename, sizeof(filename), "/CreatedObjects/%d.ini", objectid);
return filename;
}
stock GetFreeObjectFileID()
{
for(new i = 0; i < MAX_OBJECTS_CREATED; i++)
{
if(!fexist(ObjectFile(i)))
{
return i;
}
}
return -1;
}
forward GetPlayerDistanceToPoint(playerid, Float:xx, Float:yy);
public GetPlayerDistanceToPoint(playerid, Float:xx, Float:yy)
{
new Float:x1, Float:y1, Float:z1;
new Float:tmpdis;
GetPlayerPos(playerid, x1, y1, z1);
tmpdis = floatsqroot(floatpower(floatabs(floatsub(xx,x1)), 2)+floatpower(floatabs(floatsub(yy, y1)), 2));
return floatround(tmpdis);
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// --- Pobieranie pozycji z przed gracza ---
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
stock GetXYInFrontOfPlayer(playerid, &Float:X, &Float:Y, Float:distance)
{
new Float:A;
GetPlayerPos(playerid, X, Y, A);
GetPlayerFacingAngle(playerid, A);
if(GetPlayerVehicleID(playerid))GetVehicleZAngle(GetPlayerVehicleID(playerid), A);
X += (distance * floatsin(-A, degrees));
Y += (distance * floatcos(-A, degrees));
return true;
}
1. Stwуrz obiekt\n2. Edytuj najbliższy obiekt\n3. Usuń najbliższy obiekt |
// Include'y
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include "YSI\y_ini"
#define MAX_OBJECTS_CREATED (2000)
#define DIALOG_CREATE_OBJECTS (5999)
enum oInfo
{
oObjectID,
oModelID,
Float:oX,
Float:oY,
Float:oZ,
Float:roX,
Float:roY,
Float:roZ
};
new ObjectInfo[MAX_OBJECTS_CREATED][oInfo];
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//-------------------- OnFilterScriptInit -----------------------
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
public OnFilterScriptInit()
{
print("====================================");
print("| FilterScript został załadowany |");
print("====================================");
return true;
}
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//-------------------- OnFilterScriptExit -----------------------
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
public OnFilterScriptExit()
{
return true;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_CREATE_OBJECTS:
{
switch(listitem)
{
// Tworzenie obiektu.
case 0:
{
if(!response)return false;
else
{
ShowPlayerDialog(playerid, DIALOG_CREATE_OBJECTS+1, DIALOG_STYLE_INPUT, "ID Obiektu", "Wpisz poniżej ID swojego obiektu", "Wpisz", "Anuluj");
}
}
// Edycja najbliższego obiektu.
case 1:
{
new Float:X, Float:Y, Float:Z, Float:Distance;
for(new i; i < sizeof(ObjectInfo); i++)
{
if(ObjectInfo[i][oObjectID] > 0)
{
GetObjectPos(ObjectInfo[i][oObjectID], X, Y, Z);
Distance = GetPlayerDistanceToPoint(playerid, X, Y);
if(Distance <= 2.0)
{
EditObject(playerid, ObjectInfo[i][oObjectID]);
new string[64];
format(string, sizeof(string), "~y~Edycja obiektu ID: ~r~%d", ObjectInfo[i][oObjectID]);
GameTextForPlayer(playerid, string, 5000, 3);
}
}
}
return true;
}
// Usuwanie najbliższego obiektu.
case 2:
{
new Float:X, Float:Y, Float:Z, Float:Distance;
for(new i; i < sizeof(ObjectInfo); i++)
{
if(ObjectInfo[i][oObjectID] > 0)
{
GetObjectPos(ObjectInfo[i][oObjectID], X, Y, Z);
Distance = GetPlayerDistanceToPoint(playerid, X, Y);
if(Distance <= 2.0)
{
DestroyObject(ObjectInfo[i][oObjectID]);
new string[64];
format(string, sizeof(string), "~y~Usunieto obiekt ID: ~r~%d", ObjectInfo[i][oObjectID]);
GameTextForPlayer(playerid, string, 5000, 3);
}
}
}
return true;
}
}
return true;
}
// Edycja stworzonego obiektu.
case DIALOG_CREATE_OBJECTS+1:
{
if(!response)return false;
else
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z);
GetXYInFrontOfPlayer(playerid, X, Y, 3.0);
for(new i; i < sizeof(ObjectInfo); i++)
{
ObjectInfo[i][oModelID] = strval(inputtext);
ObjectInfo[i][oObjectID] = CreateObject(strval(inputtext), X, Y, Z, 0.0, 0.0, 0.0);
EditObject(playerid, ObjectInfo[i][oObjectID]);
break;
}
}
return true;
}
}
return true;
}
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
switch(response)
{
case EDIT_RESPONSE_FINAL:
{
new Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ;
GetObjectPos(objectid, X, Y, Z);
GetObjectRot(objectid, rX, rY, rZ);
for(new i; i < sizeof(ObjectInfo); i++)
{
if(ObjectInfo[i][oObjectID] == objectid)
{
ObjectInfo[i][oX] = fX;
ObjectInfo[i][oY] = fY;
ObjectInfo[i][oZ] = fZ;
ObjectInfo[i][roX] = fRotX;
ObjectInfo[i][roY] = fRotY;
ObjectInfo[i][roZ] = fRotZ;
new INI:Objects = INI_Open(ObjectFile(objectid));
INI_WriteInt (Objects, "ObjectID", ObjectInfo[i][oObjectID]);
INI_WriteInt (Objects, "ModelID", ObjectInfo[i][oModelID]);
INI_WriteFloat (Objects, "oX", ObjectInfo[i][oX]);
INI_WriteFloat (Objects, "oY", ObjectInfo[i][oY]);
INI_WriteFloat (Objects, "oZ", ObjectInfo[i][oZ]);
INI_WriteFloat (Objects, "roX", ObjectInfo[i][roX]);
INI_WriteFloat (Objects, "roY", ObjectInfo[i][roY]);
INI_WriteFloat (Objects, "roZ", ObjectInfo[i][roZ]);
INI_Close (Objects);
DestroyObject(objectid);
ObjectInfo[i][oObjectID] = CreateObject(ObjectInfo[i][oModelID], ObjectInfo[i][oX], ObjectInfo[i][oY], ObjectInfo[i][oZ], ObjectInfo[i][roX], ObjectInfo[i][roY], ObjectInfo[i][roZ]);
break;
}
}
}
case EDIT_RESPONSE_CANCEL:
{
for(new i; i < sizeof(ObjectInfo); i++)
{
if(ObjectInfo[i][oObjectID] == objectid)
{
DestroyObject(objectid);
ObjectInfo[i][oObjectID] = CreateObject(ObjectInfo[i][oModelID], ObjectInfo[i][oX], ObjectInfo[i][oY], ObjectInfo[i][oZ], ObjectInfo[i][roX], ObjectInfo[i][roY], ObjectInfo[i][roZ]);
break;
}
}
}
}
return true;
}
CMD:creator(playerid, params[])
{
ShowPlayerDialog(playerid, DIALOG_CREATE_OBJECTS, DIALOG_STYLE_LIST, "Kreator obiektуw", "1. Stwуrz obiekt\n2. Edytuj najbliższy obiekt\n3. Usuń najbliższy obiekt", "Wybierz", "Anuluj");
return true;
}
stock ObjectFile(objectid)
{
new filename[32];
format(filename, sizeof(filename), "/CreatedObjects/%d.ini", objectid);
return filename;
}
stock GetFreeObjectFileID()
{
for(new i = 0; i < MAX_OBJECTS_CREATED; i++)
{
if(!fexist(ObjectFile(i)))
{
return i;
}
}
return -1;
}
forward GetPlayerDistanceToPoint(playerid, Float:xx, Float:yy);
public GetPlayerDistanceToPoint(playerid, Float:xx, Float:yy)
{
new Float:x1, Float:y1, Float:z1;
new Float:tmpdis;
GetPlayerPos(playerid, x1, y1, z1);
tmpdis = floatsqroot(floatpower(floatabs(floatsub(xx,x1)), 2)+floatpower(floatabs(floatsub(yy, y1)), 2));
return floatround(tmpdis);
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// --- Pobieranie pozycji z przed gracza ---
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
stock GetXYInFrontOfPlayer(playerid, &Float:X, &Float:Y, Float:distance)
{
new Float:A;
GetPlayerPos(playerid, X, Y, A);
GetPlayerFacingAngle(playerid, A);
if(GetPlayerVehicleID(playerid))GetVehicleZAngle(GetPlayerVehicleID(playerid), A);
X += (distance * floatsin(-A, degrees));
Y += (distance * floatcos(-A, degrees));
return true;
}