XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

ТЕСТИРУЕМ ЧАТИК ДА

для начала попробуйте открыть в проводнике windows путь: \\xgm.gameemu.com\warcraft-server
если не открывается, то или косяк с провайдером, или не знаю (на вин8 наблюдается какая-то хрень)
видимо, некоторые провайдеры отключают исходящий трафик SMB... если так будет наблюдаться у большинства.. чтож, очередная ненужная поделка =)
отпишитесь в теме, у кого директория не открывается проводником и какой у вас провайдер
Качаете карту, после запуска она уже должна запросить доступ к моей папке, потом предложить залогиниться/зарегаться (это почти одно и то же)
ещё проблема с локал файлами может быть: xgm.ru/p/wc3/localfiles
» Приложение для собственного сервера, инструкция и Source code

Закрытая тема
 
Карточка
Kicked by SSrunX
offline
Опыт: 2,017
Активность:
darkowlom, ну да, а после удачной синхронизации всего-ничего ещё сделать 40 качественных карт
Старый 28.03.2013, 19:18
darkowlom
Анархо-коммунизм
offline
Опыт: 31,669
Активность:
Карточка:
darkowlom, ну да, а после удачной синхронизации всего-ничего ещё сделать 40 качественных карт
Ну это уже зависит от разрабов и маштабов , я когдато рпг делал еле лес впихал в 400х400
Старый 30.03.2013, 03:49
Zetox

offline
Опыт: 1,738
Активность:
ScorpioT1000, а с импортом это получится?? типо \\123.456.789.012\warcraft-server\models\ ...
Старый 30.03.2013, 13:14
ScorpioT1000
Работаем
online
Опыт: отключен
darkowlom, проблема тут встает не так в геймплее, как в карте путей и всей логике игры, она ведь будет не в карте, а на сервере, иначе неизбежно читерство.
Zetox, не знаю, тогда уж микс сразу =) тока вот что будет, если сервер не ответит. Одно дело скрипт - он поймет, если что не так и можно както обработать отказ.
Старый 30.03.2013, 14:18
ScorpioT1000
Работаем
online
Опыт: отключен
Немного про систему обмена сообщений.
Как выглядит на клиенте:
// ScorpioT1000 (c) 2013
library scmessaging uses scnetwork, sclogichandler


hashtable mesCurrentMessage
string mesPendingKey = null
bool mesIsPending = true
string mesOutgoingK[]
string mesOutgoingV[]
int mesOutgoingN = 0

string GetClientToServerFilename() {
    return coreDomainCurrent+"\\warcraft-server\\sessions\\c2s_"+accountName+sesssionDelim+sessionId+​".j";
}

string GetServerToClientFilename() {
    return coreDomainCurrent+"\\warcraft-server\\sessions\\s2c_"+accountName+sesssionDelim+sessionId+​".j";
}

// executed by Preloader
void PushMessageKey() {
    mesPendingKey = GetPlayerName(Player(15));
}

// executed by Preloader
void PushMessageValue() {
    if(mesPendingKey != null) {
        SaveStr(mesCurrentMessage,0,StringHash(mesPendingKey),GetPlayerName(Player(15)));
        mesPendingKey = null
    }
}

// executed by Preloader
void FinishMessage() {
    mesIsPending = false
}

// get received message value by key as a string 
string GetMessageValue(string byKey) { 
    return LoadStr(mesCurrentMessage,0,StringHash(byKey));
}
// get received message value by key as an int
int GetMessageValueInt(string byKey) {
    return S2I(LoadStr(mesCurrentMessage,0,StringHash(byKey)));
}
// get received message value by key as a float
float GetMessageValueFloat(string byKey) {
    return S2R(LoadStr(mesCurrentMessage,0,StringHash(byKey)));
}

// add key and value to the outgoing message
void PushOutgoingField(string k, string v) {
    if(mesOutgoingN > 8190) { return; }
    mesOutgoingK[mesOutgoingN] = k;
    mesOutgoingV[mesOutgoingN] = v;
    mesOutgoingN++;
}

// sender - receiver

timer mesReceiverTimer = null
timer mesSenderTimer = null
float mesReceiverTimerPeriod = 2
float mesSenderTimerPeriod = 2.2

// clear incoming message cache
void ClearMessage() {
    FlushChildHashtable(mesCurrentMessage,0);
    mesIsPending = true;
}

// reveive incoming message if it's ready (pending) and load into cache
bool ReceiveMessage() {
    if(mesIsPending) { return false; }
    Preloader(coreDomainCurrent+coreDestinationAddress);
    return true;
}

