Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 0
hekut144

Изменение класснейма в базе данных на основе серверного скрипта

Подскажите пожалуйста как реализовать подмену обьекта в базе данных и игре
исполнять должен сервер (цикл и таймаут сделал) а вот как выделить все объекты описанные в масиве на карте и поменять на другие

Edited by hekut144 (see edit history)

Share this post


Link to post
Share on other sites

24 answers to this question

Recommended Posts

  • 0

Выделить - выделил с помощью nearestObjects

Share this post


Link to post
Share on other sites



  • 0

Реализовал смену объекта лишь сессинно, без сохранения в дата базу, не могу понять как сохранить данные идущие кучей, если у меня так скажем выбрано порядка 10 или более объектов одновременно, как мне всем разово поменять класснейм в базе данных?

Share this post


Link to post
Share on other sites
  • 0
И как собстно?

private ["_ps","_dr","_vh"];
 
_ps = getPos _x;
_dr = getDir _x;
deleteVehicle _x;
_vh = "object_2" createVehicle _ps;
_vh setDir _dr;
 
//слать _x как обычный обьект? на сохрание\удаление?
 
} forEach (nearestObjects [[0,0,0], ["object_1"], 50000]);
Edited by hekut144 (see edit history)

Share this post


Link to post
Share on other sites
  • 0

цикл по объектам

 если объект надо менять -

 узнаем на что меняем

 получаем данные по текущему объекту -

 позиция

 угол

 вектора

 инвентарь

 удаляем объект

 создаем новый объект

......

 

или если надо только в БД перегнать объекты то это делается обычным запросом в sql

Share this post


Link to post
Share on other sites
  • 0

Так проблема в том там объектов уйма он может выделить порядка 10-20 объектов в переменную а как их сохранить/удалить чёрт его знает (в дб имеется ввиду) один объект записать удалить я могу но как обработать массив объектов?...

Edited by hekut144 (see edit history)

Share this post


Link to post
Share on other sites
  • 0

 

Так проблема в том там объектов уйма он может выделить порядка 10-20 объектов в переменную а как их сохранить/удалить чёрт его знает (в дб имеется ввиду) один объект записать удалить я могу но как обработать массив объектов?...

 

заканчивай с тяжелыми наркотиками)

Share this post


Link to post
Share on other sites
  • 0

Какие в баню наркотики

 

        {
        private ["_ps","_dr","_vh"];
        _ps = getPos _x;
        _dr = getDir _x;
        deleteVehicle _x;
        _vh = "object_2" createVehicle _ps;
        _vh setDir _dr;
        } forEach (nearestObjects [[0,0,0], ["object_1"], 50000]);

Вот допустим часть кода, тут мы ищем класснейм вехайла object_1 в радиусе 50000 от центра 0,0,0 находит он допустим 100 объектов в игре, запоминаем координаты и поворот, удаляем старые объекты, ставим новые object_2 используя координаты и поворот от первого, но все это происходит на основе сессии (до рестарта) в базе ведь данные не меняются, так вот я понять не могу как мне эти объекты сохранять\удалять, проблема лишь в том что их куча... 

Edited by hekut144 (see edit history)

Share this post


Link to post
Share on other sites
  • 0

Или вот так вот сделать, верно будет?

 

        private ["_object_1","_ps","_dr","_vh","_objectID","_objectUID"];
        _object_1 = nearestObjects [[0,0,0], ["object_1"], 50000];
        {
        _ps = getPos _x;
        _dr = getDir _x;
        deleteVehicle _x;
        _vh = "object_2" createVehicle _ps;
        _vh setDir _dr;
        _objectID = _object_1 getVariable["ObjectID","0"];
        _objectUID = _object_1 getVariable["ObjectUID","0"];
        [_objectID,_objectUID] call server_deleteObj;
        } forEach _object_1;
 


Нет не верно, т.к. он будет пытаться узнать данные массива _object_1, а не единичного обьекта         
        _objectID = _object_1 getVariable["ObjectID","0"];

        _objectUID = _object_1 getVariable["ObjectUID","0"];

Share this post


Link to post
Share on other sites
  • 0

Во:

        {
        private ["_ps","_dr","_vh","_objectID","_objectUID"];      
        _ps = getPos _x;
        _dr = getDir _x;
        _objectID = _x getVariable["ObjectID","0"];
        _objectUID = _x getVariable["ObjectUID","0"];
        deleteVehicle _x;
        [_objectID,_objectUID] call server_deleteObj;
        _vh = "object_2" createVehicle _ps;
        _vh setDir _dr;
        } forEach (nearestObjects [[0,0,0], ["object_1"], 50000]);

Share this post


Link to post
Share on other sites
  • 0

Удаление работает, теперь как-то нужно создание (запись) сделать

Share this post


Link to post
Share on other sites
  • 0

Удаление работает, теперь как-то нужно создание (запись) сделать

Разберись сначала, как правильно в эпоче создавать объект, чтоб он попадал в БД.

Ото ты интересный - создаешь объект(при чем скорее всего еще и в миссии), армовским способом(что верно), и хочешь чтоб он мифическим образом попал в БД)))) - а доп. параметры сообщить серверу? а назначить ИД, а вызвать скрипт записи?

 

Открой скрипт стройки, или спавна техники при покупке.

Разберись с доп параметрами, которые передаются при создании объекта, и будет тебе счастИе)

P.S. - ИД объектам не должен быть нулем. ... в общем посмотри повнимательней скрипты эпохи.

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites
  • 0

Все слова мои исковеркали и переврали, писал что сделал на сессионо и не писал что должно что-то попасть в базу, описал что сделал удаление (в базе), пытаюсь сделать сохранение, не получается (естесно смотрел как сделана стройка) часть скрипта:

    _object_1 = nearestObject [player, "object_1"];    
    _ps = getPos _object_1;
    _dr = getDir _object_1;
    _objectID = _object_1 getVariable["ObjectID","0"];
    _objectUID = _object_1 getVariable["ObjectUID","0"];
    deleteVehicle _object_1;
    [_objectID,_objectUID] call server_deleteObj;
    _vh = "object_2" createVehicle _ps;
    _vh setDir _dr;

    _classname = object_2;
    _vh setVariable ["CharacterID",dayz_characterID,true];
    
    PVDZE_obj_Publish = [dayz_characterID,_vh,[_dr,_ps],_classname];
    publicVariableServer "PVDZE_obj_Publish";

1-ый удаляется и в сессии и в дб, 2-ой создается в сессии но в дб не пишится

Edited by hekut144 (see edit history)

Share this post


Link to post
Share on other sites
  • 0

Последний вопрос, есть обьект, в таргет взять нельзя, выделил его 

 
_playerPos = getPosATL player;
_myObject = count nearestObjects [_playerPos, ["object_3"], 5] > 0;
 
делаю условия для создания действия 

if ( _myObject ) then {
 
Только проблема в том что nearestObjects - массив, а как мне взять один любой объект для работы с ним?
Edited by hekut144 (see edit history)

Share this post


Link to post
Share on other sites
  • 0

 

Последний вопрос, есть обьект, в таргет взять нельзя, выделил его 

 
_playerPos = getPosATL player;
_myObject = count nearestObjects [_playerPos, ["object_3"], 5] > 0;
 
делаю условия для создания действия 

 

if ( _myObject ) then {

 

Только проблема в том что nearestObjects - массив, а как мне взять один любой объект для работы с ним?

Магии не существует -

1. перебрать массив и найти, то что нужно.

2. другой вариант: - если массив > 0(а у тебя по условию только так) -

_myObject = _myObject select 0; // Выбрать самый верхний(первый) элемент массива.

Share this post


Link to post
Share on other sites
  • 0

Как раз только что нашел в скрипте удалении камуфляжной сети))

 

А вот там дальше идет:
 

_nearByObjects = nearestObjects [player,_objects,_range];
 
if (count _nearByObjects == 0) exitWith {
    cutText [(localize _error), "PLAIN DOWN"];
};
 
_targetObject = _nearByObjects select 0;
if (!isNull _targetObject && _canDo) then {
    [0,1,2,_targetObject] spawn player_removeObject;
} else {
    cutText [(localize _error), "PLAIN DOWN"];
};

Красное это есть что?
Edited by hekut144 (see edit history)

Share this post


Link to post
Share on other sites
  • 0

 

Как раз только что нашел в скрипте удалении камуфляжной сети))

 

А вот там дальше идет:

 

_nearByObjects = nearestObjects [player,_objects,_range];
 
if (count _nearByObjects == 0) exitWith {
    cutText [(localize _error), "PLAIN DOWN"];
};
 
