This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Проблема Не передаются данные с сервера на клиент

denybmp

Новый участник
27 Июл 2024
7
0
3
Нужно сделать систему, которая берет информацию с базы данных, пересылает на клиент, а с клиента уже на cef. Все работает прекрасно, кроме момента, когда данные пересылаются на клиентскую часть. Event просто не вызывается. Все файлы подключены и работают правильно, никаких ошибок нету

Команда для выдачи денег на серверной части

JavaScript:
mp.events.addCommand('givemoney', (player, fullText, amount) => {
        mp.events.call('getCash', amount)
        console.log(`givemoney ${amount}`)
});

Server-side

JavaScript:
mp.events.add('onUpdateCash', (player) => {
    pool.query('SELECT cash FROM accounts WHERE login = ?', [playerLogin], (err, results) => {
        console.log(`player money ${results[0].cash}`)
        player.call("updateCashEvent", results[0].cash)
    })
})

mp.events.add('getCash', (amount) => {
    pool.query('UPDATE accounts SET cash = cash + ? WHERE login = ?', [amount, playerLogin], (err, results) => {
        console.log(`added cash ${amount}`)
        mp.events.call('onUpdateCash')
    })
})

Client side

JavaScript:
mp.events.add('updateCashEvent', (cashAmount) => {
    console.log('browser executed')
    hudBrowser.execute(`updateCash(${cashAmount})`)
})

CEF

JavaScript:
const updateCash = (cashAmount) => {
    moneyCashText.innerText = `${cashAmount}`;
}
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
1,773
1,305
5
Похоже, проблема может быть связана с тем, что функция onUpdateCash требует параметр player, который не передается при вызове из getCash. Убедитесь, что передаете этот параметр при вызове onUpdateCash.
 

denybmp

Новый участник
27 Июл 2024
7
0
3
Функция onUpdateCash срабатывает, и это можно понять по console.log, который выводится, но на моменте player.call("updateCashEvent", results[0].cash) функция не вызывается и данные на клиент не передаются (что также можно понять по console.log в функции updateCashEvent, которого нету в консоле). Также пробывал вызывать не через player.call, а через mp.events.call - результат тот же
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
682
348
161
30
JavaScript:
player.call("updateCashEvent", [results[0].cash])
Ошибка в структуре вызова эвента, должен быть массив с значениями. У вас просто значение.
 

X-Clusiv

Модератор
Команда форума
high coder
4 Окт 2020
682
348
161
30
При этом сам евент на клиенте корректировать не нужно
 

denybmp

Новый участник
27 Июл 2024
7
0
3
Если я правильно понял, то сейчас серверная часть у меня выглядит так:

JavaScript:
mp.events.add('onUpdateCash', (player) => {
    pool.query('SELECT cash FROM accounts WHERE login = ?', [playerLogin], (err, results) => {
        console.log(`player money ${results[0].cash}`)
        player.call('updateCashEvent', [results])
    })
})

Но ничего не сработало, функция все равно даже не вызывается, не говоря уже о том, чтобы передать данные. Также пробывал через JSON.stringify, тот же результат
 

projectx

Участник портала
9 Май 2024
34
9
20
На клиенте ты получаешь int, а передаешь весь результат запроса с БД. Крайне не рекомендую каждый ивент апдейта денег делать запрос в бд, создай массив с аккаунтами, которые будут сохраняться с бд каждые 20-30 минут.

Server-Side
JavaScript:
mp.events.add('onUpdateCash', (player) => {
    pool.query('SELECT cash FROM accounts WHERE login = ?', [playerLogin], (err, results) => {
        console.log(`player money ${results[0].cash}`)
        player.call('updateCashEvent', results[0].cash)
    })
})
 
Реакции: Inoi

projectx

Участник портала
9 Май 2024
34
9
20
CEF


JavaScript:
const updateCash = (cashAmount) => {
    moneyCashText.innerText = cashAmount;
}
 

youngBeaver

Мастер
high coder
24 Янв 2023
1,146
692
171
24
Если сервер крашнится, то мы получим тонну негатива от отката всех сделок игроков, покупок и так далее за 20 минут. С потоком ниче не случится, если мы будем каждый запрос отправлять сразу при действии.
 
Реакции: Fumarie

projectx

Участник портала
9 Май 2024
34
9
20
console.log на клиенте не работает, используй mp.console.logInfo, оно выведет в консоль F11
 

denybmp

Новый участник
27 Июл 2024
7
0
3
Изначально у меня было

JavaScript:
player.call('updateCashEvent', results[0].cash)

Меня сейчас не так волнует оптимизация если честно, а то почему функция updateCashEvent не вызывается с сервера на клиент, где была создана, из-за чего на клиент я не могу получить количество денег, а потом вывести в cef
 

projectx

Участник портала
9 Май 2024
34
9
20
Если сервер крашнется, есть процесс отслеживающий processexit, хих кодир потоковый)
 

projectx

Участник портала
9 Май 2024
34
9
20
Обнови код цефа, который я скинул
 

youngBeaver

Мастер
high coder
24 Янв 2023
1,146
692
171
24
Умник, я понимаю ты обижаешься за то, что я везде ставлю тебя персоной нон грата. Но мне очень интересно, читал ли ты документацию к этому методу? Как ты собираешься отловить момент фатального завершения процесса кодом внутри процесса? А после понимания, что ты будешь делать костыли ты хоть как-то попытайся оправдать переход на сейв в 20-30 минут.
 

denybmp

Новый участник
27 Июл 2024
7
0
3
mp.console.logInfo(browser executed);

У тебя так?
И почему в playerMoney у тебя в консоли выходит array?
array выходил потому что я в console.log для эксперимента вводил не results[0].cash, a results. Сейчас я поменял уже на results[0].cash
а строчка с mp.console.logInfo у меня такая
JavaScript:
    mp.console.logInfo(`client browser is here`)

я думаю тут не так важно что именно выводится как то, что функция updateCashEvent по непонятным причинам просто не вызывается
 

projectx

Участник портала
9 Май 2024
34
9
20
Никто не обижается, просто кто-то видел, как ты на серверке создаешь блипы и маркеры для работ (именно метки)
 

youngBeaver

Мастер
high coder
24 Янв 2023
1,146
692
171
24
Что ещё раз доказывает, что на людей с красными флагами не стоит даже внимание обращать. Видеть ты это мог лишь в работе строителя, которая была мною сделана как тестовое задание. На момент вопроса "Почему не работают на клиенте стабильно блипы?", мне ответили, что создавать их необходимо в данном случае на сервере. В этот момент был первый день, как я стоял на проекте. Вероятнее всего был какой-то план или идеи, как это можно сделать, но с другими разработчиками я даже не успел познакомиться. Лишь в последствии привыкнув +- к самой сборке я понял, что кседоз вместе с меромундом переписывают редагу и на текущий момент большинство костылей вырезаны.
Но мне также всё очень веселит как ты продолжаешь сталкерить мой код, пытаться обойти моё мнение о приеме разработчиков через личные сообщения руководителя.
Мне, кстати, очень жаль, что многие недобросовестные разработчики очень умело показывают минусы и забывают про то, что уже в районе месяца основной план на проект - рефакторинг.
 
Реакции: Lavanda и projectx

projectx

Участник портала
9 Май 2024
34
9
20
И почему ты такой бред пишешь?)
Если у тебя будет try, catch - фатального краша не будет.
Никто не отменял сохранение в потоках делать, а получение данных кэшировать