Need help?
Create a topic in the appropriate section
Don't write everything in the chat!Take a look at the marketplace
There you can buy
everything related to game serversDon't want a ban?
Please read our rules
Don't disturb the order!Sell or buy?
Use services of the guarantor
We will make your deal safe



- 0
extDB2 совместима с виртуальным гаражом или аукционом?
Asked by
dok379
-
Similar Content
-
By Miduznya
Всем привет, чет не нашел не где как можно в ручную обновить через .bat или .cmd файл
если есть у кого такой поделитесь плиз. Прошу сильно не пинать если есть такая тема дайте ссылку
-
By BorizzK
Поскольку штатный чат бегемоты сломали, а чат-одминка лучший способ тестирования функций и параметров/значений на стороне сервера
Реши сначала на клиенте чат отмоддидь, но потом обнаружил что Даон в VPP своей это уже сделал и мне остается только отмоддидь одну его функцию на стороне сервера, что я и сделал
Посмотрел
На клиенте моддинг строки чата с перехватом 5_Mission\GUI
ChatInputMenu.c
modded class ChatInputMenu { override bool OnChange(Widget w, int x, int y, bool finished) { if (!finished) return false; string text = m_edit_box.GetText(); if (text != "" && (text.Substring(0,1)) == "/") { GetRPCManager().SendRPC( "RPC_MissionServer", "HandleChatCommand", new Param1<string>(text), true); m_close_timer.Run(0.1, this, "Close"); //Exit out as we don't want to send commands in chat for others to see. return true; } return super.OnChange(w, x, y, finished); } }; если строка начинается на / то через RPC засылаем на сервер RPC передавая ей текст и завершаем функцию
ну а если не на / вызываем нативную функцию
На сервере в классе MissionServer зареген RPC "RPC_MissionServer" (используя функционал мода CF)
void MissionServer() { GetRPCManager().AddRPC( "RPC_MissionServer", "RequestLockServer", this, SingeplayerExecutionType.Server ); m_DEXML = new DEXML; //=============RPC's==================== GetRPCManager().AddRPC( "RPC_ReadFromXML", "GetTypesXML", this, SingeplayerExecutionType.Server ); GetRPCManager().AddRPC( "RPC_MissionServer", "HandleChatCommand", this, SingeplayerExecutionType.Server ); //====================================== } Сервер получая RPC "RPC_MissionServer" вызывает из этого класса функцию HandleChatCommand (собственно так же используется функционал мода CF)
Как и что вдаваться в подробности смысла нет
Вот собственно она
void HandleChatCommand( CallType type, ParamsReadContext ctx, PlayerIdentity sender, Object target) { Param1<string> data; //chat string if ( !ctx.Read( data ) ) return; if (type == CallType.Server) { GetChatCommandManager().ParseCommand(data.param1,sender.GetPlainId()); } } Ну а нам осталось только перехватить то что прилетает в эту функцию и забрать себе
override void HandleChatCommand(CallType type, ParamsReadContext ctx, PlayerIdentity sender, Object target) { Param1<string> data; //chat string if (!ctx.Read(data)) return; if (type == CallType.Server && sender && data.param1) { AdminMod.OnAdminChatRequestVPP(sender, data.param1); return; } } Все получили, все прилетело улетело куда надо
Но!
нам в нашей одминке нужно получить перса отправителя
Попытка сделать это так:
class AdminMod { void OnAdminChatRequestVPP(Playeridentity sender, string command) { PlayerBase player = GetAdminPlayerByIdentity(sender); if (player) { AdminCommand(player, command); } } PlayerBase GetAdminPlayerByIdentity(PlayerIdentity sender) { array<Man> players = new array<Man>; GetGame().GetPlayers(players); for ( int i = 0; i < players.Count(); ++i ) { if (players[i].GetIdentity() == sender && IsAdmin(sender)) { return PlayerBase.Cast(players[i]); } } return NULL; } bool IsAdmin(PlayerIdentity sender) { if (m_AdminsList.Contains(sender.GetPlainId())) { return true; } return false; } AdminCommand(PlayerBase player, string command); { //тут обрабочик и тп } }
Почти все норм
Но условие
if (players.GetIdentity() == sender)
НИКОГДА НЕ РАБОТАЕТ
ВООБЩЕ
по итогам логгирования выяснил что у одного и того же клиента players.GetIdentity() != sender - хотя в sender прилетает как бы Identity
Сделал проверку так
PlayerBase GetAdminPlayerByIdentity(PlayerIdentity sender) { array<Man> players = new array<Man>; GetGame().GetPlayers(players); for ( int i = 0; i < players.Count(); ++i ) { if (players[i].GetIdentity().GetPlainId() == sender.GetPlainId() && IsAdmin(sender)) { return PlayerBase.Cast(players[i]); } } return NULL; } И все взлетело!
НО!
Как?
Два разных Identity и функция GetPlainId() возвращает одинаковые steam UID
Вот как я Вас спрашиваю?
Или это CF гадит...
-
By
NoNameUltima
Есть идейка накатать приложение(в основном под android), с помощью которого игрок Вашего сервера сможет читать, и писать в игровой чат.
Вход по UID + пароль.(таблица с UID+пасс, хранится в SQL БД).
Пароли можно выдавать через ВК, или накидать скрипт который будет позволять их создавать в игре.
Как в целом идея?)
-
By
MrMiBl
Возник вопрос: как запустить выделенный сервер имея только mpmission? Хочу запустить серв кооп миссии Antistasi altis
Вот сам файл миссии скачать архив
Описание и установка:
Вообщем помощь нужна в написание батника, или чё там сделать надо....
-
-
Our picks
extDB2 совместима с виртуальным гаражом или аукционом?
Share this post
Link to post
Share on other sites