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 грамм не разобраться, но я успешно у себя в проекте это реализовал и оно работает. Так что мозгуй
Кстати, через некоторое время я таки слез с 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 |
заслуженный участник
Сейчас нет на сайте
| Всё, проблема решена. Спасибо за помощь!
|
|
| |