[HELP] Dialog Bug.
#1

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.

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;
}

//------------------------------------------------------------------------------
What's wrong here?
Reply
#2

What exactly doesn't work and when ? Everything else works fine until you use /editdoor?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)