Evolv Posted February 4, 2015 Share Posted February 4, 2015 Есть ли какой-нибудь скрипт, добавляющий возможность изменения позиции объекта? Что-то типа самповского Link to comment
Kenix Posted February 4, 2015 Share Posted February 4, 2015 setElementPosition Тебя никто не запрещает сделать свой редактор. dxDrawText dxDrawLine3D dxDrawImage Link to comment
Eweest Posted February 7, 2015 Share Posted February 7, 2015 -- Simple Police-Lights by MuLTi! p_lights = {} p_timer = {} p_lvar = {} p_pvar = {} p_lvar2 = {} p_lvar3 = {} p_lvar4 = {} function toggleLights(thePlayer, cmd, level) local level = tonumber(level) if not(level) then outputChatBox("#FF0000 Please select a level![1-2]", thePlayer, 255, 255, 255, true) return end if(level < 1) or (level > 2) then outputChatBox("#FF0000 Please select a level between 1-2!", thePlayer, 255, 255, 255, true) return end local veh = getPedOccupiedVehicle(thePlayer) local id = getElementModel(veh) if (id == 579) or (id == 400) or (id == 404) or (id == 489) or (id == 505) or (id == 479) or (id == 442) or (id == 458) or (id == 602) or (id == 496) or (id == 401) or (id == 518) or (id == 527) or (id == 589) or (id == 419) or (id == 533) or (id == 526) or (id == 474)or (id == 545) or (id == 517) or (id == 410) or (id == 600) or (id == 436) or (id == 580) or (id == 439) or (id == 549) or (id == 491) or (id == 491) or (id == 507) or (id == 585) or (id == 587) or (id == 466) or (id == 492) or (id == 546) or (id == 551) or (id == 516) or (id == 467) or (id == 426) or (id == 547) or (id == 405) or (id == 409) or (id == 550) or (id == 566) or (id == 540) or (id == 421) or (id == 529) or (id == 402) or (id == 542) or (id == 603) or (id == 475) or (id == 562)or (id == 565) or (id == 559) or (id == 561) or (id == 560) or (id == 558) or (id == 429) or (id == 541) or (id == 415) or (id == 480) or (id == 477) or (id == 582) or (id == 579) or (id == 490) or (id == 455) or (id == 516) then if(level == 1) then if(p_lights[veh] == 0) or(p_lights[veh] == nil) then p_pvar[veh] = 1 p_lights[veh] = 1 outputChatBox("#FFFFFFPolice-Lights #00FF00on.", thePlayer, 0, 200, 100, true) setVehicleOverrideLights ( veh, 2 ) p_timer[veh] = setTimer( function() if(p_lvar[veh] == 0) or (p_lvar[veh] == nil) then p_lvar[veh] = 1 setVehicleLightState ( veh, 1, 0) setVehicleLightState ( veh, 2, 0) setVehicleLightState ( veh, 0, 1) setVehicleLightState ( veh, 3, 1) setVehicleHeadLightColor(veh, 0, 0, 255) else setVehicleLightState ( veh, 3, 0) setVehicleLightState ( veh, 0, 0) setVehicleLightState ( veh, 1, 1) setVehicleLightState ( veh, 2, 1) setVehicleHeadLightColor(veh, 255, 0, 0) p_lvar[veh] = 0 end end, 500, 0) else p_lights[veh] = 0 outputChatBox("#FFFFFFPolice-Lights #00FF00off.", thePlayer, 0, 200, 100, true) killTimer(p_timer[veh]) setVehicleLightState ( veh, 0, 0) setVehicleLightState ( veh, 1, 0) setVehicleLightState ( veh, 2, 0) setVehicleLightState ( veh, 3, 0) setVehicleHeadLightColor(veh, 255, 255, 255) setVehicleOverrideLights ( veh, 1 ) end elseif(level == 2) then if(p_lights[veh] == 0) or(p_lights[veh] == nil) then p_lights[veh] = 1 outputChatBox("#FFFFFFPolice-Lights #00FF00on.", thePlayer, 0, 200, 100, true) setVehicleOverrideLights ( veh, 2 ) p_timer[veh] = setTimer( function() if(p_lvar3[veh] == 4) then setTimer(function() p_lvar3[veh] = 0 end, 1000, 1) setTimer( function() if(p_lvar4[veh] == 1)then p_lvar4[veh] = 0 -- 0 = vorne links 1 = vorne rechts 2 = hinten links 3 = hinten rechts setVehicleLightState ( veh, 1, 0) setVehicleLightState ( veh, 2, 0) setVehicleLightState ( veh, 0, 1) setVehicleLightState ( veh, 3, 1) setVehicleHeadLightColor(veh, 77, 77, 255) else setVehicleLightState ( veh, 3, 0) setVehicleLightState ( veh, 0, 0) setVehicleLightState ( veh, 1, 1) setVehicleLightState ( veh, 2, 1) setVehicleHeadLightColor(veh, 255, 77, 77) p_lvar4[veh] = 1 end end, 50, 5) return end if(p_lvar2[veh] == 0) or (p_lvar2[veh] == nil) then p_lvar2[veh] = 1 -- 0 = vorne links 1 = vorne rechts 2 = hinten links 3 = hinten rechts setVehicleLightState ( veh, 1, 0) setVehicleLightState ( veh, 2, 0) setVehicleLightState ( veh, 0, 1) setVehicleLightState ( veh, 3, 1) setVehicleHeadLightColor(veh, 0, 0, 255) else setVehicleLightState ( veh, 3, 0) setVehicleLightState ( veh, 0, 0) setVehicleLightState ( veh, 1, 1) setVehicleLightState ( veh, 2, 1) setVehicleHeadLightColor(veh, 255, 0, 0) p_lvar2[veh] = 0 end if(p_lvar3[veh] == nil) then p_lvar3[veh] = 0 end p_lvar3[veh] = (p_lvar3[veh]+1) end, 500, 0) else p_lights[veh] = 0 outputChatBox("#FFFFFFPolice-Lights #00FF00off.", thePlayer, 0, 200, 100, true) killTimer(p_timer[veh]) setVehicleLightState ( veh, 0, 0) setVehicleLightState ( veh, 1, 0) setVehicleLightState ( veh, 2, 0) setVehicleLightState ( veh, 3, 0) setVehicleHeadLightColor(veh, 255, 255, 255) setVehicleOverrideLights ( veh, 1 ) end end end end addCommandHandler("pl", toggleLights) addEventHandler ( "onVehicleExplode", getRootElement(), function() if(p_lights[source] == 1) then killTimer(p_timer[source]) end end ) Link to comment
Evolv Posted February 8, 2015 Share Posted February 8, 2015 -- Simple Police-Lights by MuLTi! p_lights = {} p_timer = {} p_lvar = {} p_pvar = {} p_lvar2 = {} p_lvar3 = {} p_lvar4 = {} function toggleLights(thePlayer, cmd, level) local level = tonumber(level) if not(level) then outputChatBox("#FF0000 Please select a level![1-2]", thePlayer, 255, 255, 255, true) return end if(level < 1) or (level > 2) then outputChatBox("#FF0000 Please select a level between 1-2!", thePlayer, 255, 255, 255, true) return end local veh = getPedOccupiedVehicle(thePlayer) local id = getElementModel(veh) if (id == 579) or (id == 400) or (id == 404) or (id == 489) or (id == 505) or (id == 479) or (id == 442) or (id == 458) or (id == 602) or (id == 496) or (id == 401) or (id == 518) or (id == 527) or (id == 589) or (id == 419) or (id == 533) or (id == 526) or (id == 474)or (id == 545) or (id == 517) or (id == 410) or (id == 600) or (id == 436) or (id == 580) or (id == 439) or (id == 549) or (id == 491) or (id == 491) or (id == 507) or (id == 585) or (id == 587) or (id == 466) or (id == 492) or (id == 546) or (id == 551) or (id == 516) or (id == 467) or (id == 426) or (id == 547) or (id == 405) or (id == 409) or (id == 550) or (id == 566) or (id == 540) or (id == 421) or (id == 529) or (id == 402) or (id == 542) or (id == 603) or (id == 475) or (id == 562)or (id == 565) or (id == 559) or (id == 561) or (id == 560) or (id == 558) or (id == 429) or (id == 541) or (id == 415) or (id == 480) or (id == 477) or (id == 582) or (id == 579) or (id == 490) or (id == 455) or (id == 516) then if(level == 1) then if(p_lights[veh] == 0) or(p_lights[veh] == nil) then p_pvar[veh] = 1 p_lights[veh] = 1 outputChatBox("#FFFFFFPolice-Lights #00FF00on.", thePlayer, 0, 200, 100, true) setVehicleOverrideLights ( veh, 2 ) p_timer[veh] = setTimer( function() if(p_lvar[veh] == 0) or (p_lvar[veh] == nil) then p_lvar[veh] = 1 setVehicleLightState ( veh, 1, 0) setVehicleLightState ( veh, 2, 0) setVehicleLightState ( veh, 0, 1) setVehicleLightState ( veh, 3, 1) setVehicleHeadLightColor(veh, 0, 0, 255) else setVehicleLightState ( veh, 3, 0) setVehicleLightState ( veh, 0, 0) setVehicleLightState ( veh, 1, 1) setVehicleLightState ( veh, 2, 1) setVehicleHeadLightColor(veh, 255, 0, 0) p_lvar[veh] = 0 end end, 500, 0) else p_lights[veh] = 0 outputChatBox("#FFFFFFPolice-Lights #00FF00off.", thePlayer, 0, 200, 100, true) killTimer(p_timer[veh]) setVehicleLightState ( veh, 0, 0) setVehicleLightState ( veh, 1, 0) setVehicleLightState ( veh, 2, 0) setVehicleLightState ( veh, 3, 0) setVehicleHeadLightColor(veh, 255, 255, 255) setVehicleOverrideLights ( veh, 1 ) end elseif(level == 2) then if(p_lights[veh] == 0) or(p_lights[veh] == nil) then p_lights[veh] = 1 outputChatBox("#FFFFFFPolice-Lights #00FF00on.", thePlayer, 0, 200, 100, true) setVehicleOverrideLights ( veh, 2 ) p_timer[veh] = setTimer( function() if(p_lvar3[veh] == 4) then setTimer(function() p_lvar3[veh] = 0 end, 1000, 1) setTimer( function() if(p_lvar4[veh] == 1)then p_lvar4[veh] = 0 -- 0 = vorne links 1 = vorne rechts 2 = hinten links 3 = hinten rechts setVehicleLightState ( veh, 1, 0) setVehicleLightState ( veh, 2, 0) setVehicleLightState ( veh, 0, 1) setVehicleLightState ( veh, 3, 1) setVehicleHeadLightColor(veh, 77, 77, 255) else setVehicleLightState ( veh, 3, 0) setVehicleLightState ( veh, 0, 0) setVehicleLightState ( veh, 1, 1) setVehicleLightState ( veh, 2, 1) setVehicleHeadLightColor(veh, 255, 77, 77) p_lvar4[veh] = 1 end end, 50, 5) return end if(p_lvar2[veh] == 0) or (p_lvar2[veh] == nil) then p_lvar2[veh] = 1 -- 0 = vorne links 1 = vorne rechts 2 = hinten links 3 = hinten rechts setVehicleLightState ( veh, 1, 0) setVehicleLightState ( veh, 2, 0) setVehicleLightState ( veh, 0, 1) setVehicleLightState ( veh, 3, 1) setVehicleHeadLightColor(veh, 0, 0, 255) else setVehicleLightState ( veh, 3, 0) setVehicleLightState ( veh, 0, 0) setVehicleLightState ( veh, 1, 1) setVehicleLightState ( veh, 2, 1) setVehicleHeadLightColor(veh, 255, 0, 0) p_lvar2[veh] = 0 end if(p_lvar3[veh] == nil) then p_lvar3[veh] = 0 end p_lvar3[veh] = (p_lvar3[veh]+1) end, 500, 0) else p_lights[veh] = 0 outputChatBox("#FFFFFFPolice-Lights #00FF00off.", thePlayer, 0, 200, 100, true) killTimer(p_timer[veh]) setVehicleLightState ( veh, 0, 0) setVehicleLightState ( veh, 1, 0) setVehicleLightState ( veh, 2, 0) setVehicleLightState ( veh, 3, 0) setVehicleHeadLightColor(veh, 255, 255, 255) setVehicleOverrideLights ( veh, 1 ) end end end end addCommandHandler("pl", toggleLights) addEventHandler ( "onVehicleExplode", getRootElement(), function() if(p_lights[source] == 1) then killTimer(p_timer[source]) end Link to comment
FranklinRoosevelt Posted February 11, 2015 Share Posted February 11, 2015 Привет всем. У меня вопрос по ивентам, запускаю ивент с сервера на клиент в функции под ивентом старта ресурса, но он(ивент на клиент) не запускается, мне кажется он как ещё не опознан, как сделать чтобы его опознало сперва или какая здесь может быть альтернатива? Код: -- server side function resourceStart() triggerClientEvent("testEvent", getRootElement()) -- возвращает true end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), resourceStart) --client side function test() outputChatBox('test event running') end addEvent('testEvent', true) addEventHandler('testEvent', getRootElement(), test) Link to comment
AMARANT Posted February 11, 2015 Share Posted February 11, 2015 -- server side function resourceStart() triggerClientEvent("testEvent", getRootElement()) -- возвращает true end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), resourceStart) --client side function test() outputChatBox('test event running') end addEvent('testEvent', true) addEventHandler('testEvent', getLocalPlayer(), test) Link to comment
FranklinRoosevelt Posted February 11, 2015 Share Posted February 11, 2015 Все равно не работает, не в этом суть, но все же спасибо. Link to comment
AMARANT Posted February 11, 2015 Share Posted February 11, 2015 Я не заметил как ты стартанувший ресурс проверяешь. function resourceStart(res) if res==getThisResource() then triggerClientEvent("testEvent", getRootElement()) end end addEventHandler("onResourceStart", root, resourceStart) Link to comment
FranklinRoosevelt Posted February 11, 2015 Share Posted February 11, 2015 Внимание на второй аргумент. addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), resourceStart) Link to comment
AMARANT Posted February 11, 2015 Share Posted February 11, 2015 Смотри тогда, ты спрашивал про альтернативу. Раз ты говоришь что так оно не распознает, значит попробуй либо сразу запускать на клиенте "onClientResourceStart", или же на сервере при старте ресурса циклом пробежись по игрокам и триггерни клиентское событие для каждого из них. Нет сейчас возможности проверить просто, но тут вариантов все равно много. Link to comment
FranklinRoosevelt Posted February 11, 2015 Share Posted February 11, 2015 Запускать на клиенте не подходит, т.к. на сервере проходить проверка что влияет будет ли запущен ивент или нет. А на счет "при старте ресурса циклом пробежись по игрокам и триггерни клиентское событие для каждого из них", я так и делаю разницы никакой. Есть вариант запустить при старте на клиенте потом триггером на сервер -> проверка -> триггер на клиент и дальше уже сами действия. Link to comment
Kernell Posted February 11, 2015 Share Posted February 11, 2015 Привет всем. У меня вопрос по ивентам, запускаю ивент с сервера на клиент в функции под ивентом старта ресурса, но он(ивент на клиент) не запускается, мне кажется он как ещё не опознан, как сделать чтобы его опознало сперва или какая здесь может быть альтернатива?Код: -- server side function resourceStart() triggerClientEvent("testEvent", getRootElement()) -- возвращает true end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), resourceStart) --client side function test() outputChatBox('test event running') end addEvent('testEvent', true) addEventHandler('testEvent', getRootElement(), test) Запускать на клиенте не подходит, т.к. на сервере проходить проверка что влияет будет ли запущен ивент или нет. А на счет "при старте ресурса циклом пробежись по игрокам и триггерни клиентское событие для каждого из них", я так и делаю разницы никакой. Есть вариант запустить при старте на клиенте потом триггером на сервер -> проверка -> триггер на клиент и дальше уже сами действия. Сколько раз не перечитывал, так и не пойму что ты хочешь. Касательно "при старте ресурса циклом пробежись по игрокам и триггерни клиентское событие для каждого из них" - так делать не надо (если речь о всех игроках). Лучше вызывать событие один раз на родительский элемент, для игроков по умолчанию это root. В итоге ты отправишь один пакет вместо %количество игроков%, который получит каждый клиент. Опиши конкретно, что ты хочешь сделать? Link to comment
FranklinRoosevelt Posted February 11, 2015 Share Posted February 11, 2015 Опиши конкретно, что ты хочешь сделать? Суть: при перезагрузке/старте ресурса, чтобы для всех клиентов запускался триггер, но сначала чтобы была проверка на сервере некоторых параметров (каких неважно, но это влияет на аргументы триггера), ну по коду вот так (упрощенная версия): -- server side function resourceStart() triggerClientEvent("testEvent", getRootElement()) end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), resourceStart) --client side function test() outputChatBox('test event running') end addEvent('testEvent', true) addEventHandler('testEvent', getRootElement(), test) Но оно не работает, триггер возвращает true. Касательно "при старте ресурса циклом пробежись по игрокам и триггерни клиентское событие для каждого из них" - так делать не надо (если речь о всех игроках). Лучше вызывать событие один раз на родительский элемент, для игроков по умолчанию это root. В итоге ты отправишь один пакет вместо %количество игроков%, который получит каждый клиент. В этом согласен, но как я сказал раньше, игрокам отправляются разные аргументы, в зависимости от результата проверки на сервере, ну думаю так ты уже всё поймешь. Link to comment
Kernell Posted February 12, 2015 Share Posted February 12, 2015 Обычно в этом случае, когда у клиентов запускается ресурс они вызывают серверное событие, обычно его называют Ready. Т.е. по сути клиенты сообщают о своей готовности. Поэтому ты не можешь просто взять и на сервере вызвать клиентские события для всех игроков - некоторые игроки будут не готовы (загрузка файлов, например). Далее когда клиент готов, ты можешь уже делать какие-то манипуляции с ним. Бывают ситуации когда ресурс на сервере запускается дольше чем у клиентов. Клиент обратится к серверному событию Ready, а на сервере его ещё нет или сервер просто не готов обработать запрос клиента. Поэтому я предпочитаю чтобы такие события были в отдельном ресурсе, пускай это будет Core-ресурс. В итоге когда Core-ресурс запустился (прошла выгрузка из базы и всё такое) - он запускает клиентский ресурс. Link to comment
Easterdie Posted February 12, 2015 Share Posted February 12, 2015 onClientResourceStart - отправить на сервер триггер о запуске с сервера на клиент отправить триггер выполнения задачи на клиенте запустить задачу по триггеру Link to comment
Strix Posted February 13, 2015 Share Posted February 13, 2015 Возможно ли скриптом выполнить консольную команду на сервере? Link to comment
Kernell Posted February 13, 2015 Share Posted February 13, 2015 Возможно ли скриптом выполнить консольную команду на сервере? Искать не пробовали? executeCommandHandler Link to comment
Strix Posted February 14, 2015 Share Posted February 14, 2015 Возможно ли скриптом выполнить консольную команду на сервере? Искать не пробовали? executeCommandHandler Искать пробовал, и эту функцию я тоже рассматривал. Но она выполняет команду игрока, а я хочу выполнить серверную команду ("debugdb 2", например). Внимательно пересмотрев все функции на вики, я не нашёл подходящей. Возможно, её нет из-за соображений безопасности. Link to comment
Kernell Posted February 14, 2015 Share Posted February 14, 2015 Внимательно пересмотрев все функции на вики, я не нашёл подходящей. Возможно, её нет из-за соображений безопасности. Да, вы правы. Hardcoded команды нельзя выполнять из соображений безопасности. Link to comment
Evolv Posted February 15, 2015 Share Posted February 15, 2015 Существует ли какая-нибудь универсальная функция, которая подгоняет GUI элементы к разрешению игрока? Link to comment
Easterdie Posted February 15, 2015 Share Posted February 15, 2015 даже если размеры гуи будут относительные, шрифты всё равно останутся теми, какие были заложены разработчиками. я пользуюсь таким для dx: local screenWidth,screenHeight = guiGetScreenSize() local sw = screenWidth/640 local sh = screenHeight/480 local dsize = screenWidth/640*0.80 sw - относительные размеры для окна по ширине sh - по высоте, всё ориентировано под 640*480. dsize - размер шрифта (вроде там колдовство типа 1.2 шрифт равен 12 пунктам, уже не помню) dxDrawText(tostring(driftCoeff), sw*37,sh*353,sw*238,sh*616,tocolor(230,210,0,255),dsize*1.2,"default-bold","left","top") на любом разрешении по пропорциям выглядит так же, как и на 640 на 480 Link to comment
Seddo Posted March 2, 2015 Share Posted March 2, 2015 Вопрос номер 1: Скажите пожалуйста, можно ли как-нибудь получить угол на который повернуты передние колеса авто (лево-право)? getAnalogControlState как я понял получает только поворот контроллера, а реально колеса часто бывают повернуты на меньший угол, в зависимости от скорости. Вопрос номер 2: Не могу понять почему это не работает, вроде все как в вики: ---server addCommandHandler("hide", function ( thePlayer ) if isPedInVehicle ( thePlayer ) then local veh = getPedOccupiedVehicle ( thePlayer ) for i, player in ipairs ( getElementsByType("player") ) do triggerClientEvent ( player, "hideComp", player, veh ) end end end ) ---client addEvent( "hideComp", true ) addEventHandler( "hideComp", localPlayer, function ( theVeh ) local isVisible = getVehicleComponentVisible(theVeh, "bump_front_ok") if (isVisible == true) then setVehicleComponentVisible(theVeh, "bump_front_ok", false) elseif (isVisible == false) then setVehicleComponentVisible(theVeh, "bump_front_ok", true) end end ) Link to comment
obuhhh Posted March 2, 2015 Share Posted March 2, 2015 Вопрос номер 1:Скажите пожалуйста, можно ли как-нибудь получить угол на который повернуты передние колеса авто (лево-право)? getAnalogControlState как я понял получает только поворот контроллера, а реально колеса часто бывают повернуты на меньший угол, в зависимости от скорости. Вопрос номер 2: Не могу понять почему это не работает, вроде все как в вики: ---server addCommandHandler("hide", function ( thePlayer ) if isPedInVehicle ( thePlayer ) then local veh = getPedOccupiedVehicle ( thePlayer ) for i, player in ipairs ( getElementsByType("player") ) do triggerClientEvent ( player, "hideComp", player, veh ) end end end ) ---client addEvent( "hideComp", true ) addEventHandler( "hideComp", localPlayer, function ( theVeh ) local isVisible = getVehicleComponentVisible(theVeh, "bump_front_ok") if (isVisible == true) then setVehicleComponentVisible(theVeh, "bump_front_ok", false) elseif (isVisible == false) then setVehicleComponentVisible(theVeh, "bump_front_ok", true) end end ) Вроде вот тут есть тебе нужное: https://wiki.multitheftauto.com/wiki/Vehicle_Components А это та ф-я, которая нужна. float, float, float getVehicleComponentRotation ( vehicle theVehicle, string theComponent [, string base = "parent"] ) Link to comment
Seddo Posted March 3, 2015 Share Posted March 3, 2015 Вроде вот тут есть тебе нужное: https://wiki.multitheftauto.com/wiki/Vehicle_Components А это та ф-я, которая нужна. float, float, float getVehicleComponentRotation ( vehicle theVehicle, string theComponent [, string base = "parent"] ) В модели находится только одно колесо, там уже дальше происходит магия и оно появляется в игре на всех 4х местах. Как следствие получить его ротацию я не могу. Если только получать ротацию дамми колес? Но эти функции вроде не работают с дамми. Link to comment
obuhhh Posted March 3, 2015 Share Posted March 3, 2015 Вроде вот тут есть тебе нужное: https://wiki.multitheftauto.com/wiki/Vehicle_Components А это та ф-я, которая нужна. float, float, float getVehicleComponentRotation ( vehicle theVehicle, string theComponent [, string base = "parent"] ) В модели находится только одно колесо, там уже дальше происходит магия и оно появляется в игре на всех 4х местах. Как следствие получить его ротацию я не могу. Если только получать ротацию дамми колес? Но эти функции вроде не работают с дамми. Не знаю другого способа, поэтому я б гемороился с этой ф-ей. Взял бы Rotation одного из передних колес, чуть чуть тригонометрии(с ней у меня туго, сразу так не напишу) и будет тебе угол поворота колес. Повторюсь, другого я ничего не знаю пока-что. P.S. Kenix с подобным сталкивался, может быть поможет. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now