// clear outgoing message cache
void ClearOutgoing() { mesOutgoingN = 0; }

// send outgoing message from cache
void SendMessage() {
    int i=0;
    if(mesOutgoingN > 0) {
        PreloadGenClear();
        PreloadGenStart();
        Preload("\" ScCommunicatorServer {");
        while(i < mesOutgoingN) {
            Preload("\";"+mesOutgoingK[i]+" = "+mesOutgoingV[i]+";");
        }
        Preload("\"}");
        PreloadGenEnd(GetServerToClientFilename());
    }
}

// periodically recieves messages
void ReceiveHandler() {
    if(ReceiveMessage()) { // receive only if finished
        HandleLogic(mesCurrentMessage);
        ClearMessage();
    }
}

// periodically sends messages
void SendHandler() {
    SendMessage();  // send only if finished
    ClearOutgoing();
}

// start (or restart) messaging system
void StartSenderReceiver() {
    if(mesReceiverTimer == null) { 
        LocalMsg("StartSenderReceiver: error, messaging is not initialized"); 
        return; 
    }
    PauseTimer(mesReceiverTimer);
    PauseTimer(mesSenderTimer);
    ClearMessage();
    ClearOutgoing();
    TimerStart(mesReceiverTimer, mesReceiverTimerPeriod, true, function ReceiveHandler);
    TimerStart(mesSenderTimer, mesSenderTimerPeriod, true, function SendHandler);
}



void InitMessaging() {
    mesCurrentMessage = InitHashtable();
    mesReceiverTimer = CreateTimer();
    mesSenderTimer = CreateTimer();
    StartSenderReceiver();
    LocalMsg("Messaging system initialized");
}

endlibrary // ScorpioT1000 (c) 2013
отрывок с сервера:

    static bool SaveFileForWarcraft(const Options & src, const std::wstring & dst) {
        ptrdiff_t f = Environment::CreateUtf8File(dst);
        if(!f) { 
            Environment::Warning(L"Cannot create, check the folder rights: "+dst);
            return false; 
        }
        Environment::WriteStringToUtf8File(f,L"function PreloadFiles takes nothing returns nothing");
        for(OptionsConstIterator it = src.GetRawData().begin(); it != src.GetRawData().end(); ++it) {
            Environment::WriteStringToUtf8File(f,L"call SetPlayerName(Player(15),\""+it->first+L"\")");
            Environment::WriteStringToUtf8File(f,L"call ExecuteFunc(\"PushMessageKey\"");
            Environment::WriteStringToUtf8File(f,L"call SetPlayerName(Player(15),\""+it->second+L"\")");
            Environment::WriteStringToUtf8File(f,L"call ExecuteFunc(\"PushMessageValue\"");
        }
        Environment::WriteStringToUtf8File(f,L"call ExecuteFunc(\"FinishMessage\"");
        Environment::WriteStringToUtf8File(f,L"endfunction");
    }
ScorpioT1000 добавил:
т.е. на сервере пока готово только управление базой данных из консоли и запись ее в файл (почти), в том числе для отправки клиенту
на клиенте готов обработчик сообщений и интерфейс доступ к ним как ключ+значение, также написал обработчик логики (сетевая логика крутится в цикле приемника сообщений от сервера, который "толкает" игру, как только какие-то новые данные поступили)
ну и желательно было бы сделать интерполяцию лол =)
ScorpioT1000 добавил:
так, дописал worldsave систему, теперь сервер будет периодически скидывать всю базу в файл + делать это перед завершением работы
ну и соответственно, восстанавливать при запуске
Старый 31.03.2013, 10:34
ScorpioT1000
Работаем
online
Опыт: отключен
Уже сделал авторизацию, на обеих сторонах, она работает =)
Старый 01.04.2013, 10:57
Goodie

offline
Опыт: 2,825
Активность:
Леся Кирова, Круть. Это что значит? Можно будет с 12+ игроками играть?
Старый 01.04.2013, 11:29
Zetox

offline
Опыт: 1,738
Активность:
Цитата:
Сообщение от Goodie
Можно будет с 12+ игроками играть?

Можно будет +12 игрокам переписываться.

