forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Unity (http://forum.boolean.name/forumdisplay.php?f=144)
-   -   Фак по Юнити. (http://forum.boolean.name/showthread.php?t=12966)

pax 27.04.2013 00:00

Ответ: Фак по Юнити.
 
На майл ру хостинге приложений 29-го числа отключат эту возможность.

burovalex 27.04.2013 17:45

Ответ: Фак по Юнити.
 
Вы были правы, захостился на hostinger.ru.
Там оказалось действительно всё просто.
Начал разбираться и немного запутался.
Решил попробовать Photon Cloud. Но чтото не понимаю, если каждый загрузившийся - отдельный клиент.

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

seaman 27.04.2013 19:50

Ответ: Фак по Юнити.
 
В клауде читерство значительно легче чем с отдельным сервером. Однако все же что-то можно сделать. Все равно нужно какой-то сервер для хранения пользователей, вложенных денег, достижений и т.п. Это может быть MySQL на обычном хостинге. Хотя при приличном числе пользователей, конечно, платном. Логин и все операции покупки/продажи/экипировки и т.п. делаем только на сервере в php скриптах и храним в том самом MySQL. Тем самым читерство будет только непосредственно в сражениях и т.п. При желании можно и там его слегка ограничить - время от времени посылать на SQL сервер в php скрипт запросы по проверке текущего оснащения и если не совпадает - банить.

burovalex 27.04.2013 21:02

Ответ: Фак по Юнити.
 
Цитата:

Логин и все операции покупки/продажи/экипировки и т.п. делаем только на сервере в php скриптах и храним в том самом MySQL.
Ну я так и предполагал, чтобы хранить всё на sql.
А вот операции зачем хранить не понял. Я думал хранить только саму экипировку, деньги и т.п.

Просто я боюсь того, что клиент при подключении к базе может перехватить запрос sql. И натворить в этой базе всё что угодно (Или не сможет?)

А правильно ли я понял, что обращение к базе из приложения будет производиться через php-запросы, которые будут общаться с БД?

seaman 27.04.2013 22:54

Ответ: Фак по Юнити.
 
Цитата:

А вот операции зачем хранить не понял.
В том смысле, что деньги на клиенте только для отображения - сколько их. А сама операция покупки, проверка хватает ли денег и т.п. - на сервере.
Цитата:

клиент при подключении к базе может перехватить запрос sql
Это как? Запрос делает php скрипт на сервере. Как клиент может его перехватить. Другое дело, что есть такая штука - инжекция в sql запрос. С ней можно "натворить в этой базе всё что угодно". Чтобы избежать,- нужно это предусматривать. Как - лучше спросить тут на форуме php. Там специалисты подскажут.

burovalex 28.04.2013 17:25

Ответ: Фак по Юнити.
 
Сделал я первый тест с фотоном - пишет состояние связи, количество игроков.
Скомпилировал екзешник, ну и решил два раза его открыть.
Когда открыл, получилось что они вообще друг о друге не знают. Хотя по сути лобби то один.

Не подскажите что можно сделать чтобы на одной машине тестить несколько игроков?

pax 28.04.2013 20:51

Ответ: Фак по Юнити.
 
На одном создать комнату, на втором в нее войти

burovalex 28.04.2013 21:34

Ответ: Фак по Юнити.
 
Вложений: 1
Но как я понял в лобби должно отображаться общее число игроков через PlayerList. В скрине расписал, посмотрите пожалуйста и пните в нужном направлении.

Оказывается PhotonNetwork.PlayerList().Lenght не показывается сколько игроковв лобби, а показывает сколько в комнате

Исходник. Пинайте, очень нужно! (Я как садо-маза - больше пинков - приятнее)


PHP код:

using System;
using UnityEngine;
using System.Collections;

public class 
ConnectToMS Photon.MonoBehaviour {
    public 
string connectState "";
    public 
Rect connectStateRectlobbyPanelRect;
    public 
int countInRoom;

void Awake()
    {
    
PhotonNetwork.player.name "Player num-"+ (PhotonNetwork.playerList.Length).ToString();
    }
        
void Start () 
    {
    
PhotonNetwork.ConnectUsingSettings("v0.1");
    
countInRoom PhotonNetwork.playerList.Length;
    }
    

void OnConnectToMaster()
    {
    print (
"Client connected to Master Server");    
    }
    
    
void Update () 
    {
    
connectState PhotonNetwork.connectionStateDetailed.ToString();
    
connectStateRect = new Rect(5f,5f,connectState.Length*8f,21f);
    
lobbyPanelRect = new Rect(50f,50f,300f,400f);
    
countInRoom PhotonNetwork.playerList.Length;    
    }

void OnGUI()
    {
    
GUI.Label(connectStateRectconnectState); 
    
Rect tempRect = new Rect(150f,5f,100f,21f);
    
GUI.Label(tempRectPhotonNetwork.player.name);
    if (
PhotonNetwork.connectionStateDetailed == PeerState.JoinedLobby
        {
        
RoomInfo[] roomList PhotonNetwork.GetRoomList(); 
        
tempRect = new Rect(5f,30f,50f,21f);
        
GUI.Label(tempRectcountInRoom.ToString());    
        
GUILayout.BeginArea(lobbyPanelRect);
        for (
int roomNumber=0roomNumber<roomList.LengthroomNumber++)
            {
            
GUILayout.BeginHorizontal();
            
GUILayout.TextArea(roomList[roomNumber].name); 
            
GUILayout.TextArea(roomList[roomNumber].playerCount.ToString());
            
GUILayout.Button("Connect");
            
GUILayout.EndHorizontal();
            }
            
GUILayout.BeginHorizontal();
            if (
GUILayout.Button("Create a new room")) {CreateNewRoom();}
            
GUILayout.EndHorizontal();
        
GUILayout.EndArea();
        }
    }
    
void CreateNewRoom()
    {
    
    }



pax 28.04.2013 21:59

Ответ: Фак по Юнити.
 
PhotonNetwork.countOfPlayers - число игроков в сети
PhotonNetwork.countOfPlayersOnMaster - число игроков в лобби
PhotonNetwork.countOfRooms - число комнат

PhotonNetwork.playerList - список игроков в текущей комнате

burovalex 29.04.2013 16:46

Ответ: Фак по Юнити.
 
Помогите плиз. Опять упёрся. Не могу задать пользовательские настройки комнаты

Здесь я создаю комнату

PHP код:

void CreateNewRoom()
    {
    
string[] roomPropNames = new string[1];
    
roomPropNames[0] = "The map";
        
    
byte mapInRoom 5;
    
    
Hashtable roomProps = new Hashtable();
    
roomProps.Add((byte)mapInRoom);

    
PhotonNetwork.CreateRoom(("Room"truetrue12roomPropsroomPropNames);
    } 



Далее, поключившись к комнате пытаюсь посматреть этот параметр

PHP код:

void OnGUI()
    {
    
//ЕСЛИ В КОМНАТЕ
    
if (PhotonNetwork.connectionStateDetailed == PeerState.Joined)
        {
        
GUILayout.BeginArea(lobbyPanelRect);
        
GUILayout.Label("Map: "+PhotonNetwork.room.customProperties[0]); //Здесь считываю
        
GUILayout.EndArea();
        }
    } 



У меня вообще ничего не приходит - даже ноль.

pax 29.04.2013 16:56

Ответ: Фак по Юнити.
 
Я создаю комнату примерно вот так сейчас:
PHP код:

PhotonNetwork.CreateRoom(roomNametruetruelevelInfo.maxPlayers.Value,
                    new 
Hashtable 
                        
{
                            { 
"L"/* индекс выбранного уровня */ },
                            { 
"F"/* френдли фаер */ },
                            { 
"V"/* версия (хз зачем)) */},
                            { 
"MI"/* минимальный уровень игрока */},
                            { 
"MA"/* максимальный уровень игрока */},
                        },
                    new[]
                        {
                             
"L",
                             
"F",
                             
"V",
                             
"MI",
                             
"MA"
                        
}
                    ); 


burovalex 29.04.2013 17:09

Ответ: Фак по Юнити.
 
Всё равно не показывает. Значит значит создавал параметры правильно.
Может я не правильно их считываю?
PHP код:

GUILayout.Label("Map: "+PhotonNetwork.room.customProperties[0]);
        
GUILayout.Label("prop 1: "+PhotonNetwork.room.customProperties[1]);
        
GUILayout.Label("prop 2: "+PhotonNetwork.room.customProperties[2]); 


pax 29.04.2013 17:22

Ответ: Фак по Юнити.
 
Конечно не правильно, ключ байт, а ты считываешь int

burovalex 29.04.2013 18:03

Ответ: Фак по Юнити.
 
Спасибо большое Андрюх!
А в твоём варианте получается надо вызывать через string.

Для инета мне кажется не лучший вариант.
Может лучше описать enum

public enum roomProp {level, friendlyFire, version, minLevel, maxLevel}

А затем делать так:

PHP код:

PhotonNetwork.CreateRoom(roomNametruetruelevelInfo.maxPlayers.Value,
                    new 
Hashtable 
                        
{
                            { 
roomProp.level/* индекс выбранного уровня */ },
                            { 
roomProp.friendlyFire/* френдли фаер */ },
                            { 
roomProp.version/* версия (хз зачем)) */},
                            { 
roomProp.minLevel/* минимальный уровень игрока */},
                            { 
roomProp.maxLevel/* максимальный уровень игрока */},
                        },
                    new[]
                        {
                             
//а это я как понял описание параметров для лобби
                             
"индекс выбранного уровня",
                             
"френдли фаер",
                             
"версия (хз зачем))",
                             
"минимальный уровень игрока",
                             
"максимальный уровень игрока"
                        
}
                    ); 



и так же считывать
PHP код:

PhotonNetwork.room.customProperties[roomProp.level


pax 29.04.2013 18:06

Ответ: Фак по Юнити.
 
Когда займусь оптимизацией проекта - обязательно что-то сделаю с этим)


Часовой пояс GMT +4, время: 02:22.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot