BloodStar18 Posted July 24, 2015 Share Posted July 24, 2015 Всем доброго времени суток. Вопрос, возможно, глупый, и тем не менее: если ставить MTA сервер на хостинг, запись/чтение файлов (XML, обычные, ...) будет работать нормально? Или нужно обязательно использовать БД SQL? Link to comment
Kenix Posted July 24, 2015 Share Posted July 24, 2015 Я бы на твоем месте использовал бы СУБД MySQL (если ты также имеешь ввиду как лучше хранить данные), но вот только не на всех игровых хостингах могут предоставить это, так что лучше брать VPS и делать все самому. Link to comment
BloodStar18 Posted July 25, 2015 Share Posted July 25, 2015 Я бы на твоем месте использовал бы СУБД MySQL (если ты также имеешь ввиду как лучше хранить данные), но вот только не на всех игровых хостингах могут предоставить это, так что лучше брать VPS и делать все самому. Извини, а на не-VPS MTA сервер сможет оперировать XML и обычными текстовыми файлами? Если забыть про эффективность? Link to comment
Other Languages Moderators Disinterpreter Posted July 25, 2015 Other Languages Moderators Share Posted July 25, 2015 Может. А тебе для чего? Link to comment
Elengar Posted July 25, 2015 Share Posted July 25, 2015 Извини, а на не-VPS MTA сервер сможет оперировать XML и обычными текстовыми файлами? Если забыть про эффективность? Если для хранения данных и раз нету внешней СУБД, то можно использовать внутреннюю. executeSQLQuery Link to comment
nikitafloy Posted July 26, 2015 Share Posted July 26, 2015 Привет всем, комрады. Расскажите о шейдерах. Не понимаю как они используются в "engineApplyShaderToWorldTexture". Link to comment
Kira_Getto Posted July 26, 2015 Share Posted July 26, 2015 Подскажите, как создать команду для передачи денег. При нажатии команды /pay [ник] [сумма] деньги от одного игрока будут переходить к другому. Я смог найти функции, но не понимаю как их соединить и доработать. function consoleGiveCash ( thePlayer, command, amount ) givePlayerMoney ( thePlayer, amount ) end addCommandHandler ( "pay", consoleGiveCash ) function takeCash ( thePlayer, command, amount ) takePlayerMoney ( thePlayer, tonumber(amount) ) end Link to comment
nikitafloy Posted July 26, 2015 Share Posted July 26, 2015 Подскажите, как создать команду для передачи денег. При нажатии команды /pay [ник] [сумма] деньги от одного игрока будут переходить к другому.Я смог найти функции, но не понимаю как их соединить и доработать. function consoleGiveCash ( thePlayer, command, amount, sum ) -- amount - первый аргумент (ник игрока), sum - второй (сумма) givePlayerMoney ( getPlayerFromName(amount), sum ) takePlayerMoney ( thePlayer, sum ) end addCommandHandler ( "pay", consoleGiveCash ) Link to comment
Kira_Getto Posted July 26, 2015 Share Posted July 26, 2015 (edited) Подскажите, как создать команду для передачи денег. При нажатии команды /pay [ник] [сумма] деньги от одного игрока будут переходить к другому.Я смог найти функции, но не понимаю как их соединить и доработать. function consoleGiveCash ( thePlayer, command, amount, sum ) -- amount - первый аргумент (ник игрока), sum - второй (сумма) givePlayerMoney ( getPlayerFromName(amount), sum ) takePlayerMoney ( thePlayer, sum ) end addCommandHandler ( "pay", consoleGiveCash ) Всё. Собрал то что нужно. Спасибо за помощь) Edited July 26, 2015 by Guest Link to comment
Kira_Getto Posted July 26, 2015 Share Posted July 26, 2015 И хотелось узнать, как сделать так, чтобы hp игроков каждые 15 секунд повышалось на 1hp и так до 100? Я вот набросал что-то, но не работает. setTimer( function() for k,v in ipairs(getElementsByType("player")) do if getTeamName(getPlayerTeam(v)) == "Staff" then setElementHealth(v, getElementHealth(v)+100) end end end, 100, 0) Link to comment
STAWR Posted July 26, 2015 Share Posted July 26, 2015 setTimer( function() for k,v in pairs(getElementsByType("player")) do if getTeamName(getPlayerTeam(v)) == "Staff" and getElementHealth(v)<100 then setElementHealth(v, getElementHealth(v)+1) end end end, 15000, 0) Link to comment
Kira_Getto Posted July 26, 2015 Share Posted July 26, 2015 ^ Спасибо большое. То, что нужно. У меня вот есть две команды для того, чтобы открыть и закрыть автомобиль. А как сделать так, чтобы введя /lock один раз - автомобиль закрывался, а на второй раз открывался? addCommandHandler ( "lock", doLockVehicle ) addCommandHandler ( "unlock", doUnlockVehicle ) Link to comment
BloodStar18 Posted July 26, 2015 Share Posted July 26, 2015 Извини, а на не-VPS MTA сервер сможет оперировать XML и обычными текстовыми файлами? Если забыть про эффективность? Если для хранения данных и раз нету внешней СУБД, то можно использовать внутреннюю. executeSQLQuery Чем отличаются 'dbQuery' и 'executeSQLQuery'? Link to comment
BloodStar18 Posted July 26, 2015 Share Posted July 26, 2015 ^ Спасибо большое. То, что нужно.У меня вот есть две команды для того, чтобы открыть и закрыть автомобиль. А как сделать так, чтобы введя /lock один раз - автомобиль закрывался, а на второй раз открывался? addCommandHandler ( "lock", doLockVehicle ) addCommandHandler ( "unlock", doUnlockVehicle ) Возможно, неправильно тебя понял, но: -- Server Code -- Type 'lock' to lock/unlock current vehicle function doChangeLockState(player) local veh = getPedOccupiedVehicle(player) if veh then local lock = true local op = 'закрыто' if isVehicleLocked(veh) then lock = false op = 'открыто' end if setVehicleLocked(veh, lock) then return outputConsole("Ваше транспортное средство было "..op..".", player) end end end addCommandHandler("lock", doChangeLockState) Link to comment
Kira_Getto Posted July 26, 2015 Share Posted July 26, 2015 ^ Спасибо большое. То, что нужно.У меня вот есть две команды для того, чтобы открыть и закрыть автомобиль. А как сделать так, чтобы введя /lock один раз - автомобиль закрывался, а на второй раз открывался? addCommandHandler ( "lock", doLockVehicle ) addCommandHandler ( "unlock", doUnlockVehicle ) Возможно, неправильно тебя понял, но: -- Server Code -- Type 'lock' to lock/unlock current vehicle function doChangeLockState(player) local veh = getPedOccupiedVehicle(player) if veh then local lock = true local op = 'закрыто' if isVehicleLocked(veh) then lock = false op = 'открыто' end if setVehicleLocked(veh, lock) then return outputConsole("Ваше транспортное средство было "..op..".", player) end end end addCommandHandler("lock", doChangeLockState) Оно работает, но теперь эта команда работает только в самом автомобиле. То есть, если вышел из автомобиля, то его больше не открыть. Link to comment
FranklinRoosevelt Posted July 26, 2015 Share Posted July 26, 2015 Чем отличаются 'dbQuery' и 'executeSQLQuery'? NOTE: This function only acts upon registry.db. Use dbQuery to query a custom SQL databse. Link to comment
STAWR Posted July 27, 2015 Share Posted July 27, 2015 addCommandHandler ( "lock", doLockVehicle ) Скинь функцию Link to comment
FranklinRoosevelt Posted July 27, 2015 Share Posted July 27, 2015 Всем здрасти, у меня возник вопрос: можно ли выключить анимации при управлении транспортом (повороты руля и т.п)? Link to comment
Kira_Getto Posted July 27, 2015 Share Posted July 27, 2015 addCommandHandler ( "lock", doLockVehicle ) Скинь функцию -- player element data -- -- cl_ownedvehicle -- vehicle element data -- -- cl_vehicleowner -- cl_vehiclelocked -- cl_enginestate -- resource starts - ends function initCarLocks () -- Initilize Player Element Data local players = getElementsByType ( "player" ) for k,p in ipairs(players) do removeElementData ( p, "cl_ownedvehicle" ) bindKey ( p, "l", "down", doToggleLocked ) bindKey ( p, "2", "down", doToggleEngine ) end -- Initilize Vehicle Element Data local vehicles = getElementsByType ( "vehicle" ) for k,v in ipairs(vehicles) do removeElementData ( v, "cl_vehicleowner" ) removeElementData ( v, "cl_vehiclelocked" ) removeElementData ( v, "cl_enginestate" ) setVehicleLocked ( v, false ) setVehicleOverrideLights ( v, 0 ) end end addEventHandler ( "onResourceStart", getResourceRootElement ( getThisResource () ), initCarLocks ) addEventHandler ( "onResourceStop", getResourceRootElement ( getThisResource () ), initCarLocks ) -- player joins function cl_PlayerJoin ( ) bindKey ( source, "2", "down", doToggleEngine ) end addEventHandler ( "onPlayerJoin", getRootElement(), cl_PlayerJoin ) -- player quits function cl_PlayerQuit ( ) -- check for owned car local ownedVehicle = getElementData ( source, "cl_ownedvehicle" ) if (ownedVehicle ~= false) then cl_RemoveVehicleOwner ( ownedVehicle ) end end addEventHandler ( "onPlayerQuit", getRootElement(), cl_PlayerQuit ) -- player dies function cl_PlayerWasted ( ) -- check for owned car local ownedVehicle = getElementData ( source, "cl_ownedvehicle" ) if (ownedVehicle ~= false) then cl_RemoveVehicleOwner ( ownedVehicle ) end end addEventHandler ( "onPlayerWasted", getRootElement(), cl_PlayerWasted ) -- player tries to enter vehicle function cl_VehicleStartEnter ( enteringPlayer, seat, jacked ) local theVehicle = source local theOwner -- locked and not owner entering if ( getElementData ( theVehicle, "cl_vehiclelocked" ) == true ) then theOwner = getElementData ( theVehicle, "cl_vehicleowner" ) if theOwner ~= false and theOwner ~= enteringPlayer then -- make sure they dont enter --cancelEvent(); end end end addEventHandler ( "onVehicleStartEnter", getRootElement(), cl_VehicleStartEnter ) -- player enters a vehicle function cl_PlayerDriveVehicle ( player, seat, jacked ) -- Driver Enter if ( seat == 0 ) then oldVehicle = getElementData ( player, "cl_ownedvehicle" ) -- not entering player's own owned vehicle if ( (cl_VehicleLocked(source) == true) and (cl_VehicleOwner(source) ~= player) ) then removePedFromVehicle( player ) Err_Msg("this vehicle is locked.", player) return false end -- set element data for vehicle and owner cl_SetVehicleOwner ( source, player ) end return true end addEventHandler ( "onVehicleEnter", getRootElement(), cl_PlayerDriveVehicle ) -- vehicle respawns function cl_VehicleRespawn ( exploded ) cl_RemoveVehicleOwner ( source ) end addEventHandler ( "OnVehicleRespawn", getRootElement(), cl_VehicleRespawn ) -- vehicle explosion function cl_VehicleExplode ( ) local theOwner = getElementData ( source, "cl_vehicleowner" ) if ( theOwner ~= false ) then cl_RemoveVehicleOwner ( source ) end end addEventHandler ( "onVehicleExplode", getRootElement(), cl_VehicleExplode ) -- set vehicle owner function cl_SetVehicleOwner ( theVehicle, thePlayer ) local oldVehicle = getElementData ( thePlayer, "cl_ownedvehicle" ) if ( oldVehicle ~= false ) then -- unlock old car removeElementData ( oldVehicle, "cl_vehicleowner" ) removeElementData ( oldVehicle, "cl_vehiclelocked" ) removeElementData ( oldVehicle, "cl_enginestate" ) setVehicleLocked ( oldVehicle, false ) -- set vars for new car end setElementData ( theVehicle, "cl_vehicleowner", thePlayer ) setElementData ( theVehicle, "cl_vehiclelocked", false ) setElementData ( thePlayer, "cl_ownedvehicle", theVehicle ) setElementData( theVehicle, "cl_enginestate", true ) end function cl_RemoveVehicleOwner ( theVehicle ) local theOwner = getElementData ( theVehicle, "cl_vehicleowner" ) if ( theOwner ~= false ) then removeElementData ( theOwner, "cl_ownedvehicle" ) removeElementData ( theVehicle, "cl_vehicleowner" ) removeElementData ( theVehicle, "cl_vehiclelocked" ) removeElementData ( owned, "cl_enginestate" ) end setVehicleLocked ( theVehicle, false ) end -- flash the lights twice function cl_FlashLights ( thePlayer ) setTimer ( doToggleLights, 300, 4, thePlayer, true ) end -- flash once function cl_FlashOnce ( thePlayer ) setTimer ( doToggleLights, 300, 2, thePlayer, true ) end -- get vehicle owner ( according to vehicle's element data ) function cl_VehicleOwner ( theVehicle ) return getElementData( theVehicle, "cl_vehicleowner" ) end -- is vehicle locked ( according to vehicle's element data ) function cl_VehicleLocked ( theVehicle ) return getElementData( theVehicle, "cl_vehiclelocked" ) end -- messaging functions -- send red error message function Err_Msg ( strout, thePlayer ) outputChatBox ( strout, thePlayer, 200, 0, 10 ) end -- send message to all occupants of vehicle function Car_Msg ( strout, theVehicle ) numseats = getVehicleMaxPassengers ( theVehicle ) for s = 0, numseats do local targetPlayer = getVehicleOccupant ( theVehicle, s ) if targetPlayer ~= false then outputChatBox ( strout, targetPlayer, 30, 144, 255 ) end end end -- send aquamarine message to player function Info_Msg ( strout, thePlayer ) outputChatBox ( strout, thePlayer, 102, 205, 170 ) end -- commands function doToggleLocked ( source ) local theVehicle , strout if ( getElementType(source) == "vehicle" ) then theVehicle = source end if ( getElementType(source) == "player" ) then theVehicle = getElementData ( source, "cl_ownedvehicle" ) end if ( theVehicle ) then local vehiclename = getVehicleName ( theVehicle ) -- already locked if ( getElementData ( theVehicle, "cl_vehiclelocked") == true ) then doUnlockVehicle ( source ) else doLockVehicle ( source ) end else Err_Msg("Вы должны быть автомобиль, чтобы заблокировать или разблокировать его.", source) end end function doLockVehicle ( source ) local theVehicle , strout if ( getElementType(source) == "vehicle" ) then theVehicle = source end if ( getElementType(source) == "player" ) then theVehicle = getElementData ( source, "cl_ownedvehicle" ) end if ( theVehicle ) then local vehiclename = getVehicleName ( theVehicle ) -- already locked if ( getElementData ( theVehicle, "cl_vehiclelocked") == true ) then strout = "Ваш " .. vehiclename .. " уже заблокирован." Err_Msg(strout, source) else setElementData ( theVehicle, "cl_vehiclelocked", true) setVehicleLocked ( theVehicle, true ) Car_Msg( "Текущие транспортное средство " .. vehiclename .. " закрыто.", theVehicle) Info_Msg ( "locked vehicle " .. vehiclename .. ".", source ) if ( getVehicleController ( theVehicle ) == false ) then cl_FlashLights ( source ) end end else Err_Msg("Вы должны быть автомобиль, чтобы зафиксировать ее.", source) end end function doUnlockVehicle ( source ) local theVehicle, strout if ( getElementType(source) == "vehicle" ) then theVehicle = source end if ( getElementType(source) == "player" ) then theVehicle = getElementData ( source, "cl_ownedvehicle" ) end if ( theVehicle ) then local vehiclename = getVehicleName ( theVehicle ) if ( getElementData ( theVehicle, "cl_vehiclelocked") == false ) then strout = "Ваш " .. vehiclename .. " уже разблокирован." Err_Msg(strout, source) else setElementData ( theVehicle, "cl_vehiclelocked", false) setVehicleLocked ( theVehicle, false ) Car_Msg( "Текущие транспортное средство " .. vehiclename .. " разблокировано.", theVehicle ) Info_Msg ( "unlocked vehicle " .. vehiclename .. ".", source ) if ( getVehicleController ( theVehicle ) == false ) then cl_FlashOnce ( source ) end end else Err_Msg Link to comment
Kira_Getto Posted July 27, 2015 Share Posted July 27, 2015 Помогите пожалуйста. Выдаёт такую ошибку: "attempt to perform arithmetic on local 'lvls' (a nil value)" И кто больше разбирается, то проверьте функцию на правильность. Изначально я хотел, чтобы каждый промежуток времени начислялись exp каждому игроку. И потом повышался его лвл. При вводе команды /mylevel чтобы в чат показывало уровень игрока. В чём моя ошибка? addCommandHandler ( "mylevel", function ( thePlayer ) local myLevel = exports.exp_system:getPlayerLevel ( thePlayer ) outputChatBox ( "Ваш уровень: ".. myLevel, thePlayer ) end ) function experience () for i, pPlayer in ipairs( getElementsByType( "player" ) ) do local pAccount = getPlayerAccount( pPlayer ) local exp = getAccountData(pAccount, "exp") local exps = tonumber(getAccountData(pAccount, "exp")) local lvls = tonumber(getAccountData(pAccount, "lvl")) local needexp = lvls * 4 if not exp then setAccountData(pAccount, "exp", 1) setAccountData(pAccount, "allexp", 1) setAccountData(pAccount, "lvl", 1) outputChatBox("Ваш опыт: " .. exps .. "/" .. needexp, getRootElement(), 0, 255, 0) else setAccountData(pAccount, "exp", exps + 1) if exps == needexp then setAccountData(pAccount, "lvl", lvls + 1) setAccountData(pAccount, "exp", 1) outputChatBox("Ваш уровень повышен до " .. lvls + 1 .. "!", getRootElement(), 0, 255, 0) else outputChatBox("Ваш опыт: " .. exps .. "/" .. needexp, getRootElement(), 0, 255, 0) end end end end setTimer(experience, 3000, 0) Link to comment
STAWR Posted July 27, 2015 Share Posted July 27, 2015 function doLockVehicle ( source ) local theVehicle , strout if ( getElementType(source) == "vehicle" ) then theVehicle = source end if ( getElementType(source) == "player" ) then theVehicle = getElementData ( source, "cl_ownedvehicle" ) end if ( theVehicle ) then local vehiclename = getVehicleName ( theVehicle ) -- already locked setElementData ( theVehicle, "cl_vehiclelocked", not isVehicleLocked(theVehicle)) setVehicleLocked ( theVehicle, not isVehicleLocked(theVehicle)) if isVehicleLocked(theVehicle) then Car_Msg( "Текущие транспортное средство " .. vehiclename .. " закрыто.", theVehicle) Info_Msg ( "locked vehicle " .. vehiclename .. ".", source ) else Car_Msg( "Текущие транспортное средство " .. vehiclename .. " открыто.", theVehicle) Info_Msg ( "unlocked vehicle " .. vehiclename .. ".", source ) end if ( getVehicleController ( theVehicle ) == false ) then cl_FlashLights ( source ) end end else Err_Msg("Вы должны быть автомобиле, чтобы закрыть/открыть его.", source) end end function doToggleLocked ( source ) local theVehicle , strout if ( getElementType(source) == "vehicle" ) then theVehicle = source end if ( getElementType(source) == "player" ) then theVehicle = getElementData ( source, "cl_ownedvehicle" ) end if ( theVehicle ) then local vehiclename = getVehicleName ( theVehicle ) doLockVehicle ( source ) else Err_Msg("Вы должны быть автомобиле, чтобы заблокировать или разблокировать его.", source) end end lvls и exps пустые. Если значения нет и x = get, а потом set, то x всё равно будет пустой. local exps = tonumber(getAccountData(pAccount, "exp")) or 1 local lvls = tonumber(getAccountData(pAccount, "lvl")) or 1 Link to comment
Kira_Getto Posted July 27, 2015 Share Posted July 27, 2015 Cпасибо большое за помощь, но сейчас выдаёт ошибку и я немного не понимаю что нужно исправить. SCRIPT ERROR: myserver\car\car_locks_server.lua:224: 'end' expected (to close 'function' at line 200) near 'else' ERROR: Loading script failed: myserver\car\car_locks_server.lua:224: 'end' expected (to close 'function' at line 200) near 'else' Link to comment
STAWR Posted July 27, 2015 Share Posted July 27, 2015 end else Err_Msg("Вы должны быть автомобиле, чтобы закрыть/открыть его.", source) здесь end убери Link to comment
Kira_Getto Posted July 27, 2015 Share Posted July 27, 2015 ^Спасибо большое! Помогло) И у меня очередная проблема. Я скачал ресурс slothbot и куда бы этот архив не пихал, при нажатии "start slothbot" мне выдаёт, что не видит этот ресурс. Куда его нужно кидать? Если что, то путь к ресурсам у меня deathmatch > resources > myserver. Link to comment
STAWR Posted July 27, 2015 Share Posted July 27, 2015 после resources все папки на пути ресурса должны быть в квадратных скобках. И для новых ресурсов нужно выполнить команду refresh, если после добавления сервер не был перезапущен. 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