Показано с 1 по 6 из 6

Тема: [ALL]Система объектов с возможностью создания с сервера (MySQL R39-2)

  1. #1
    Пользователь
    Регистрация
    23.02.2015
    Возраст
    26
    Сообщений
    6
    Репутация: 2

    Звание: пока не определено

    [ALL]Система объектов с возможностью создания с сервера (MySQL R39-2)

    Приветствую всех. Писал данную систему около года назад и совсем недавно наткнулся на нее среди своих файлов, решил перевести на MySQL и выложить, вдруг кому-то пригодится. Версия MySQL R39-2, для создания объектов используется streamer от incognito.
    Начнем: ко всем define
    #define MAX_GATES           50  //максимальное количество объектов


    Далее создадим enum

    enum gInfo
    {
    gID,
    Float: gClosedPos[6],
    Float: gOpenPos[3],
    gFaction,
    gObj,
    gState
    };
    new GatesInfo[MAX_GATES][gInfo];
    new gCount;


    Дальше добавим стоки, отвечающие за перемещение объектов, удаление и тд.
    gSave(i)
    {
    new buff[500];
    if(GatesInfo[i][gClosedPos][0]!=0.0)
    {
    mysql_format(connectionHandle,buff,sizeof(buff),"UPDATE `gates` SET `Obj` = '%d',`Faction` = '%d', `State` = '%d', `ClosedPos1` = '%f', `ClosedPos2` = '%f', `ClosedPos3` = '%f',`ClosedPos4` = '%f', `ClosedPos5` = '%f', `ClosedPos6` = '%f', `OpenPos1` = '%f', `OpenPos2` = '%f', `OpenPos3` = '%f' WHERE `ID` = '%i'",
    GatesInfo[i][gObj],GatesInfo[i][gFaction],GatesInfo[i][gState],GatesInfo[i][gClosedPos][0],GatesInfo[i][gClosedPos][1],GatesInfo[i][gClosedPos][2],GatesInfo[i][gClosedPos][3],
    GatesInfo[i][gClosedPos][4],GatesInfo[i][gClosedPos][5],GatesInfo[i][gOpenPos][0],GatesInfo[i][gOpenPos][1],GatesInfo[i][gOpenPos][2],i);
    mysql_tquery(connectionHandle, buff,"","");
    }

    }

    public gLoad()
    {
    new rows, fields;
    cache_get_data(rows,fields,connectionHandle);
    if (rows)
    {
    for(new i=0; i<rows; i++)
    {
    GatesInfo[i][gID] = cache_get_field_content_int(i, "ID");
    GatesInfo[i][gObj] = cache_get_field_content_int(i, "Obj");
    GatesInfo[i][gFaction] = cache_get_field_content_int(i, "Faction");
    GatesInfo[i][gState] = cache_get_field_content_int(i, "State");
    GatesInfo[i][gOpenPos][0] = cache_get_field_content_float(i, "OpenPos1");
    GatesInfo[i][gOpenPos][1] = cache_get_field_content_float(i, "OpenPos2");
    GatesInfo[i][gOpenPos][2] = cache_get_field_content_float(i, "OpenPos3");
    GatesInfo[i][gClosedPos][0] = cache_get_field_content_float(i, "ClosedPos1");
    GatesInfo[i][gClosedPos][1] = cache_get_field_content_float(i, "ClosedPos2");
    GatesInfo[i][gClosedPos][2] = cache_get_field_content_float(i, "ClosedPos3");
    GatesInfo[i][gClosedPos][3] = cache_get_field_content_float(i, "ClosedPos4");
    GatesInfo[i][gClosedPos][4] = cache_get_field_content_float(i, "ClosedPos5");
    GatesInfo[i][gClosedPos][5] = cache_get_field_content_float(i, "ClosedPos6");
    GatesInfo[i][gID] = CreateDynamicObject(GatesInfo[i][gObj],GatesInfo[i][gClosedPos][0],GatesInfo[i][gClosedPos][1],GatesInfo[i][gClosedPos][2],
    GatesInfo[i][gClosedPos][3], GatesInfo[i][gClosedPos][4],GatesInfo[i][gClosedPos][5],-1,-1,-1, 400);
    GatesInfo[i][gState] = 0;
    gCount++;
    }
    printf("Загружено объектов: %d",rows);
    }
    return 1;
    }

    gCreate(type,playerid)
    {
    new Float: x, Float: y, Float: z, msg[25];
    GetPlayerPos(playerid,x,y,z);
    GatesInfo[gCount][gObj] = type;
    GatesInfo[gCount][gID] = CreateDynamicObject(type,x,y,z,0.0,0.0,0.0,-1,-1,-1,400.0);
    new query[100];
    mysql_format(connectionHandle,query,sizeof(query),"INSERT INTO `gates` (`Faction`, `Obj`) VALUES ('%d','%d')",GatesInfo[gCount][gFaction], GatesInfo[gCount][gObj]);
    mysql_tquery(connectionHandle,query, "", "");
    format(msg,25,"Bорота созданы, id: %i",gCount);
    SendClientMessage(playerid,clYellow,msg);
    gCount++;
    }

    gDestroy(id,playerid)
    {
    if(GatesInfo[id][gID]) DestroyDynamicObject(GatesInfo[id][gID]);
    SendClientMessage(playerid,clYellow,"Удалено");
    gSave(id);
    }

    gMove(id,Float: x, Float: y, Float: z)
    {
    new Float: px,Float: py,Float: pz;
    GetDynamicObjectPos(GatesInfo[id][gID],px,py,pz);
    StopDynamicObject(GatesInfo[id][gID]);
    MoveDynamicObject(GatesInfo[id][gID],px+x,py+y,pz+z,6.0);
    }

    gRotate(id,Float: x,Float: y,Float: z)
    {
    new Float: px,Float: py,Float: pz;
    GetDynamicObjectRot(GatesInfo[id][gID],px,py,pz);
    StopDynamicObject(GatesInfo[id][gID]);
    SetDynamicObjectRot(GatesInfo[id][gID],px+x,py+y,pz+z);
    }

    GetNearestGates(playerid, Float: maxd = 4.0,all=0){
    for(new i=0; i<MAX_GATES; i++){
    if(PlayerToPoint(maxd,playerid,GatesInfo[i][gClosedPos][0],GatesInfo[i][gClosedPos][1],GatesInfo[i][gClosedPos][2])) {
    if(GatesInfo[i][gOpenPos][2]!=0.0 || all) return i;
    }
    }
    return -1;
    }


    ну и наконец добавляем команды(zcmd и ему подобные командные процессоры+sscanf2)

    //Информация о воротах
    CMD:ginfo(playerid,params[])
    {
    restricted(5);
    new id = GetNearestGates(playerid,12.0,1);
    if(id<0) return SendClientMessage(playerid,clDarkRed,"Поблизости нет никаких ворот");
    new msg[30];
    format(msg,30,"ID: %i, Фракция: %i",id,GatesInfo[id][gFaction]);
    SendClientMessage(playerid,clYellow,msg);
    return true;
    }

    //передвинуть объект
    CMD:gm(playerid,params[])
    {
    restricted(5);
    if(sscanf(params,"dddd",params[0],params[1],params[2],params[3])) return send(playerid,"Использование: /gm [id] {x} {y} {z}");
    gMove(params[0],params[1],params[2],params[3]);
    return true;
    }

    //повернуть объект
    CMD:gr(playerid,params[])
    {
    restricted(5);
    if(sscanf(params,"dddd",params[0],params[1],params[2],params[3])) return send(playerid,"Использование: /gr [id] {x} {y} {z}");
    gRotate(params[0],params[1],params[2],params[3]);
    return true;
    }

    //создать объект
    CMD:gc(playerid,params[])
    {
    restricted(5);
    if(sscanf(params,"d",params[0])) return send(playerid,"Используйте:/gc [id]");
    gCreate(params[0],playerid);
    return true;
    }

    //удалить объект
    CMD:gcd(playerid,params[])
    {
    restricted(5);
    if(sscanf(params,"d",params[0])) return send(playerid,"Используйте:/gcd [id]");
    gDestroy(params[0],playerid);
    new query[50];
    mysql_format(connectionHandle,query,sizeof(query),"DELETE FROM `gates` WHERE `ID` = '%d'",params[0]);
    mysql_tquery(connectionHandle,query, "", "");
    gSave(params[0]);
    return true;
    }

    //привязать объект к фракции
    CMD:gcf(playerid,params[])
    {
    restricted(5);
    if(sscanf(params,"dd",params[0],params[1])) return send(playerid,"Используйте:/gcf [id] [фракция]");
    GatesInfo[params[0]][gFaction] = params[1];
    SendClientMessage(playerid,clYellow,"Информация обновлена");
    gSave(params[0]);
    return true;
    }

    //сохранить позицию закрытых ворот
    CMD:gsc(playerid,params[])
    {
    restricted(5);
    if(sscanf(params,"d",params[0])) return send(playerid,"Используйте:/gsc [id]");
    GetDynamicObjectPos(GatesInfo[params[0]][gID],GatesInfo[params[0]][gClosedPos][0],GatesInfo[params[0]][gClosedPos][1],GatesInfo[params[0]][gClosedPos][2]);
    GetDynamicObjectRot(GatesInfo[params[0]][gID],GatesInfo[params[0]][gClosedPos][3],GatesInfo[params[0]][gClosedPos][4],GatesInfo[params[0]][gClosedPos][5]);
    SendClientMessage(playerid,clYellow,"Позиция закрытых ворот сохранена");
    gSave(params[0]);
    return true;
    }

    //сохранить позицию открытых ворот
    CMD:gso(playerid,params[])
    {
    restricted(5);
    if(sscanf(params,"d",params[0])) return send(playerid,"Используйте:/gso [id]");
    GetDynamicObjectPos(GatesInfo[params[0]][gID],GatesInfo[params[0]][gOpenPos][0],GatesInfo[params[0]][gOpenPos][1],GatesInfo[params[0]][gOpenPos][2]);
    SendClientMessage(playerid,clYellow,"Позиция открытых ворот сохранена");
    gSave(params[0]);
    return true;
    }


    Ну вот и все, осталось только создать таблицу gates следующего типа



    connectionHandle - это ваше mysql подключение, так что замените на свое

    Предполагалось использовать как систему динамических ворот, с возможностью привязки к фракции и к дому, но немного не допилил
    Жду вашей критики

  2. #2
    Проверенный
    Регистрация
    01.05.2011
    Адрес
    St.Petersburg
    Сообщений
    1,968
    Репутация: 178

    Звание: - весьма и весьма положительная личность

    Re: [ALL]Система объектов с возможностью создания с сервера (MySQL R39-2)

    Мне кажется это работать будет криво....

  3. #3
    Пользователь
    Регистрация
    23.02.2015
    Возраст
    26
    Сообщений
    6
    Репутация: 2

    Звание: пока не определено

    Re: [ALL]Система объектов с возможностью создания с сервера (MySQL R39-2)

    Bob_Marley, подобная система была еще в моде mafia wars, и зарекомендовала себя крайне хорошо, проводились тесты данной системы - нареканий пока нет

  4. #4
    Пользователь Аватар для IIIaJLyH
    Регистрация
    08.10.2014
    Возраст
    29
    Сообщений
    75
    Репутация: 1

    Звание: пока не определено

    Re: [ALL]Система объектов с возможностью создания с сервера (MySQL R39-2)

    И для чего? Можно просто в моде создать ворота, зачем все это через БД делать?

  5. #5
    Активный пользователь Аватар для Resonance
    Регистрация
    26.10.2010
    Адрес
    Санкт-Петербург
    Возраст
    30
    Сообщений
    723
    Репутация: 71

    Звание: скоро придёт к известности

    Re: [ALL]Система объектов с возможностью создания с сервера (MySQL R39-2)

    Цитата Сообщение от IIIaJLyH Посмотреть сообщение
    И для чего? Можно просто в моде создать ворота, зачем все это через БД делать?
    Причем тут ворота? Система в целом подразумевает создание любых объектов, их сохранение и загрузка. Самое главное ТС расписал и привел пример.
    Since 2009


  6. #6
    Пользователь
    Регистрация
    23.02.2015
    Возраст
    26
    Сообщений
    6
    Репутация: 2

    Звание: пока не определено

    Re: [ALL]Система объектов с возможностью создания с сервера (MySQL R39-2)

    Цитата Сообщение от IIIaJLyH Посмотреть сообщение
    И для чего? Можно просто в моде создать ворота, зачем все это через БД делать?
    ну это уже выбор каждого, кому-то например удобнее так объекты расставлять

Похожие темы

  1. [Набор] Ищу команду для создания рп сервера +16.
    от Marshall в разделе Вакансии
    Ответов: 2
    Последнее сообщение: 06.07.2014, 19:00
  2. [Ищу] Людей для создания MTA DayZ сервера.
    от Rapido в разделе Вакансии
    Ответов: 0
    Последнее сообщение: 18.07.2013, 03:49
  3. Ответов: 3
    Последнее сообщение: 05.07.2013, 12:40
  4. Ищу человека для совместного создания сервера SA-MP
    от Sokfor в разделе Другие темы по Pawn
    Ответов: 1
    Последнее сообщение: 03.07.2013, 17:37

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •