Понедельник, 08 Сентября 2025, 17:22

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Результаты поиска
DeswingДата: Воскресенье, 26 Декабря 2010, 14:59 | Сообщение # 561 | Тема: Делаем свою первую MMO на GameMaker 8.0 №2! (+39dll)
заслуженный участник
Сейчас нет на сайте
лично всё скопировал к себе (сделал заного). Действительно, две ошибки. Сейчас найду и "вылечу" biggrin
DeswingДата: Воскресенье, 26 Декабря 2010, 14:50 | Сообщение # 562 | Тема: Делаем свою первую MMO на GameMaker 8.0 №2! (+39dll)
заслуженный участник
Сейчас нет на сайте
Quote (LordZick)
___________________________________________ FATAL ERROR in action number 1 of Step Event for object server: COMPILATION ERROR in code action Error in code at line 4: playerid = newplayerid(); //Генерируем ему id ^ at position 19: Unknown function or script: newplayerid

>_> Вот так вы читаете уроки мои... Зайди в тему с первым уроком и скачай архив, потом разархивируй и запусти проект (скрипта newplayerid НЕТ)
zik13, сейчас проверю, бошка не варит =(
Quote (Angevengelist)
Если будут еще уроки, специально для GCUP напишу, статью-урок о написании сервера на Delphi

Ну тогда обязательно продолжу! Для меня - мечта сделать сервер на ЯП happy

Добавлено (26.12.2010, 14:50)
---------------------------------------------
zik13, проверь в обьекте server в событии Step наличие строчки:

Code
playerid = newplayerid();


Сообщение отредактировал Deswing - Воскресенье, 26 Декабря 2010, 14:47
DeswingДата: Воскресенье, 26 Декабря 2010, 14:38 | Сообщение # 563 | Тема: Делаем свою первую MMO на GameMaker 8.0 №2! (+39dll)
заслуженный участник
Сейчас нет на сайте
BaHu3aTop, даже не знаю что сказать... У меня все работает... А в папке есть 39dll?

Добавлено (26.12.2010, 14:37)

Quote (zik13)
playernick = tcpaccept(listen, 1);

первую строку степа попробуй заменить на player = tcpaccept(listen, 1); (если это step)

Добавлено (26.12.2010, 14:38)

zik13, стоп! Откуда ты код взял? Написано же

Code
player = tcpaccept(listen, 1); //Принимаем нового игрока   
if(player) //И если игрок зашел


Сообщение отредактировал Deswing - Воскресенье, 26 Декабря 2010, 14:38
DeswingДата: Воскресенье, 26 Декабря 2010, 14:24 | Сообщение # 564 | Тема: Делаем свою первую MMO на GameMaker 8.0 №2! (+39dll)
заслуженный участник
Сейчас нет на сайте
zik13, скриптов значит нет...
Проект из архива второй раз разархивируй и делай)

Содержимое скрипта:
Code
if(instance_number(objPlayer) > 256)return -1;    //If more than 256 then return error
for(i = 0; i < 256; i += 1)  //loop through player list
{
    if(players[i] == -1)return i; //if id is free the return it
}
return -1;



Сообщение отредактировал Deswing - Воскресенье, 26 Декабря 2010, 14:25
DeswingДата: Воскресенье, 26 Декабря 2010, 14:22 | Сообщение # 565 | Тема: Справки без перевода.
заслуженный участник
Сейчас нет на сайте
Пожалуйста скидуйте сюда справки без перевода на русский) Самую интересную переведу
DeswingДата: Воскресенье, 26 Декабря 2010, 14:21 | Сообщение # 566 | Тема: Делаем свою первую MMO на GameMaker 8.0 №2! (+39dll)
заслуженный участник
Сейчас нет на сайте
Quote (zik13)
playerid = newplayerid();

здесь все правильно, просто убери

Quote (zik13)
(-1= no player)

и запусти
DeswingДата: Воскресенье, 26 Декабря 2010, 14:18 | Сообщение # 567 | Тема: Делаем свою первую MMO на GameMaker 8.0 №2! (+39dll)
заслуженный участник
Сейчас нет на сайте
Quote (Juwell)
В БЛИЖАЙШЕЕ ВРЕМЯ ММО ПОРАБОТЯТ МИР!!!

не совсем... В серверах на GameMaker есть минус... Они не переносят больших нагрузок, просто не могут потянуть много... Максимум - 64 человек (и то, если ускорить скорость комнаты). Самое лучшее - написать на Си, но для меня это - темный лес sad

Добавлено (26.12.2010, 14:18)
---------------------------------------------

Quote (zik13)
а че насчет ошибки

это косяк с переводом... Строку ту сносишь (то был коментарий, а я забыл убрать (забыл)) Пардон, если что smile Остальные переменные (например Mana) делайте по примеру image_angle
DeswingДата: Воскресенье, 26 Декабря 2010, 14:14 | Сообщение # 568 | Тема: Делаем свою первую MMO на GameMaker 8.0 №2! (+39dll)
заслуженный участник
Сейчас нет на сайте
Quote (Juwell)
красавец

Quote (Juwell)
Я после статей начал интересоватся Гейм Мейкером ХОЧУ ЕЩЕ СТАТЕЙ!!!!

будут статьи, позже... Я просто болею и пишу статьи с трудом (только ради Gcup Написал biggrin )
Quote (Juwell)
ЛОВИ ++++++

пасяб
DeswingДата: Воскресенье, 26 Декабря 2010, 14:10 | Сообщение # 569 | Тема: Делаем свою первую MMO на GameMaker 8.0 №2! (+39dll)
заслуженный участник
Сейчас нет на сайте
zik13, пардон, строку (-1= no player) убирай, это мой косяк
DeswingДата: Воскресенье, 26 Декабря 2010, 14:07 | Сообщение # 570 | Тема: Делаем свою первую MMO на GameMaker 8.0 №2! (+39dll)
заслуженный участник
Сейчас нет на сайте
zik13, пробелма в Server, обьект server? Строка
Code
for(i = 0; i < 256; i += 1)
{
   players[i] = -1;
}

как я понял?

Добавлено (26.12.2010, 14:07)
---------------------------------------------

Quote (Angevengelist)
это комментарии из за них неможет быть ошибки

может быть, если компьютер посчитает что код - коментарий (зеленым будет)
DeswingДата: Воскресенье, 26 Декабря 2010, 14:03 | Сообщение # 571 | Тема: Обсуждение библиотек для расширения возможностей Game Maker
заслуженный участник
Сейчас нет на сайте
меня интересует - как стандартно идет нагрузка на ядра? Я видел когда-то библиотеки, с помощью которых можно задачи по ядрам покидать... Зачем?

Сообщение отредактировал Deswing - Воскресенье, 26 Декабря 2010, 16:06
DeswingДата: Воскресенье, 26 Декабря 2010, 14:01 | Сообщение # 572 | Тема: Делаем свою первую MMO на GameMaker 8.0 №2! (+39dll)
заслуженный участник
Сейчас нет на сайте
neksins, огромное спасибо!) В будущем напишу статьи по созданию офф. сайта (php) и системы авторизации) Ну это в будущем, устал немного

Добавлено (26.12.2010, 14:01)
---------------------------------------------

