05.02.2015, 19:55
Hello guys.
I tried to create a Dynamic Door System.
Loading and creating works fine, but if I do something wrong I want to edit what I did.
So I created an Edit-Mode, but I think it's bugged, I don't know why.
What's wrong here?
I tried to create a Dynamic Door System.
Loading and creating works fine, but if I do something wrong I want to edit what I did.
So I created an Edit-Mode, but I think it's bugged, I don't know why.
pawn Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <Dini>
//------------------------------------------------------------------------------
#define MAX_DOORS 1000
//------------------------------------------------------------------------------
#define DIALOG_EDITID 2500
#define DIALOG_EDIT 2501
//------------------------------------------------------------------------------
enum dInfo
{
Float:dX,
Float:dY,
Float:dZ,
Float:dEnterX,
Float:dEnterY,
Float:dEnterZ,
Float:dEnterA,
dEnterInterior,
dEnterWorld,
dPickup
}
//------------------------------------------------------------------------------
new DoorInfo[MAX_DOORS][dInfo];
new doorid, editid;
new Started[MAX_PLAYERS];
//------------------------------------------------------------------------------
CMD:createdoor(playerid, params[])
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z);
DoorInfo[doorid][dX] = X;
DoorInfo[doorid][dY] = Y;
DoorInfo[doorid][dZ] = Z;
SendClientMessage(playerid, -1, "{FF0000}[DOOR]: {FFFFFF}Select door entrance position by pressing: {FF0000}'LMB'.");
Started[playerid] = 1;
DoorInfo[doorid][dPickup] = CreatePickup(1318, 1, X, Y, Z, 0);
return 1;
}
//------------------------------------------------------------------------------
CMD:removedoor(playerid, params[])
{
new removeid, file[50], string[100];
if(sscanf(params, "i", removeid)) return SendClientMessage(playerid, -1, "{FF0000}USAGE: {FFFFFF}/RemoveDoor [Door ID]");
format(file, sizeof(file), "Doors/%i.ini", removeid);
if(!fexist(file))
{
SendClientMessage(playerid, -1, "{FF0000}ERROR: {FFFFFF}This door ID doesn't exists in our data-base.");
}
else
{
DoorInfo[removeid][dX] = -1;
DoorInfo[removeid][dY] = -1;
DoorInfo[removeid][dZ] = -1;
DoorInfo[removeid][dEnterX] = -1;
DoorInfo[removeid][dEnterY] = -1;
DoorInfo[removeid][dEnterZ] = -1;
DoorInfo[removeid][dEnterWorld] = -99;
DoorInfo[removeid][dEnterInterior] = -99;
DestroyPickup(DoorInfo[removeid][dPickup]);
dini_Remove(file);
format(string, sizeof(string), "{FF0000}[DOOR]: {FFFFFF}Door ID: {FF0000}%d {FFFFFF}has been removed.", removeid);
SendClientMessage(playerid, -1, string);
}
return 1;
}
//------------------------------------------------------------------------------
CMD:editdoor(playerid, params[])
{
ShowPlayerDialog(playerid, DIALOG_EDITID, DIALOG_STYLE_INPUT, "Edit ID", "{FFFFFF}Please, input below door's ID wich you want to edit:", "Continue", "Exit");
return 1;
}
//------------------------------------------------------------------------------
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_EDITID)
{
if(response)
{
new file[50];
editid = strval(inputtext);
format(file, sizeof(file), "Doors/%d.ini", editid);
if(!fexist(file))
{
SendClientMessage(playerid, -1, "{FF0000}ERROR: {FFFFFF}This house doesn't exists in data-base.");
}
else
{
ShowPlayerDialog(playerid, DIALOG_EDIT, DIALOG_STYLE_MSGBOX, "Edit", "{FFFFFF}Please, choose your option:", "Pickup", "Entrance");
}
}
}
if(dialogid == DIALOG_EDIT)
{
if(response)
{
SendClientMessage(playerid, -1, "{FF0000}[EDIT-MODE]: {FFFFFF}Select new position of door. Press {FF0000}'LMB' {FFFFFF}to change position.");
Started[playerid] = 50;
}
else
{
SendClientMessage(playerid, -1, "{FF0000}[EDIT-MODE]: {FFFFFF}Select new position of entrance. Press {FF0000}'LMB' {FFFFFF}to change entrance.");
Started[playerid] = 100;
}
}
return 1;
}
//------------------------------------------------------------------------------
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
new Float:X, Float:Y, Float:Z, Float:A;
GetPlayerFacingAngle(playerid, A);
GetPlayerPos(playerid, X, Y, Z);
if(newkeys & KEY_FIRE)
{
if(Started[playerid] == 1)
{
new string[100], file[50], Interior, World;
World = GetPlayerVirtualWorld(playerid);
Interior = GetPlayerInterior(playerid);
DoorInfo[doorid][dEnterX] = X;
DoorInfo[doorid][dEnterY] = Y;
DoorInfo[doorid][dEnterZ] = Z;
DoorInfo[doorid][dEnterA] = A;
DoorInfo[doorid][dEnterInterior] = Interior;
DoorInfo[doorid][dEnterWorld] = World;
format(string, sizeof(string), "{FF0000}[DOOR]: {FFFFFF}Door: {FF0000}%d {FFFFFF}created.", doorid);
SendClientMessage(playerid, -1, string);
format(file, sizeof(file), "Doors/%d.ini", doorid);
if(!fexist(file))
{
dini_Create(file);
dini_IntSet(file, "Interior", DoorInfo[doorid][dEnterInterior]);
dini_IntSet(file, "World", DoorInfo[doorid][dEnterWorld]);
dini_FloatSet(file, "Position X", DoorInfo[doorid][dX]);
dini_FloatSet(file, "Position Y", DoorInfo[doorid][dY]);
dini_FloatSet(file, "Position Z", DoorInfo[doorid][dZ]);
dini_FloatSet(file, "Enter X", DoorInfo[doorid][dEnterX]);
dini_FloatSet(file, "Enter Y", DoorInfo[doorid][dEnterY]);
dini_FloatSet(file, "Enter Z", DoorInfo[doorid][dEnterZ]);
dini_FloatSet(file, "Enter Angle", DoorInfo[doorid][dEnterA]);
}
Started[playerid] = -1;
doorid++;
}
for(new i = 0; i < MAX_DOORS; i++)
{
if(IsPlayerInRangeOfPoint(playerid, 5.0, DoorInfo[i][dX], DoorInfo[i][dY], DoorInfo[i][dZ]))
{
SetPlayerPos(playerid, DoorInfo[i][dEnterX], DoorInfo[i][dEnterY], DoorInfo[i][dEnterZ]);
SetPlayerFacingAngle(playerid, DoorInfo[i][dEnterA]);
SetPlayerInterior(playerid, DoorInfo[i][dEnterInterior]);
SetPlayerVirtualWorld(playerid, DoorInfo[i][dEnterWorld]);
}
}
if(Started[playerid] == 50)
{
new file[50];
DoorInfo[editid][dX] = X;
DoorInfo[editid][dY] = Y;
DoorInfo[editid][dZ] = Z;
DestroyPickup(DoorInfo[editid][dPickup]);
DoorInfo[editid][dPickup] = CreatePickup(1318, 1, X, Y, Z, 0);
format(file, sizeof(file), "Doors/%d.ini", editid);
if(fexist(file))
{
dini_FloatSet(file, "Position X", DoorInfo[editid][dX]);
dini_FloatSet(file, "Position Y", DoorInfo[editid][dY]);
dini_FloatSet(file, "Position Z", DoorInfo[editid][dZ]);
}
SendClientMessage(playerid, -1, "{FF0000}[DOOR]: {FFFFFF}Door's new position has been setted.");
Started[playerid] = -1;
}
if(Started[playerid] == 100)
{
new file[50], Interior, World;
World = GetPlayerVirtualWorld(playerid);
Interior = GetPlayerInterior(playerid);
DoorInfo[editid][dEnterX] = X;
DoorInfo[editid][dEnterY] = Y;
DoorInfo[editid][dEnterZ] = Z;
DoorInfo[editid][dEnterInterior] = Interior;
DoorInfo[editid][dEnterWorld] = World;
format(file, sizeof(file), "Doors/%d.ini", editid);
if(fexist(file))
{
dini_IntSet(file, "Interior", DoorInfo[editid][dEnterInterior]);
dini_IntSet(file, "World", DoorInfo[editid][dEnterWorld]);
dini_FloatSet(file, "Enter X", DoorInfo[editid][dEnterX]);
dini_FloatSet(file, "Enter Y", DoorInfo[editid][dEnterY]);
dini_FloatSet(file, "Enter Z", DoorInfo[editid][dEnterZ]);
}
SendClientMessage(playerid, -1, "{FF0000}[DOOR]: {FFFFFF}Door's new entrance has been setted.");
}
}
return 1;
}
//------------------------------------------------------------------------------
public OnFilterScriptInit()
{
LoadDoors();
return 1;
}
//------------------------------------------------------------------------------
stock LoadDoors()
{
new file[50];
for(new i = 0; i < MAX_DOORS; i++)
{
format(file, sizeof(file), "Doors/%d.ini", i);
if(fexist(file))
{
DoorInfo[i][dX] = dini_Float(file, "Position X");
DoorInfo[i][dY] = dini_Float(file, "Position Y");
DoorInfo[i][dZ] = dini_Float(file, "Position Z");
DoorInfo[i][dEnterX] = dini_Float(file, "Enter X");
DoorInfo[i][dEnterY] = dini_Float(file, "Enter Y");
DoorInfo[i][dEnterZ] = dini_Float(file, "Enter Z");
DoorInfo[i][dEnterA] = dini_Float(file, "Enter Angle");
DoorInfo[i][dEnterInterior] = dini_Int(file, "Interior");
DoorInfo[i][dEnterWorld] = dini_Int(file, "World");
DoorInfo[i][dPickup] = CreatePickup(1318, 1, DoorInfo[i][dX], DoorInfo[i][dY], DoorInfo[i][dZ], 0);
doorid++;
}
}
print(" ");
print(" ");
printf(" LOADED DOORS: %d", doorid);
print(" ");
print(" ");
return 1;
}
//------------------------------------------------------------------------------