_targetObject = _nearByObjects select 0;
if (!isNull _targetObject && _canDo) then {
    [0,1,2,_targetObject] spawn player_removeObject;
} else {
    cutText [(localize _error), "PLAIN DOWN"];
};

 

Красное это есть что?

а открыть в блокноте все файлы и задать поиск на эту функцию не?

... точно не помню, но вроде удаление с логгированием - мол - вася удалил то то и то то. - при строительстве в рпт падает.

Share this post


Link to post
Share on other sites
  • 0

Вообщем спасибо, там эти функции друг на друга ссылаются

Share this post


Link to post
Share on other sites
  • 0

select с count отказывается работать, попробую в условие вынести count, еще одна бредовая мысль))

Edited by hekut144 (see edit history)

Share this post


Link to post
Share on other sites
  • 0

Чет у меня полный ступор:
 

_object_1 = nearestObjects [_playerPos, ["object_1"], 5];
_object_1_selected = _object_1 select 0;
    
if ( not isNull _object_1_selected ) then {

доходим до условия и все кирдык скрипту
Edited by hekut144 (see edit history)

Share this post


Link to post
Share on other sites
  • 0

Не знаю как еще составить условие, вроде написал проверку пустоты в _object_1_selected, not isNull _object_1_selected но когда доходит до этого момента чтение скрипта, скрипт портится

Share this post


Link to post
Share on other sites
  • 0

Исправил, но проблема об удалении из базы почему-то осталась

Share this post


Link to post
Share on other sites
  • 0

Все починил, исп. в клиентском скрипте удаление от сервера

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By 123new
      Такого плана вопрос по моддингу на 1.0.
      В моде есть, например, класс:
      class ExpansionGlobalChat с кучей функций
      создаю свой мод, в котором указываю
      modded class ExpansionGlobalChat { override void GlobalChat(CallType type, ref ParamsReadContext ctx, ref PlayerIdentity sender, ref Object target) { super.GlobalChat(type, ctx, sender, target); Param2< string, string > data; if ( !ctx.Read( data ) ) return; if( type == CallType.Server ) { string name = sender.GetName(); string steamid = sender.GetPlainId(); string bisid = sender.GetId(); string idtable = sender.GetPlayerId().ToString(); string log_date_time = ExpansionGetDateTime(); string format = "[" + log_date_time + "] " + "[Chat]" + " " + name + "(steamid=" + steamid + ", bisid=" + bisid + ") " + data.param2; Print(format); } } } и пакую, запускаю сервер. Пишет как на скрине.

      Если modded убираю - пишет что класс уже используется. Что я не так делаю? Как делать правильно? не допираю.
    • By DrTauren
      Собственно, из названия понятно, что в этом гайде мы научимся отключать уровень стамины игрока, отключать усталость

      Инструкция:
      1) Находим файл dta/scripts.pbo и распаковываем его при помощи PBO Manager и копируем только что распакованную папку scripts в корневую папку сервера
      2) Открываем файл scripts/3_Game/constants.c и изменяем этот код под себя:
      const int STAMINA_DRAIN_STANDING_SPRINT_PER_SEC = 5; //в единицах (сколько единиц выносливости отбавляется при ускорении) const int STAMINA_DRAIN_CROUCHED_SPRINT_PER_SEC = 1; //в единицах (сколько единиц выносливости отбавляется при ускорении на корточках) const int STAMINA_DRAIN_PRONE_SPRINT_PER_SEC = 3; //в единицах (сколько единиц выносливости отбавляется при ускорении лёжа) const float STAMINA_DRAIN_HOLD_BREATH = 0.2; //в единицах (сколько единиц выносливости отбавляется при задержке дыхания) const int STAMINA_DRAIN_JUMP = 20; //в единицах (сколько единиц выносливости отбавляется при прыжке) const int STAMINA_DRAIN_MELEE_LIGHT = 5; //в единицах (сколько единиц выносливости отбавляется при лёгком ударе в ближнем бою) const float STAMINA_DRAIN_MELEE_HEAVY = 20; //в единицах (сколько единиц выносливости отбавляется при сильном ударе в ближнем бою) const int STAMINA_DRAIN_MELEE_EVADE = 8; //в единицах (сколько единиц выносливости отбавляется при уклонении) Таким образом мы можем отключить усталость игрока, стамина всегда будет максимальная. Для этого нужно всего лишь установить все параметры на значение 0
       
    • By Alex39
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
       
      Server DayZ Standalone 0.61 / 138602 No Steam + База данных
      И так, перед вами сервер стандалоне версии 0.61, слитые в инет, конечно сервер далеко не идеален, но и все же он работает, лут спавнится, зомби, работают сохранения, на данный момент пока такая наработка, дальше будем усовершенствовать и улучшать.
       
      Качаем архив серверных файлов  https://yadi.sk/d/eVHThn053HDgGU
       
       
       
      В корне сервера находим файл  !Start_server_parameters.ini и открываем блокнотом, правим ссылки к своему серверу
      Target = F:\DayZ62_Server\DayZServerPatched_x64.exe StartIn = F:\DayZ62_Server CommandLine = -port=2302 -config=SE1\serverDZ.cfg -cfg=SE1\basicDZ.cfg -profiles=SE1 -name=SE1 -loadMissionToMemory -autoinit -maxMem=4096 -cpuCount=4 -exthreads=0 -noPause -noSound -enableHT -doLogs SteamClientPath = F:\DayZ62_Server\SmartSteamEmu\SmartSteamEmu.dll SteamClientPath64 = F:\DayZ62_Server\SmartSteamEmu\SmartSteamEmu64.dll  
      Идем в корень сервера, папка Hive_61\  - Это база данных и запускаем батник run.bat
      Он работает на внутреннем IP  и порт 8080, если у вас занят этот порт, то освобождаем его, иначе база данных не будет работать.
       
      Блокируем порты в брандмауэре исходящие:
      2324
      29910
      2305
      8181
      9660
      2354
      и IP
      109.123.198.3
       
      Далее в корне сервера открываем блокнотом батник _crashbase1.bat 
      start /wait DayZServerPatched_x64.exe -port=2302 -config=SE1\serverDZ.cfg -cfg=SE1\basicDZ.cfg -profiles=SE1 -name=SE1 -loadMissionToMemory -autoinit -maxMem=8192 -cpuCount=4 -exthreads=7 -noPause -noSound -enableHT Правим порт на котором будет расположен сервер, и на него будете входить, а так же правим память под свой компьютер , по умолчанию стоит 8 гигов и 4 ядра  -maxMem=8192 -cpuCount=4
      Настройки сделали, запускаем батник  !Start_server.cmd
      Ждем некоторое время, сервер запускается, если не запускается по какой то причине, смотрим консоль, там будет написано, или логи, пишите, будем думать
       P.S.  пока что ни какие настройки не стоить менять, если Вы не знаете что это и для чего, по ходу , если кому интересно, будем раскладывать по полочкам.
       

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • By Кузьмич
      Доброго времени суток уважаемые форумчане. Поставил наконец сервер Arma 3 Exile на карте Намальск на пиратке, но вот сразу же возникли косяки в работе сервера.
      1. При входе на сервер у некоторых из моих знакомых возникает ошибка "вас изгнали из игры" (Steam authentication failed)
      2. Когда играешь на сервере, при каждом релоге происходит полный дюп перса со всем его содержимым.
       
      Облазил уже огромное колличество форумов но почему то так и не смог найти как исправить эти косяки. Дюп то фиг с ним, а вот первая ошибка... Надеюсь поможете исправить.
    • By KILLka
      Здравствуйте. Возможно кто-то сталкивался. Проблема следующая - bec теряет связь с сервером (exile) уже после коннекта к нему. Может потерять связь через минуту-две, может через 4-5, не более. Как это происходит - запускается сервер, rcon login проходит, бек работает и через пару минут получаю в логах 
      10:26:36 : Rcon client logging in 10:26:36 : RCon admin #0 (127.0.0.1:64977) logged in 10:29:19 : No Valid response. Trying to reconnect.! 10:29:23 : No Valid response. Trying to reconnect.! 10:29:27 : No Valid response. Trying to reconnect.! 10:29:30 : RCon admin #0: (Global) Unlocking server. 10:29:31 : Lost Connection! 10:29:31 : Closing socket & exiting! Ip адрес прописывался как локальный, так и внешний. Порт, на котором работает battleye открыт. Пути указаны, сам battleye работает. Может кто сталкивался с данной проблемой, что можно сделать и как решить?
  • Our picks

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.