Jump to content

CocaColaBear

Members
  • Posts

    229
  • Joined

  • Last visited

Everything posted by CocaColaBear

  1. Всем привет! Есть такой вопрос. Если при рестарте ресурса, в onResourceStop вызвать dbExec раз эдак за 100 (записать положения игроков), успеют ли выполнится запросы, если при остановке ресурса подключение будет уничтожено?
  2. У меня вообще не в каких случаях не копирует она колшейпы. Ну, допустим, так: cloneElement(createColSphere(1, 2, 3, 4)) Да, я проверил. Колшейп не клонируется вообще никак
  3. Вот, набросал по-быстрому. Не проверял, писал тупо в блокноте. Может будут какие-нибудь ошибки. Но по сути, сервер лишь посылает клиенту, что он за решеткой и дальнейшая обработка происходит на клиенте. Вы только допишите, чтобы сохранялось время которое он отсидел и оставшееся, в случае перезахода на сервер. Проверить можно по команде /jail [Имя_игрока] [Время_в_секундах] -- Server function unJailPlayer() -- Освободить игрока с тюрьмы --setElementPosition(client, ...) outputChatBox("Вы освобождены из тюрьмы!", client) end addEvent("unJailPlayer", true) addEventHandler("unJailPlayer", root, unJailPlayer) addCommandHandler("jail", function(player, _, prisonerName, time) local prisoner = getPlayerByName(prisonerName) if(prisoner) then -- Посадить в тюрьму -- setElementPosition(prisoner, ...) triggerClientEvent(prisoner, "jailPlayer", prisoner, time or 60) else outputChatBox("Такого игрока нет!", player) end end ) -- Client local releaseTime function drawJailTime() local remainingTime = releaseTime - getTickCount() if(remainingTime > 0) then dxDrawText("Вам осталось "..(remainingTime/1000).." секунд", 500, 500) else releaseTime = nil triggerServerEvent("unjailPlayer", localPlayer) removeEventHandler("onClientRender", root, drawJailTime) end end function jailPlayer(jTime) -- jTime в секундах releaseTime = getTickCount() + jTime*1000 addEventHandler("onClientRender", root, drawJailTime) end addEvent("jailPlayer", true) addEventHandler("jailPlayer", root, jailPlayer)
  4. Вариант 1. Передать thePlayer в качестве агрумента: local thePlayer = getRandomPlayer() setTimer(function(player) local x,y,z = getElementPosition(player) setElementData(player, 'positionUsx', x) setElementData(player, 'positionUsy', y) setElementData(player, 'positionUsz', z) triggerClientEvent(player, 'Hello', root, player) end, 10000, 1, thePlayer) Вариант 2. Т.к. thePlayer находится в области видимости, то можно его и использовать: local thePlayer = getRandomPlayer() setTimer(function() local x,y,z = getElementPosition(thePlayer ) setElementData(thePlayer , 'positionUsx', x) setElementData(thePlayer , 'positionUsy', y) setElementData(thePlayer , 'positionUsz', z) triggerClientEvent(thePlayer , 'Hello', root, thePlayer ) end, 10000, 1)
  5. Вы немного не так делаете. Как я понял, у вас у каждого игрока будет свой таймер. Зачем это? Запоминайте время, когда игрок был помещен в тюрьму и срок. Потом на клиенте все это считаете (даже в том же onClientRender при прорисовке оставшегося времени заключения), а когда срок заканчивается - отправляете данные на сервер. А при выходе игрока из игры, просто обновить время, помещения в тюрьму и убавить срок, в зависимости от того, сколько он просидел.
  6. Проблема решается банально и просто, при помощи getGameSpeed, на клиенте. А вообще - идея не очень. Замените игровые команды чем-нибудь другим и не будет проблем с макросами.
  7. Да, быстрый бег уже пофиксили. А насчет быстрого прицеливания могу лишь предложить то, что данное прицеливание держит прицел в одной точке (например в какой-либо кости). Поэтому просто проверять, если в течении 100-200 мс прицел держится в пределах одной кости, то явно - быстрое прицеливание. Но это, если я правильно понял, что-то типа аима на снайперке? Или что?
  8. Изменять данные в БД тогда, когда они изменяются на сервере. Например, у игрока изменилось кол-во денег - отправляем это в БД, изменился скин - отправляем в БД. Тогда, при экстренном выключении сервера, потеряются лишь второстепенные данные, такие как позиция игрока. Ведь ничего страшного в том, что его отбросит на последнее место сохранения нету, если все остальные данные в порядке.
  9. А я на сколько помню, в официальной документации об этом не говорится ничего. https://wiki.multitheftauto.com/wiki/SetAccountData Походу все таки больше 255, т.к. для хранения даты используется тип TEXT
  10. Кто-нибудь заносил русский текст в таблицу при помощи dbExec, dbQuery? У меня напрочь отказывается это делать при различных кодировках, таких как utf8, и cp1251. В таблицах либо иероглифы, либо вопросы. Выполнив такой же запрос, через Navicat, текст вставился без проблем и не конвертировался после перезапуска.
  11. Hi all. I have problem on the side of MTA with encoding. Example query: dbExec(bdConnection, "UPDATE table SET text = 'Русский текст' WHERE id = 1") In database i have: "? ???????????? ?‚?µ?????‚" But if I do not execute this query from the MTA, and from phpMyAdmin result - Ok. Russian string normally displayed. Field and database encoding: cp1251 or utf8 (tried both)
  12. Вот тут подробно описано, как защитить себя
  13. Я точно не помню, но по-моему, setAccountData не работает асинхронно. Следовательно это затрудняет некоторые задачи. Если вы все собираетесь запихнуть в стандартные аккаунты - то мне вас жаль. Стандартные аккаунты скорее подходят для небольших проектов, где хранить необходимо не столь много данных. Для больших проектов - это вообще не вариант, т.к. скорость работы будет очень медленная.
  14. Код - ужас. Исправил именно по вашей схеме. function Makemarker11() local theMarker11 = createMarker (2594.850097653, -2176.44921875, -0.21875, "cylinder", 1.5, 32, 163, 32, 255) setElementData( theMarker11, "skin", 1) end addEventHandler("onResourceStart", getRootElement(), Makemarker11) function skin1(playerSource) if getElementData(source, "skin") == 1 then setElementModel(playerSource, 22) end end addEventHandler("onMarkerHit", getRootElement(), skin1) setPlayerSkin устарел, используйте setElementModel
  15. Консоль должна была выдать ошибку, т.к. четвертый параметр - nil. ped = createPed( 19, 2584.1335449219, 2822.9182128906, 10.8203125 ) setTimer( giveWeapon, 1000, 1, ped, 31, 500, true)
  16. В 1.4 добавляют ООП. Но классы идут только на клиент. Вопрос, не глупо ли иметь такие классы на клиенте, но не иметь на сервере?
  17. Если поставить сервер на Тяньхэ-2, то любой скрипт и процента не займет Это я к тому, что кто-то может и сделает вам, а у вас машина дерьмо какашка и старания - зря
  18. Kenix, спасибо, исправил пост. А насчет ElementData. По-моему лучше ее вообще не использовать. Проще хранить все данные в таблице, скорость записи/чтения в 15 раз быстрее у таблиц (только что замерял). Этот код и есть Lua-файл
  19. local playerSkin = {} addEventHandler("onPlayerJoin", root, function() playerSkin[source] = 155 end ) addEventHandler("onPlayerWasted", root, function() setTimer(spawnPlayer, 2000, 1, source, 0, 0, 3, 0, playerSkin[source]) end ) addEventHandler("onPlayerQuit", root, function() playerSkin[source] = nil; end ) При таком коде, игроки всегда будут спавниться с 155 скином
  20. Сама игра, Just Cause 2, убога. Кроме как огромного мира ей нечем похвастаться. Ну и крюк там слишком имбовый.
  21. Есть ли возможность получить указатель на функцию внутри самой функции? Что-то типа: addEventHandler("onPlayerQuit", root, function() removeEventHandler("onPlayerQuit", root, --[[данная функция]]) end ) P.S. Альтернативные решения мне известны, но интересен именно такой вариант
  22. Тут до 5-ки рукой подать, толку ковырять 4-ку
  23. Screen Recorder. Простая, быстрая. Мне понравилось больше, чем Fraps
×
×
  • Create New...