Есть у меня мод, огромный корабль набитый доверху всякими ништяками, и плюс лифт во внутреннюю часть, там тоже не скучно, и вот дело в том, что всё это собрано из около 500 объектов, он статичен, придумалось мне научить эту посудину плавать. Проблема 1: Как пользоваться MoveObject для одного объекта я знаю, а если их там около 500? Мне создавать 500 штук new: verhnya_paluba, new: nizhnya_paluba, new:gitara_kayuta и так далее verhnya_paluba=CreateObject? Вариант конечно реальный, авось к 2016 закончу Есть варианты побыстрее? Проблема 2: Координаты. Для каждого объекта на корабле необходимо вычислить координаты, по которым данный объект будет двигаться, но для каждого объекта они свои, если задать одни и те же все объектам, корабль будет "разваливаться" в пути, и трюм и верхняя и нижняя палубы будут следовать к одной точке, в итоге получиться непонятная груда фигни, для каждого объекта нужно вычистить свои координаты, индивидуальную высоту, индивидуальное место остановки у пирса, собственно как это сделать, не гоняя 500 объектов в редакторе и не переписывая координаты каждому? Может быть можно заставить один объект двигаться по координатам, а остальным указать как они должны располагаться относительно его?
Сообщение отредактировал [BGD]John_RUS - Воскресенье, 09.02.2014, 05:09
Даа, я думал над этим, но там нужно тогда высчитывать координаты расположения всех прицепляемых объектов, относительно главного "несущего" объекта, это понятно что не нужно будет копипастить координаты из редактора, но такое высчитывание разности по всем осям отберет еще больше времени
сделай функцию которая высчитывает и аттач в цикле
LifeVegas: vk.com/lvgta - Покори вершины Лас-Вегаса в новом РП проекте. COMING SOON Продаю РП мод: подробнее тут Решаю задачи по техническим дисциплинам, подробнее тут
Я же чайник, это должно выглядеть как, высчитывается разность и результат ставится в переменную? То есть создать порядка 400 переменных? Можно как-то примером, и от таких расчетов в реал таим, игра не грохнется?
[BGD]John_RUS, у тебя, не будет этих расчетов, в реальном времени. Тебе нужно сгенерировать сам код.
[cut=AttachObjectToObject()]objectid ID объекта который вы хотите прикрепить к другому главному объекту. attachtoid ID главного объекта к которому вы хотите прикрепить другой не главный. Float:OffsetX The distance between the main object and the object in the X direction. Float:OffsetY The distance between the main object and the object in the Y direction. Float:OffsetZ The distance between the main object and the object in the Z direction. Float:RotX The X rotation between the object and the main object. Float:RotY The Y rotation between the object and the main object. Float:RotZ The Z rotation between the object and the main object. SyncRotation Selects wheather the rotation should be synched or not.[/cut]
Т.е. берем для примера 2 объекта. 1. Прикрепляемый объект. 2. Главный объект, тот который в последствии будешь двигать. 3. Берем положение обоих объектов по оси, Главный-Прикрепленный. 4. 5. ... 6. Тоже самое, но т.к. градусы у нас по кругу, то либо значение может быть отрицательным(что я полагаю врядли), либо если угол по оси у прикрепленного объекта меньше главного, то расчет 360-Главный+Прикрепленный, а если больше Прикрепленный-Главный. 7. 8. ... 9. синхронизация вращения нужна, ставить 1.
Т.е. делается все банально, из строчек создающих объекты. Если шаришь в каком либо текстовом языке (PHP,Python,etc) или в "регулярных выражениях"(regexp), то просто из самой карты можно сделать. Если нет, то получаешь данные от объектов,считаешь приблизительно как выше, и выводишь в файл с разделителем запятой, вначале строки "AttachObjectToObject(", в конце ");".
где, bX, bY, bZ - углы подчиненных объектов, тогда как aX, aY, aZ - углы ведущего объекта; cX, cY, cZ и есть искомые углы, которые будет устанавливаться в качестве новых углов подчиненных объектов;
Ну, что же касается нового положения в новой системе координат, здесь ещё проще, 7 или 8 класс геометрии поиск координат вектора по двум его точкам: Из координат конца вычитаются координаты начала, так для каждой точки. Вот собственно и все.
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
Fabervox, так в том то и дело, вручную считать это адовый труд, их там слишком много, или есть варианты без знаний php и иже с ними?
Добавлено (06.02.2014, 21:09) --------------------------------------------- И как таки сделать лифт? На статичном корабле он тупо MoveObject по высоте, а на движущемся корабле как сделать так, чтобы лифт всегда держался XY осей корабля, но по Z мог двигаться только по команде игрока? Уже вручную посчитал, десяток основных частей перемещаются, а лифт по команде упорно уходит на место старта корабля =)
[BGD]John_RUS, таймером узнавай текущее положение лифта и поднимай на немного вверх. Чем больше таких движений, тем лифт будет точнее двигаться, но будет бОльшая нагрузка на сервер.
Добавил ламп, горят абы как, точнее лишь те, что ближе всего к игроку, и то чтобы зажглась надо вокруг побегать =) Как сие исправляется? Дело в дальности прорисовки?
Я же чайник, это должно выглядеть как, высчитывается разность и результат ставится в переменную? То есть создать порядка 400 переменных? Можно как-то примером, и от таких расчетов в реал таим, игра не грохнется?
Из координат объекта вычти координаты основания корабля, тем самым найдешь координаты вектора "Корабль-Объект". Координаты вектора и будут параметрами для прикрепления.
Weddew, после запиливания лифта тоже начало тормозить, вернул лестницу...
ЦитатаWeddew ()
Из координат объекта вычти координаты основания корабля, тем самым найдешь координаты вектора "Корабль-Объект". Координаты вектора и будут параметрами для прикрепления.
Это понятно, я этим вручную занимаюсь уже неделю, а как сделать вычитание осей XYZ, относительно мастер объекта, в самом скрипте?
Добавлено (14.02.2014, 13:10) --------------------------------------------- Замучался я его двигать командами из OnPlayerCommandText... Попробовал через GetObjectPos
new Float:x,Float:y,Float:z; GetObjectPos(PartyShip, x, y, z) if( x == -1789.76 && y == 1582.29) && z == 7.00); //Все ошибки на этой строке { MoveObject(PartyShip,-1670.42, 1570.36, 7.0,5); }
Ошибки: error 001: expected token: ";", but found "if" error 029: invalid expression, assumed zero warning 215: expression has no effect error 001: expected token: ";", but found ")" fatal error 107: too many error messages on one line
Нагуглил некую функцию ObjectToPoint, но из примеров нашел только ворота на одном таймере, как его заставить плавать по координатам вообще без чьего-то участия?
Сообщение отредактировал [BGD]John_RUS - Пятница, 14.02.2014, 13:37