TwiX! Posted December 3, 2012 Share Posted December 3, 2012 (edited) addEventHandler ( 'onGamemodeMapStart', root, function ( mapres ) getMapDuration ( mapres ); end ) function getMapDuration ( mRes ) local meta = xmlLoadFile ( ':' .. getResourceName ( mRes ) .. '/' .. 'meta.xml' ); local mapnode = xmlFindChild ( meta, 'settings', 0 ); if mapnode then for i = 1,14 do -- Обычно 14 штук их.. local mapnode = xmlFindChild ( mapnode, 'setting', i ); local filename = mapnode and xmlNodeGetAttribute ( mapnode, 'name' ); if filename == "#duration" then local result = mapnode and xmlNodeGetAttribute ( mapnode, 'value' ); outputChatBox ( timeToString ( getNumberFromText ( result ) ) ); end end return false end return false end function timeToString ( seconds ) local miliseconds = seconds * 60 * 1000; --local seconds = math.floor ( miliseconds / 1000 ); local minutes = math.floor( seconds / 60 ); miliseconds = miliseconds - ( seconds * 1000 ); seconds = seconds - ( minutes * 60 ); if seconds < 10 then seconds = "0" .. seconds; end if miliseconds < 100 then miliseconds = "0" .. miliseconds; elseif miliseconds < 10 then miliseconds = "00" .. miliseconds; end return minutes .. ":" .. seconds .. ":" .. string.sub ( tostring ( miliseconds ) , 0, 3 ); end --Ty Flaker function getNumberFromText ( rText ) rText = tostring ( rText ); local s = string.gsub ( rText, '[[-|]', ' ' ); return tonumber ( s ); end Edited December 3, 2012 by Guest Link to comment
N1kS Posted December 3, 2012 Share Posted December 3, 2012 addEventHandler ( 'onGamemodeMapStart', root, function ( mapres ) getMapDuration ( mapres ); end ) function getMapDuration ( map ) local meta = xmlLoadFile ( ':' .. getResourceName ( map ) .. '/' .. 'meta.xml' ); local mapnode = xmlFindChild ( meta, 'map', 0 ) or xmlFindChild ( meta, 'race', 0 ) local filename = mapnode and xmlNodeGetAttribute ( mapnode, 'src' ); xmlUnloadFile ( meta ); if filename then local map = xmlLoadFile ( ':' .. getResourceName ( map ) .. '/' .. filename ); if map then local result = xmlFindChild ( map, 'duration', 0 ); outputChatBox ( result ); xmlUnloadFile ( map ); end end return false end Спасибо. Link to comment
TwiX! Posted December 3, 2012 Share Posted December 3, 2012 addEventHandler ( 'onGamemodeMapStart', root, function ( mapres ) getMapDuration ( mapres ); end ) function getMapDuration ( map ) local meta = xmlLoadFile ( ':' .. getResourceName ( map ) .. '/' .. 'meta.xml' ); local mapnode = xmlFindChild ( meta, 'map', 0 ) or xmlFindChild ( meta, 'race', 0 ) local filename = mapnode and xmlNodeGetAttribute ( mapnode, 'src' ); xmlUnloadFile ( meta ); if filename then local map = xmlLoadFile ( ':' .. getResourceName ( map ) .. '/' .. filename ); if map then local result = xmlFindChild ( map, 'duration', 0 ); outputChatBox ( result ); xmlUnloadFile ( map ); end end return false end Спасибо. код не правильный щас edit -- обновил Link to comment
H1TM4N Posted December 3, 2012 Share Posted December 3, 2012 можно сервером изменять расположение стандартного чата клиенту? если да, то как? Link to comment
Memory Posted December 4, 2012 Share Posted December 4, 2012 Здравствуйте, как сделать, чтобы можно было домножать на дробное число какое-либо значение или прибавлять к нему, например, пишу в функции "значение + 5.8", после выполнения функции в scoreboard выводит прежнее значение + 5, а не 5.8. Link to comment
TheNormalnij Posted December 4, 2012 Share Posted December 4, 2012 Возможно, в самой функции идет округление в меньшую сторону, уберите его, если вам не нравится. Link to comment
Flaker Posted December 4, 2012 Share Posted December 4, 2012 Здравствуйте, как сделать, чтобы можно было домножать на дробное число какое-либо значение или прибавлять к нему, например, пишу в функции "значение + 5.8", после выполнения функции в scoreboard выводит прежнее значение + 5, а не 5.8. ищи math.floor в коде... Link to comment
Flaker Posted December 5, 2012 Share Posted December 5, 2012 Или math.round Ну вобще если 5.8 а выводит 5, то это math.floor Link to comment
SweetyWolf Posted December 5, 2012 Share Posted December 5, 2012 Привет всем. Делаю тут мод свой и возник у меня вопрос. У игрока проигрывается анимация будто он плывет под водой (но происходит все дело на суше). Он должен так "доплыть" некоторое расстояние по прямой, попутно передвигая персонажа левее или правее и собирая пикапы. Но я что то не могу придумать, как мне его передвигать в сторону. setElementPosition сбивает анимацию. Есть у кого идеи, как мне сделать так, чтоб можно было персонажа двигать? Вот, если что, как я устанавливаю анимацию: setPedAnimation ( localPlayer, "SWIM", "Swim_Under", -1, true, true, false, true ) Link to comment
Memory Posted December 5, 2012 Share Posted December 5, 2012 Дело в том, что не math.round, не math.floor, не math.ceil нет. Там проще, вот простой пример local playerCount = getPlayerCount() local pointsToWin = playerCount *5.8 . Вот сервер и читает только цифры до какого-либо знака препинания. Есть предложения? Просто очень нужно домножить именно на десятичную дробь Link to comment
Memory Posted December 5, 2012 Share Posted December 5, 2012 Привет всем. Делаю тут мод свой и возник у меня вопрос. У игрока проигрывается анимация будто он плывет под водой (но происходит все дело на суше). Он должен так "доплыть" некоторое расстояние по прямой, попутно передвигая персонажа левее или правее и собирая пикапы. Но я что то не могу придумать, как мне его передвигать в сторону. setElementPosition сбивает анимацию. Есть у кого идеи, как мне сделать так, чтоб можно было персонажа двигать? Вот, если что, как я устанавливаю анимацию: setPedAnimation ( localPlayer, "SWIM", "Swim_Under", -1, true, true, false, true ) Попробуйте вот такой код со стороны сервера. -- DDC OMG generated script, PLACE IT SERVER-SIDE function omg_script27() omg5969 = createObject(7586, 3765.3308105469, -2551.1330566406, 31.09373664856, 0, 0, 0) omgMoveomg5969(1) end function omgMoveomg5969(point) if point == 1 then moveObject(omg5969, 5000, 3765.3308105469, -2551.1330566406, 45.09373664856, 0, 0, 90) setTimer(omgMoveomg5969, 5000, 1, 2) elseif point == 2 then moveObject(omg5969, 5000, 3765.3308105469, -2551.1330566406, 50.09373664856, 0, 0, 90) setTimer(omgMoveomg5969, 5000, 1, 3) elseif point == 3 then moveObject(omg5969, 5000, 3765.3308105469, -2551.1330566406, 60.09373664856, 0, 0, 90) setTimer(omgMoveomg5969, 5000, 1, 4) elseif point == 4 then moveObject(omg5969, 5000, 3765.3308105469, -2551.1330566406, 50.09373664856, 0, 0, 90) setTimer(omgMoveomg5969, 5000, 1, 5) elseif point == 5 then moveObject(omg5969, 5000, 3765.3308105469, -2551.1330566406, 31.09373664856, 0, 0, 0) setTimer(omgMoveomg5969, 5000, 1, 1) end end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), omg_script27) или вот, но одно и тоже, только объекты разные function omg_CJCHRISCRATE() CJCHRISCRATE = createObject(2669, 2508.1999511719, -1671.1999511719, 13.699999809265, 0, 0, 0) omgMoveCJCHRISCRATE(1) end function omgMoveCJCHRISCRATE(point) if point == 1 then moveObject(CJCHRISCRATE, 5000, 2498.5, -1671.4000244141, 13.699999809265, 0, 0, 0) setTimer(omgMoveCJCHRISCRATE, 5000, 1, 2) elseif point == 2 then moveObject(CJCHRISCRATE, 5000, 2508.1999511719, -1671.1999511719, 13.699999809265, 0, 0, 0) setTimer(omgMoveCJCHRISCRATE, 5000, 1, 1) end end addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), omg_CJCHRISCRATE) Link to comment
Flaker Posted December 5, 2012 Share Posted December 5, 2012 Дело в том, что не math.round, не math.floor, не math.ceil нет. Там проще, вот простой пример local playerCount = getPlayerCount() local pointsToWin = playerCount *5.8 . Вот сервер и читает только цифры до какого-либо знака препинания. Есть предложения? Просто очень нужно домножить именно на десятичную дробь Я так понял, ты хочешь округление до определенного знака? Ну вот накидал функцию: num - число которое округлять accuracy - кол-во знаков до которого округлять function myRound(num, accuracy) return math.floor(num*10^accuracy) / 10^accuracy; end local dd = 124.12324 local sd = 1 print(myRound(dd, sd)) Link to comment
Memory Posted December 5, 2012 Share Posted December 5, 2012 Эх, не получается, все функции перебрал, даже math.abs, которая должна показывать число так, как оно есть. Я так понял, ты хочешь округление до определенного знака? Нет, я наоборот не хочу округления, а он округляет. Причём, при math.abs в чат выводит 5.8, а в scoreboard пишет ровно 5. outputChatBox("[Test] " .. getPlayerName(source).. " got "..pointsToWin, getRootElement(), 255, 255, 255, true ) Link to comment
Flaker Posted December 5, 2012 Share Posted December 5, 2012 Ну ищи код с округлением сам... В том коде, что ты давал округления нет... Link to comment
H1TM4N Posted December 6, 2012 Share Posted December 6, 2012 Есть возможноть прикреплять елемнты к костям педа? Нашел только attachElements, но про части педов там ничего нет. Link to comment
Flaker Posted December 6, 2012 Share Posted December 6, 2012 Есть возможноть прикреплять елемнты к костям педа? Нашел только attachElements, но про части педов там ничего нет. https://community.multitheftauto.com/index.php?p=resources&s=details&id=2540 Link to comment
Memory Posted December 6, 2012 Share Posted December 6, 2012 Ну ищи код с округлением сам...В том коде, что ты давал округления нет... Это весь код вычисления, остального ничего нет, ну если хотите вот полный код. exports [ 'scoreboard' ]:addScoreboardColumn ( "Points" ) function refreshData() for k, v in ipairs (getElementsByType("player")) do local account = getPlayerAccount( v ) if isGuestAccount(account) then setElementData( v, "Points", "Guest" ) else local data = getAccountData(getPlayerAccount( v ), "Points" ) if data then setElementData( v, "Points", data ) end end end end setTimer( refreshData, 1000, 0 ) function raceWin( rank ) local acc = getPlayerAccount( source ) local ptzData = getAccountData( acc, "Points" ) local playerCount = getPlayerCount() local pointswin = playerCount *5.8 if rank == 1 then if ptzData then setAccountData( acc, "Points", ptzData + pointswin ) outputChatBox("[Test] " .. getPlayerName(source).. " got "..pointswin, getRootElement(), 255, 255, 255, true ) end end addEventHandler("onPlayerFinish", getRootElement(), raceWin) Link to comment
TwiX! Posted December 6, 2012 Share Posted December 6, 2012 этот код просто убьёт твой сервер, когда будет игроков 10 Link to comment
Kenix Posted December 6, 2012 Share Posted December 6, 2012 Не оптимизированнный код и не понятный в плане логики. Ты можешь хранить все значения в элемент дате и сохранять уже в аккаунт дате именно тогда, когда игрок выходит из сервера, а у тебя вообще не то .. Вообщем я расписал небольшой алгоритм действий, который тебе нужно выполнить: 1. exports[ 'scoreboard' ]:addScoreboardColumn( 'Points' ) 2. Когда игрок залогинелся, то применяем к элемент дате игрока очки из аккаунт даты если они есть, а если данных из аккаунта нету, то 0. 3. Когда игрок финиширует, то просто получай элемент дату игрока, который финишировал и прибавляй одно очко, ну а далее изменяй элемент дату. 4. Когда игрок выходит из сервера или выходит из аккаунта, то получай элемент дату игрока и сохраняй её в аккаунт дате. Link to comment
Memory Posted December 6, 2012 Share Posted December 6, 2012 Спасибо за алгоритм, обязательно исправлю старый код на новый. Но мне интересно, мой же код тоже работает, почему он просто убьёт твой сервер, когда будет игроков 10 Link to comment
TwiX! Posted December 6, 2012 Share Posted December 6, 2012 Спасибо за алгоритм, обязательно исправлю старый код на новый. Но мне интересно, мой же код тоже работает, почему он просто убьёт твой сервер, когда будет игроков 10 во 1 у тебя будет ошибка, т.к ты пропустил end в raceWin во 2 смотри каждую секунду в твой дом прибегают 10 или 20 человек, которых ты не знаешь, ты например выгоняешь их, и через секунду они опять приходят и так бесконечно. в3 опять же 10 или 20 человек приходят тебе в дом, и ты их впускаешь и кормишь их, получается что ты кормишь их каждую секунду не проще ли сделать это 1 раз и выгнать людей тоже 1 раз? в4 всем этим игрокам ты присваиваешь дату, то есть это 20 запросов в базу данных sql каждую секунду представь например у тебя там за 2 месяца акков 1500 накопилось, на них есть эти данные, то есть sql запрос ищет в этой таблице игрока, берёт данные, записывает, зачем тебе этот геморой? если можно сделать только ОДНОМУ игроку, который финишировал Link to comment
el_motoblock Posted December 7, 2012 Share Posted December 7, 2012 Как воспроизвести звук из STREAM/Ambience? Или playSoundFrontEnd это может? А то ведь на вики я посмотрел 0 - 20 Selection sounds27 - 30 Bullet sounds 32 - 33 Selection sounds а ведь эти звуки выстрелов находятся в папке SFX . Я конечно могу просто выцепить звук и юзануть playSound3D, но экономия ресов мне как-то более по душе. Вобщем есть ли возможность воспроизвести звук из STREAM'a? 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