Quote (zik13)
(-1 = no player) (пробел)//Добавляем в playerlist
DeswingДата: Воскресенье, 26 Декабря 2010, 13:47 | Сообщение # 573 | Тема: Делаем свою первую MMO на GameMaker 8.0 №1! (+39dll)
заслуженный участник
Сейчас нет на сайте
IroNN, mmo уроки сложные для понимания, и их очень мало. Возможно из-за моего урока будет больше mmo игр >D

  • Урок написал!

    Сообщение отредактировал Deswing - Воскресенье, 26 Декабря 2010, 13:51
  • DeswingДата: Воскресенье, 26 Декабря 2010, 13:46 | Сообщение # 574 | Тема: Делаем свою первую MMO на GameMaker 8.0 №2! (+39dll)
    заслуженный участник
    Сейчас нет на сайте
    Как создать клиент

    yo! Ха! Вот и продолжение статьи! happy
    Перед тем, как начнем писать сервер, допишем кое-что в клиенте(image_anlge)
    Для этого в обьекте другого игрока (objRemote) в событии draw (рисование) заменим:

    Code
    draw_sprite(sprite_index, image_index, x, y);

    на
    Code
    draw_sprite_ext(sprite_index, image_index, x, y,1,1,image_angle,c_white,1);

    Итак, мы это заменили. Теперь надо сделать так, чтобы игрок крутился. Для этого в обьекте игрока (objPlayer) в событии step (шаг) вставляем код:
    Code
    image_angle=point_direction(x,y,mouse_x,mouse_y);

    Что это значит? Image_angle - это угол поворота обьекта. В нашем случае image_angle будет равняться point_direction по отношению к мышки. Если сказать проще - обьект будет смотреть в сторону мышки!

    Сейчас займемся передачей переменной image_angle!
    Но перед тем, как я покажу это, я должен вам рассказать важную вещь - алгоритм передачи! Что такое алгоритм?

  • Алгори́тм, от имени учёного аль-Хорезми (перс. خوارزمی‎ [al-Khwārazmī]) — точный набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное время. В старой трактовке вместо слова «порядок» использовалось слово «последовательность», но по мере развития параллельности в работе компьютеров слово «последовательность» стали заменять более общим словом «порядок».

    Иными словами алгоритм - это последовательность, порядок каких-либо действий. Зачем я это вам говорю? Просто при передаче и считывании переменных нужно соблюдать порядок! Тоесть если мы написали передачу переменных вот так (у нас это в alarm):

    Code
    clearbuffer();
    writebyte(playerlocation);
    writeshort(x);
    writeshort(y);
    sendmessage(objControl.socket);
    alarm[0] = 2;

    то и сервер обязан читать все это в такой последовательности! Мы не должны забывать, что компьютер - машина, а программиирование - язык общения с ней. Тоесть если мы не дадим четких инструкций - ничего не выйдет!

    Так... О чем это я? А! Точно! Передача image_angle! Для этого в обьекте objPlayer зайдите в событие alarm 0 (Будильник №0) и в коде, после передачи координаты y, допишите:

    Code
    writeshort(image_angle);

    У меня это будет выглядить так:
    Quote
    clearbuffer();
    writebyte(playerlocation);
    writeshort(x);
    writeshort(y);
    writeshort(image_angle);
    sendmessage(objControl.socket);
    alarm[0] = 2;

    Думаете это всё? Неееее-а! >D
    Откройте обьект objControl и в событии Step (шаг). Там найдите строку case playerlocation: . После прочтения координаты y допишите:
    Quote
    case playerlocation:
    player = players[readbyte()];
    player.x = readshort(); //Читаем координату х
    player.y = readshort(); //Читаем координату у
    player.image_angle = readshort(); //тадамс! Читаем угол поворота других игроков! *_*
    break;

    Воть... С клиентом закончили!

  • Пишем сервер!
    Откройте архив, который скачали на уроке №1 и снова разархивируйте (для удобства создайте папку "Server")
    После этих действий откройте проект и создайте обьект server.
    В этом обьекте создайте событие create (создание) и вставьте код:
    Code
    dllinit(0, true, true); //Снова подключаем 39dll =)
    listen = tcplisten(14804, 30, true); //Включаем порт 14804 (вы ведь не забыли? В клиенте мы писали 14804!)
    if(!listen) //Если не получилось включить порт (возможно занят)
    {
            error_message("Unable to create listen socket"); //Показываем ошибку
            exit; //И выходим =)
    }
    //Добавляем в playerlist       
    for(i = 0; i < 256; i += 1)
    {
            players[i] = -1;
    }

    А вы заметили? Мы ip не писали! "Почему?" - спросите вы? А зачем ip серверу? Мммм? Клиент вводит айпи (адрес) к нашему компьютеру и подключается к порту, а сервер прсото включает этот порт smile
    Теперь создайте событие step (шаг):
    Code
    player = tcpaccept(listen, 1); //Принимаем нового игрока
    if(player) //Иесли игрок зашел
    {
            playerid = newplayerid(); //Генерируем ему id
            if(playerid < 0)exit;     //Если слишком много игроков, выходим
            i = instance_create(0, 0, objPlayer);  //Создаем обьект игрока
            i.socketid = player;      //Установливаем разъем ID для игрока в сокет, которого только что приняли
            i.playerid = playerid;
            players[playerid] = i;
            setnagle(player, false);  //Выключить алгоритм Нагла для сокета
                  
            //Говорим всем, что зашел нвоый игрок       
            clearbuffer();
            writebyte(newplayer);
            writebyte(playerid);       
            writeshort(0);
            writeshort(0);
            writestring("", true);
            //Отправляем другим игрокам
            with(objPlayer)
            {
              if(id != other.i)
              {
                sendmessage(socketid);
              }
            }
            with(objPlayer)
            {
              if(id != other.i)
              {
                clearbuffer();
                writebyte(newplayer);
                writebyte(playerid);
                writeshort(x);
                writeshort(y);
                writestring(nick, true);
                sendmessage(other.player);    //Отправляем
              }
            }
    }

    Теперь создадим событие Game End (Игра закончена (вышли)) и пишем код:
    Code
    closesocket(listen); //Зыкрываем порт
    dllfree();//Выключаем 39dll =(

    Виии! *_* Мы дописали обьект server, теперь последний - objPlayer *-*
    Для начала создаем обьект, потом в create (создание), как всегда, пишем:

    Code

    x = 32; //Координаты нового игрока
    y = 32;  //Координаты нового игрока
    nick = ""; //Ник
    alarm[0]= 1; //Включаем будильник (Раньше о них говорил)

    timeout = 0;
    deltatime = current_time;

    Хмммм... Походу у нас дежавю О,о Про координаты ведь речь была! Да-да, вы правы х)
    Создайте событие destroy :
    Code
    clearbuffer(); //Чистим буффер
    writebyte(exitgame);  //Пишем сообщение, что вышли
    writebyte(playerid);  //Пишем id
    //Отправляем всем игрокам
    with(objPlayer)
    {
            if(id != other.id)
            {
              sendmessage(socketid); //Сама отправка
            }
    }
    closesocket(socketid); //закрываем сокет (не наш)
    server.players[playerid] = -1; //В случае, если вышли, сносим нас с Playerlist

    *_* Теперь Alarm 0 :
    Quote

    clearbuffer();
    writebyte(playerlocation); //message id
    writebyte(playerid); //наш id
    writeshort(x); //позиция x
    writeshort(y); //позиция у
    writeshort(image_angle) //переменная image_angle, вращение
    //Отправляем другим
    with(objPlayer)
    {
    if(id != other.id)
    {
    sendmessage(socketid);
    }
    }

    alarm[0] = 3;


    Таааак! Ураааа! Сделали полный обмен с Image_angle! ЯХУ!! Хочу заметить - всегда писали после отправкии координаты у!

    Последнее событие Step!

    Code
    while(1)                           //Бесконечный цикл
    {
            size = receivemessage(socketid);       
            if(size < 0)break;                     
            if(size == 0)                          
            {
              instance_destroy();
              break;
            }
            timeout = 0;
            mid = readbyte();   //Читаем сообщение id
            switch(mid)               
            {
              case playerlocation:   //players location
                x = readshort();    //Читаем х
                y = readshort();    //Читаем у
              break;          
                    
              case playernick:          //Новый никнейм
                nick = readstring();    //Читаем никнейм
                clearbuffer();          //Чистим буффер
                writebyte(playernick);  //Пишем messageid
                writebyte(playerid);    //Пишем мой id
                writestring(nick, true); //пишем nick
                //Отправляем игрокам
                with(objPlayer)
                {
                  if(id != other.id)
                  {
                    sendmessage(socketid);       
                  }
                }
              break;
                    
              case exitgame:              //Если игрок вышел
                instance_destroy();       //Уничтожаем
              break;
            }
    }
    timeout += current_time - deltatime;
    deltatime = current_time;
    if(timeout > 8000)instance_destroy();   //if havnt received a message in 8 seconds then destroy

    Ставим в левый верхний угол обьект server и радуемся! =)
    Ура! Поздравляю вас! Вы создали свою первую ммо! Вопросы в тему happy

    Следующий туториал - создание авторизации через ini файлы!

    Сообщение отредактировал Deswing - Воскресенье, 26 Декабря 2010, 15:34
  • DeswingДата: Воскресенье, 26 Декабря 2010, 12:49 | Сообщение # 575 | Тема: Делаем свою первую MMO на GameMaker 8.0 №1! (+39dll)
    заслуженный участник
    Сейчас нет на сайте
    URGINSAN, zik13, ничего страшного. Сейчас моя цель - сокрушить взгляды gcup на mmorpg как на "врага времен и народов"))

    Добавлено (26.12.2010, 12:49)
    ---------------------------------------------
    Сейчас же сажусь писать продолжение ^__^

    Сообщение отредактировал Deswing - Воскресенье, 26 Декабря 2010, 12:55
    DeswingДата: Воскресенье, 26 Декабря 2010, 12:48 | Сообщение # 576 | Тема: Вопрос - ответ по 39DLL
    заслуженный участник
    Сейчас нет на сайте
    [0]x[0], можно, но ты моСк на свалку выкенешь с запросами в MySQL ~_~
    Quote (Vinchensoo)
    Ячейка в дата-центре стоит приличных денег.

    агамс... Одна ячейка, без машины (а машинка ого-го сколько стоит)
    Quote (Vinchensoo)
    Насколько я знаю, лучше использовать именно UDP

    лучше использовать при передачи x,y )
    DeswingДата: Воскресенье, 26 Декабря 2010, 01:10 | Сообщение # 577 | Тема: Заявки на переход в группу "Проверенные"
    заслуженный участник
    Сейчас нет на сайте
    Quote (TLT)
    1. Грамотность (хорошее знание русского языка); 2. Умение добавлять материалы (новости, описания, статьи) в опрятном оформлении как требуют правила добавления материалов на сайт. Добавьте несколько, а мы посмотрим! 3. Постоянство - частое присутствие на сайте; 4. Регистрация на сайте более 2 месяца; 5. Не меньше 50 сообщений на форуме или в любом другом блоке (новости, статьи, файлы, блог и т.д.); 6. Активное участие в обсуждениях; 7. Нет нарушений и замечаний (уровень на 0); 8. Положительная репутация (желательно больше 10 пунктов; 9. Полное согласие с правилами форума и сайта; 10. Дружелюбность, уважительное отношение к участникам сообщества. Отсутствие конфликтов и противоречий.

    1.Я считаю себя грамотным. Иногда могу пропускать буквы в словах, но это только от скорости набора текста)
    2.Пока добавил только статью на форум http://gcup.ru/forum/36-11930-1 , если этот пункт очень важен - могу написать что-то
    3.Чуть ли не каждый день
    4.3-и месяца
    5.Имеется более 50-ти сообщений на форуме
    6.Обсуждаю только темы на форумах, новости очень редко.
    7.Уровень замечаний - 0%
    8.Да
    9.Конечно! Я согласен с правилами форума smile
    10.Никогда не любил унижать других


    Сообщение отредактировал Deswing - Воскресенье, 26 Декабря 2010, 01:11
    DeswingДата: Воскресенье, 26 Декабря 2010, 00:44 | Сообщение # 578 | Тема: Вопрос - ответ по 39DLL
    заслуженный участник
    Сейчас нет на сайте
    MIKEL922, ну это как я напишу х)

    Добавлено (26.12.2010, 00:28)

    интересуют такие вещи:

    Code
    setnagle(socket, false);

    Code
    break;

    Code
    end

    Добавлено (26.12.2010, 00:44)

    Quote (MIKEL922)
    Deswing, договорились?

    ну ещё немного ньюансов и да happy


    Сообщение отредактировал Deswing - Воскресенье, 26 Декабря 2010, 00:44
    DeswingДата: Воскресенье, 26 Декабря 2010, 00:39 | Сообщение # 579 | Тема: Делаем свою первую MMO на GameMaker 8.0 №1! (+39dll)
    заслуженный участник
    Сейчас нет на сайте
    URGINSAN, много мароки вас ждет... На 39длл.ру посмотрите примеры (там был один в 3D)
    но я советую 2д или 2,5д... Рендер и умелые руки - наше все happy
    DeswingДата: Воскресенье, 26 Декабря 2010, 00:37 | Сообщение # 580 | Тема: Делаем свою первую MMO на GameMaker 8.0 №1! (+39dll)
    заслуженный участник
    Сейчас нет на сайте
    Quote (Gefre)
    Найти такую команду, это была моя мечта, я с вами.

    Если я буду лгать, то лгать до конца ©
    Quote (Gefre)
    Ну я писал, что через несколько месяцев, но если за неделю освою, это будет вообще круто!

    при большом желании и хорошем руководстве - всё возможно) В этой статье я показываю базу.. Как по мне базой является передача переменных (клиент-сервер) ну а дальше главное чтобы нервов и энтузиазма хватило
    Поиск:

    Все права сохранены. GcUp.ru © 2008-2025 Рейтинг