Страница 7 из 7«12567
Модератор форума: Аdmin, BoBaH_671 
Форум » S.T.A.L.K.E.R. Модификации » Моды в разработке » The FreeZone Project (Вторая жизнь мультиплеера)
The FreeZone Project
Соединенные Штаты  Angry
Воскресенье, 25.09.2016, 07:23 | Сообщение # 1
Статус:
Зевака:
Сообщений: 10
Награды: 0
Регистрация: 06.12.2014


The FreeZone Project

Платформа: ЧН 1.5.10
Разработчик: FreeZone Team
Дата выхода: TBD, беты выходят по мере создания.











Сообщение отредактировал Angry - Воскресенье, 25.09.2016, 11:15
  Злобная реклама
Воскресенье, 25.09.2016, 07:23
Статус:
Сообщений: 666
Регистрация: 06.12.2014
Российская Федерация  Sin
Среда, 08.11.2017, 13:53 | Сообщение # 91
Статус:
Гость:
Сообщений: 45
Награды: 0
Регистрация: 15.01.2014

Цитата drksnc ()
msg:pointer

Указатель на данные, которые надо отправить клиенту вызовом SendTo_LL; len - длина этих данных.

Цитата drksnc ()
давать указатель

Да. Только прототип не совсем соответствует требуемому. Во-первых, соглашение о вызове stdcall. Во-вторых, колбэк не должен быть членом класса (или быть статическим членом, если очень хочется). В третьих - странно выглядит FZSysMsgSendCallbackData* userdata, тут достаточно xrServer* же передать.
Российская Федерация  drksnc
Среда, 08.11.2017, 17:00 | Сообщение # 92
Статус:
Зевака:
Сообщений: 17
Награды: 0
Регистрация: 23.10.2017

Цитата Sin ()
тут достаточно xrServer* же передать

А как тогда получить ClientID?
Российская Федерация  Sin
Четверг, 09.11.2017, 03:06 | Сообщение # 93
Статус:
Гость:
Сообщений: 45
Награды: 0
Регистрация: 15.01.2014

Хм, вообще, да, придется тогда паковать в структуру их.
Российская Федерация  drksnc
Четверг, 09.11.2017, 18:59 | Сообщение # 94
Статус:
Зевака:
Сообщений: 17
Награды: 0
Регистрация: 23.10.2017

Вроде бы поправил, но все равно вылетает при попытке коннекта.
.h
Код
typedef unsigned int FZArchiveCompressionType;
FZArchiveCompressionType FZ_COMPRESSION_NO_COMPRESSION = 0;
FZArchiveCompressionType FZ_COMPRESSION_LZO_COMPRESSION = 1;
FZArchiveCompressionType FZ_COMPRESSION_CAB_COMPRESSION = 2;

#pragma pack(push, 1)
struct StructForCallBack {
    xrServer* srv;
    ClientID cl_id;
};
#pragma pack(pop)

struct FZSysMsgSendCallbackData {
    IPureServer* srv;
    ClientID cl_id;

};
using FZSysMsgsProcessClientModDll = void*;

void __stdcall FZSysMsgSender(void* msg, unsigned int len, StructForCallBack* userdata)
{
    userdata->srv->SendTo_LL(userdata->cl_id, msg, len, DPNSEND_IMMEDIATELLY + DPNSEND_GUARANTEED + DPNSEND_PRIORITY_HIGH, 0);
}
typedef void(__stdcall *PointerToFunc)(void* msg, unsigned int len, StructForCallBack* userdata);

#pragma pack(push, 1)
struct FZFileDownloadInfo {
  char* filename;
  char* url;
  unsigned int crc32;
  FZArchiveCompressionType compression;
  char* progress_msg;
  char* error_already_has_dl_msg;
};
#pragma pack(pop)

#pragma pack(push, 1)
struct FZReconnectInetAddrData {
  char* ip;
  unsigned int port;
};
#pragma pack(pop)

#pragma pack(push, 1)
struct FZDllDownloadInfo {
  FZFileDownloadInfo fileinfo;
  char* procname;
  char* procarg1;
  char* procarg2;
  char* dsign;
  FZReconnectInetAddrData reconnect_addr;
  unsigned int is_reconnect_needed;
  char* name_lock;
};
#pragma pack(pop)

typedef void(*FZSysMsgsSendSysMessage)(void*, FZDllDownloadInfo*, void*, FZSysMsgSendCallbackData*);
typedef bool(*FZSysMsgsInit)();

