Суббота, 23 Ноября 2024, 07:42

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
39DLL - Передача объектов в комнате
Quad69Дата: Воскресенье, 02 Марта 2014, 14:11 | Сообщение # 21
заслуженный участник
Сейчас нет на сайте
Ладно,буду пробовать твоим способом.
Только можно мне скрипт который принимает всё это?

Добавлено (02.03.2014, 14:11)
---------------------------------------------
XDominator,
Я сделал по твоему способу:
Принятие:

Код
var a1,a2,a3;
        a1=readshort();
        a2=readshort()
        a3=readbyte()
        instance_create(a1,a2,obj_bl_Stone)
        with obj_SendWorlder {instance_destroy()}


Отправка:
Код
instance_activate_all();
clearbuffer(0);  
writebyte(alldata);  
writeushort(5)
with(obj_bl_Stone)  
{  
    writeshort(x);  
    writeshort(y);
    writebyte(index);  
}  

with(objPlayer){if(id = other.id){sendmessage(socketid); }}


Пропадает соединение или не передаётся НИ ОДНОГО блока
XDominatorДата: Понедельник, 03 Марта 2014, 13:37 | Сообщение # 22
постоянный участник
Сейчас нет на сайте
Что такое alldata? Впрочем, врядли дело в этом.
Давай, еще раз, по порядку.
1)Чистим буфер clearbuffer(0);
2)Пишем некую инфу(идентификатор отправителя, скажем, 0 - это сервер) - writebyte(0);
3)Пишем идентификатор типа данных - например 1- тип данных _карта_ - writebyte(1);
Берем наши объекты. тут 2 варианта может быть. Если это статические объекты(какие нибудь неразрушаемые стены скажем, которые просто тупо всегда стоят на месте) - тогда используем простую конструкцию:
Код

writeshort(instance_number(obj_bl_Stone)); - количество существующих инстансов нашего отправляемого объекта.
with(obj_bl_Stone)     
{     
       writeshort(x);     
       writeshort(y);
}
send;


Приемник для нашей конструкции будет выглядеть так:
Код

if readbyte(0) = 0 - определили отправителя как сервер
     {
     if readbyte(0) = 1 - определили тип пакета как _карта_
       {
       i = 0;
       count = readshort(0) - считает строку writeshort(instance_number(obj_bl_Stone)) - количество объектов, оно же - количество наших циклов
       while i<= count    
        {
          a = instance_create(obj_bl_Stone, readshort(0), readshort(0)) - создаем наш принятый объект с пришедшими x и y
          i += 1;
        }
       }
      }


Само собой, что если ты планируешь в будущем этими объектами управлять, например если это АИ - то нужно создавать массивы, и синхронизировать какие либо заданные тобой идентификаторы наших объектов на сервере и клиентах. Это уже другое дело, и тут, конечно, без 100 грамм не разобраться, но я успешно у себя в проекте это реализовал и оно работает. Так что мозгуй smile

Кстати, через некоторое время я таки слез с 39dll и перешел на faucet Networking dll. Рекомендую сделать тебе тоже самое, потому что в 39 иногда возникают тупняки на ровном месте, тк либа крайне древняя, а faucet намного новее, хотя и тоже уже древняя. Но с GM 8.0 работает без каких либо проблем, свой проект написал на ней.


Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)


Сообщение отредактировал XDominator - Понедельник, 03 Марта 2014, 13:42
Quad69Дата: Понедельник, 03 Марта 2014, 23:27 | Сообщение # 23
заслуженный участник
Сейчас нет на сайте
Хорошо, вроде понятно.
Но у меня вопрос: Если например надо отправить 8 или 30 кб, оно дойдёт?

Добавлено (03.03.2014, 23:08)
---------------------------------------------
И ещё вопрос: Можно ли также передать тайлы

Добавлено (03.03.2014, 23:27)
---------------------------------------------

Цитата XDominator ()
Кстати, через некоторое время я таки слез с 39dll и перешел на faucet Networking dll. Рекомендую сделать тебе тоже самое, потому что в 39 иногда возникают тупняки на ровном месте

Кстати да, кто может посоветовать самую лучшую библиотеку которая реализовывает online?
XDominatorДата: Вторник, 04 Марта 2014, 09:50 | Сообщение # 24
постоянный участник
Сейчас нет на сайте
Лично я рекомендую ее и использовать)) Она не выдавала глюков, но структура там немного другая, придется курить стандартные примеры. С тайлами тоже самое, что и с объектами, только их число получить через instance_number уже не получится, а в целом принцип тот же.

Касательно размера - 30 килобайт это (30*1024)/4 объектов, или чуть больше 7к. Куда тебе столько?) Впрочем значения не имеет, я более чем уверен что данные такого размера отправятся\прочитаются без проблем. По крайней мере на 2к объектов у меня проблем не возникало даже с 3г-модемом в виде телефона.


Ghaarp

The soul lighter(Android, logic)

Zzzzombie RAGE!!!(For android)


Сообщение отредактировал XDominator - Вторник, 04 Марта 2014, 09:53
Quad69Дата: Вторник, 04 Марта 2014, 13:56 | Сообщение # 25
заслуженный участник
Сейчас нет на сайте
Хорошо, только мне как-то трудно "въехать" в твой способ передачи карты.
Например я хочу передать три типа объектов, как это можно сделать?

И вот ещё один вопрос: Зачем в 39DLL функция 39dll_create_buffer(...)?
zzzzzaДата: Вторник, 04 Марта 2014, 15:19 | Сообщение # 26
участник
Сейчас нет на сайте
maksim1221232, пересмотри мой последний пост в этой теме, там реализовано по такому же способу, как и у XDominator, только для большого количества объектов.
Quad69Дата: Вторник, 04 Марта 2014, 16:23 | Сообщение # 27
заслуженный участник
Сейчас нет на сайте
Всё, проблема решена.
Спасибо за помощь!
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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