Zetox добавил:
Леся Кирова, А какой шанс, что файлы потеряются? к примеру за небольшое количество времени, от 1 игрока создаться 2 файла?.
Старый 01.04.2013, 12:17
ScorpioT1000
Работаем
online
Опыт: отключен
нет, тут все быстро и круто получилось =) думал будет медленно...
я сделал везде стейты "пендинг", т.е. всякие флаги в сообщениях что сообщение дописано и каждая сторона взаимно работает с сообщениями
т.е. игра пишет c2s, принимает s2c и удаляет s2c
сервер пишет s2c, принимает c2s и удаляет c2s
логика примерно такая у клиента:
  • крутится хендлер приема и отправки
  • ктото хочет чето-то отправить (какойто модуль)
    • он вызывает пуш и добавляет ключ-значение (в кеш)
  • это может происходить откуда угодно сколько угодно раз
  • потом в какой-то момент хендлер блокирует пуш (цикл вейтов) и отправляет накопившееся сообщение из кеша и очищает его
    • после чего пуш разблокируется
  • отдельно от этого хендлер грузит в отдельный кеш входящее (если есть)
    • ну и доступ к входящим тоже открытый, только там доступ дается по флагу "загружено полностью" - да или нет
у сервера всё проще - там просто блокировки и фврайт
кстати стоит заметить - весь сервер написан на юникоде (первый раз пишу действительно всё на юникоде), попробуем еще кодировку сделать адекватную =)
Леся Кирова добавил:
Goodie, с игрой всё совсем больно будет ... если у кого-то есть дофига времени - пожалуйста, я опенсурс выложу
и опишу всё
а пока я сделаю чтобы каждый мог добавить глобальный чат себе в карту

Отредактировано Леся Кирова, 01.04.2013 в 13:18.
Старый 01.04.2013, 13:11
Goodie

offline
Опыт: 2,825
Активность:
Давай. Я попробую ее себе поставить в мап =)
Старый 01.04.2013, 13:58
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
с игрой всё совсем больно будет ... если у кого-то есть дофига времени - пожалуйста, я опенсурс выложу
и опишу всё
Было бы неплохо.
Старый 01.04.2013, 17:25
Zetox

offline
Опыт: 1,738
Активность:
Цитата:
Сообщение от Vadik29
с игрой всё совсем больно будет ... если у кого-то есть дофига времени - пожалуйста, я опенсурс выложу
и опишу всё
Было бы неплохо.


Ты понимаешь объем работы???


Леся Кирова, Добавь лучше функции:

Код:
void  SaveStrServer(int key,string valuev);
string   LoadStrServer(int key);
Старый 01.04.2013, 18:21
ScorpioT1000
Работаем
online
Опыт: отключен
Zetox, оно заспамится =) ну тоесть никому нельзя доверять ... то, что ты их будешь использовать не защищает от того, что другие будут. Именно поэтому тут очень быстро с логином выдается айди сессии, который знает только клиент в момент текущей игры.
И даже если к безопасному айди игрока ассайнить, то ничто не мешает тебе украсть его пароль, перехватив команду логин в своей карте и потом юзать как вздумается
Старый 01.04.2013, 18:30
Goodie

offline
Опыт: 2,825
Активность:
Леся Кирова, Только не забудь сделать какую ни будь проверку на исходящий поток. Вдруг у кого интернета нет, а он со одиночки хочет счатиться :D
Старый 01.04.2013, 18:42
ScorpioT1000
Работаем
online
Опыт: отключен
Последние результаты:
Надо будет привести сервер в порядок - добавить периодические очистки мусорных файлов
и вообще при выходе из системы удалять сессию
и периодик ворлдсейв
также пароль почему-то пропускает каждый раз новый
еще добавить команду "кто онлайн" и в какой сейчас карте =)

Отредактировано ScorpioT1000, 02.04.2013 в 14:44.
Старый 01.04.2013, 19:43
Goodie

offline
Опыт: 2,825
Активность:
ScorpioT1000, лол, а как пароль скрывать, ты ж в чате пишешь)) Придется war3mapSkin менять))
Старый 02.04.2013, 16:05
ScorpioT1000
Работаем
online
Опыт: отключен
придется что-нибудь придумать. можно сделать вирт. клавиатуру через dgui ...
есть идеи? т.е. как текстово это сделать
Старый 02.04.2013, 16:09
IceFog

offline
Опыт: 6,443
Активность:
Игра будет у каждого запущена в сингле? Пусть сервер не показывает другим игрокам сообщения, которые начинаются с определенного символа, например: "/".
Старый 02.04.2013, 16:13
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
можно сделать кучу скилов и провести их соответствие с символами. Или комбинациями стрелок набирать.
да, я извращенец
Старый 02.04.2013, 16:14
ScorpioT1000
Работаем
online
Опыт: отключен
а если не в сингле? это не обязательное услвоие
ScorpioT1000 добавил:
вот со стрелками меньше возни с юнитами, но мне кажется это неудобно
можно диалогами попробовать
Старый 02.04.2013, 16:19
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 17:28.