Как сделать в одном сервере несколько серверов? -
Red_Devils - 11.09.2011
У меня такая идея.
Сделать в одном сервере несколько.
Тоесть.
аходишь на сервер появляется диалог. окно а там выбираешь из 2-ух кнопок Присоединится или Создать.
Нажимаем создать. Пишим название сервера и пароль если надо.
Как сделать на словах поясните, можно и код для полной картины)
Re: Как сделать в одном сервере несколько? -
Stepashka - 11.09.2011
Первое, тут не дают готовых кодов, сам должен сделать.
Второе, ты сам та себе это как представляешь?
Re: Как сделать в одном сервере несколько? -
Red_Devils - 11.09.2011
Пока слабо представляю.
Мб в каждом паблике типа
public OnPlayerSpawn(playerid)
{
for(new i=0;i<MAX_SERVER;i++)
{
if(Server[i] == PlayerGetServer[playerid])
{
Re: Как сделать в одном сервере несколько? -
Romanius - 11.09.2011
что?! ЧТО?! ЧТО?!
взрыв мозга.
Re: Как сделать в одном сервере несколько? -
Red_Devils - 11.09.2011
Я хз. Но я знаю как-то можно.
Re: Как сделать в одном сервере несколько? -
CaHbKo - 11.09.2011
Сразу могу сказать, что тупо сделать 2 gamemode'а (TDM и stunt к примеру) и запустить оба на одном процессе не получится. Тебе нужно будет сделать сервер и функции так, что-бы они различали на каком "виртуальном сервере" игрок находиться. Кто-то создал сервер stunt, ещё кто-то TDM, но комманда /drift1 должна работать только на stunt серваке:
pawn Код:
#define MAX_SERVERS 5
#define SERVER_TYPE_UNSET 0
#define SERVER_TYPE_STUNT 1
#define SERVER_TYPE_TDM 2
enum __SINFO__
{
...
sType, //определяет тип сервера (SERVER_TYPE_...)
...
}
new sInfo[MAX_SERVERS][__SINFO__];
enum __PINFO__
{
...
pServer, //содержит ИД виртуального сервера (sInfo[x])
...
}
new pInfo[MAX_PLAYERS][__PINFO__];
CMD:drift1(p, par[])
{
if(sInfo[pInfo[p][pServer]][sType] != SERVER_TYPE_STUNT) return 0;
SetPlayerPos(...);
return 1;
}
Re: Как сделать в одном сервере несколько? -
HappyScripter - 11.09.2011
Вполне возможно, виртуальные миры в помощь. Но точно не уверен в абсолютной изоляции виртуальных миров. Также юзаем фильтрскрипты для каждого из режимов. Но придется или заново писать режимы или подработать существующие под эту систему. Также придется юзать какое-то хранилище для общих данных (можно заюзать set/getproperty).
Присоединиться/создать.. ну это тоже возможно, только все равно болванки нужны для создания игры.
Мало кто из текущих скриптеров на это способен, потому что много логики нужно, а также блестящее знание языка. Но как идея это выглядит куда лучше.
Re: Как сделать в одном сервере несколько? -
-Stranger- - 11.09.2011
Незнаю, может это и реально реализовать, но это действительно, взрыв мозга.
Зато пришла такая идея: Сделать конструктор серверов. Как это работает:
Заходим на сервер и через диалоги указываем параметры нового сервера, выбираем мод, FS, порт......
Далее его запускаем, и подключаемся на тот-же IP, но на указанный порт при создании сервера.
Это реализовать куда проще, но потребуется мощный плагин по работе с файлами, включая распаковку\запаковку архивов, выполнение shell и прочее...
Re: Как сделать в одном сервере несколько? -
Red_Devils - 11.09.2011
Я хз. На ошибки не смотрите я знаю их тут много и знаю где. Просто надо разобраться как сделать)
Код:
#include <a_samp>
#define MAX_SERVER 30
#define MAX_PLAYERS_SERVER 12
#define DM 0
#define STUNT 1
#define DRIFT 2
#define CLANWAR 3
enum sinfo
{
sName[32],
MPlayers,
OPlayers
};
new Server[MAX_SERVER][sinfo];
new PlayerServer[MAX_PLAYERS];
main(){}
public OnGameModeInit()
{
new str[32];
SetGameModeText("TEST");
for(new i=0;i<MAX_SERVER;i++)
{
format(str,32,"Тестовый сервер!№%d",i);
Server[i][sName] = str;
Server[i][MPlayers] = 16;
}
return 1;
}
public OnGameModeExit()
{
return 1;
}
stock GetOnlineServer()
{
new a;
for(new i=0;i<MAX_SERVER;i++)
{
if(strlen(Server[i][sName])>0)continue;
a++;
}
return a;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}
public OnPlayerConnect(playerid)
{
new string[256],string2[512];
for(new i=0;i<MAX_SERVER;i++)
{
format(string, sizeof(string), "[%d] %s [%d/%d]\n",i,Server[i][sName],Server[i][OPlayers],Server[i][MPlayers]);
strins(string2, string, strlen(string2), strlen(string));
}
ShowPlayerDialog(playerid,0,DIALOG_STYLE_LIST,"Сервера", string2,"Присоединится","Создать");
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
return 1;
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
return 0;
}
public OnPlayerUpdate(playerid)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 0)
{
if(response)
{
PlayerServer[playerid] = listitem;
Server[listitem][OPlayers]++;
new string[256];
format(string, sizeof(string), "Вы присоединились к серверу %s [%d/%d]",Server[listitem][sName],Server[listitem][OPlayers],Server[listitem][MPlayers]);
SendClientMessage(playerid,0x30B0F6AA, string);
}
else
{
}
}
return 1;
}
Re: Как сделать в одном сервере несколько? -
HappyScripter - 11.09.2011
Если будете делать все это в одном скрипте, Вам понадобится двойная порция логики.