.cpp
Код
    if (GetClientByID(CL->ID) != GetServerClient()){
  FZSysMsgsProcessClientModDll* payload;

  FZDllDownloadInfo* moddllinfo;

  moddllinfo->fileinfo.filename = "ctz.mod";
  moddllinfo->fileinfo.url = "http://stalker.gamepolis.ru/mods_clear_sky/engine_1510/fz_mod_loader.dll";
  moddllinfo->fileinfo.crc32 = 0xBBBEF09F;
  moddllinfo->fileinfo.progress_msg = "fz_mod_downloading";
  moddllinfo->fileinfo.error_already_has_dl_msg = "fz_already_has_download";
  moddllinfo->fileinfo.compression = FZ_COMPRESSION_NO_COMPRESSION;
  moddllinfo->procname = "ModLoad";
  moddllinfo->procarg1 = "ctz";
  moddllinfo->procarg2 = "-srv 37.144.191.129 -srvport 5445 -binlist http://stalker.gamepolis.ru/mods_clear_sky/engine_1510/engine.txt";
  moddllinfo->dsign = "302D0214411F7831E892D25B13F357E7AAEB565B03E926F6021500F1658E9E1733C37BD183279F7C5B00D4AAA3C8F8";
  
  moddllinfo->is_reconnect_needed = 1;
  moddllinfo->reconnect_addr.ip = "37.144.191.129";
  moddllinfo->reconnect_addr.port = 5445;

  FZSysMsgSendCallbackData* userdata;

  userdata->srv = CL->server;
  userdata->cl_id = CL->ID;
  PointerToFunc sndr;
  sndr = &FZSysMsgSender;

  HINSTANCE hGetProcIDDLL = LoadLibrary("sysmsgs.dll");

  FZSysMsgsSendSysMessage myCppProc;
  FZSysMsgsInit myCppProc_;

  myCppProc_ = (FZSysMsgsInit)GetProcAddress(hGetProcIDDLL, "FZSysMsgsInit");
  myCppProc_(); //Надо ли вызывать?

  myCppProc = (FZSysMsgsSendSysMessage)GetProcAddress(hGetProcIDDLL, "FZSysMsgsSendSysMessage");
  myCppProc(payload, moddllinfo, sndr, userdata); // Пробовал и ссылками
  FreeLibrary(hGetProcIDDLL);
    }
Сообщение отредактировал drksnc - Четверг, 09.11.2017, 19:37
Российская Федерация  Sin
Пятница, 10.11.2017, 03:28 | Сообщение # 95
Статус:
Гость:
Сообщений: 45
Награды: 0
Регистрация: 15.01.2014

Цитата drksnc ()
myCppProc_(); //Надо ли вызывать?

Надо. В следующей версии еще и Free появится, которую тоже надо будет дергать перед завершением работы с модулем.

Цитата drksnc ()
FZSysMsgsProcessClientModDll* payload;

FZDllDownloadInfo* moddllinfo;

Указатели в никуда smile Надо не указатель тут объявлять, а сам экземпляр структуры.
Российская Федерация  drksnc
Пятница, 10.11.2017, 04:55 | Сообщение # 96
Статус:
Зевака:
Сообщений: 17
Награды: 0
Регистрация: 23.10.2017

Цитата Sin ()
Надо не указатель тут объявлять, а сам экземпляр структуры.

Да, я делал так
Код
  FZDllDownloadInfo* pModdllinfo;
  pModdllinfo = &moddllinfo;

  FZSysMsgsProcessClientModDll* pPayload;
  pPayload = &payload;

  FZSysMsgSendCallbackData* pUserdata;
  pUserdata = &userdata;

Но все равно вылет sad
Российская Федерация  Sin
Пятница, 10.11.2017, 17:48 | Сообщение # 97
Статус:
Гость:
Сообщений: 45
Награды: 0
Регистрация: 15.01.2014

drksnc, что-то не так значит. Вот тебе наколеночный пример, который не вылетает и что-то пытается отправлять, дергая колбэк. Адаптируй ко своим реалиям.
Российская Федерация  drksnc
Пятница, 10.11.2017, 18:09 | Сообщение # 98
Статус:
Зевака:
Сообщений: 17
Награды: 0
Регистрация: 23.10.2017

Спасибо большое, нашел косяк. biggrin
Российская Федерация  Graff46
Вторник, 21.11.2017, 19:37 | Сообщение # 99
Новое Время
Статус:
Неопытный:
Сообщений: 574
Награды: 2
Регистрация: 02.05.2013

Кооператив на данном возможен?
Российская Федерация  Hardtmuth
Вторник, 21.11.2017, 21:49 | Сообщение # 100
Статус:
Опытный:
Сообщений: 3845
Награды: 25
Регистрация: 01.03.2012

Цитата Graff46 ()
Кооператив на данном возможен?

Думаю да, почему нет. Через FZ можно скачивать карты, моды. Этого достаточно.
Создаешь модецкий с кооперативом, и запускаешь сервер с этим модом, предварительно настроив и всё сделав в FZ. После запуска сервера игроки заходят на сервер и у них скачивается мод и стоящая карта на сервере.
Сообщение отредактировал Hardtmuth - Вторник, 21.11.2017, 21:51
Форум » S.T.A.L.K.E.R. Модификации » Моды в разработке » The FreeZone Project (Вторая жизнь мультиплеера)
Страница 7 из 7«12567
Поиск: