PDA

Просмотр полной версии : [Мануал] Фикс бага с ускорением на ↑



HarrWe
29.10.2016, 08:41
Приветствую форумчане, недавно думал о том как пофиксить ускорение на стрелочку, вот что получилось:


fix_bug_moto[MAX_PLAYERS char] //Создатим глоб. переменную что бы нас постоянно не замедляло

Это вставляем в OnPlayerUpdate:

static keys, ud, lr,
Float: v_vel_x,
Float: v_vel_y,
Float: v_vel_z;
GetPlayerKeys(playerid, keys, ud, lr);
if(ud == KEY_UP)
{
if(GetPlayerState(playerid) == 2)
{
switch(GetVehicleModel(GetPlayerVehicleID(playerid)))
{
case 462, 522:
{
if(GetSpeed(playerid) >= 50)
{
if(++fix_bug_moto{playerid} >= 3)
{
fix_bug_moto[playerid] =0;
GetVehicleVelocity(GetPlayerVehicleID(playerid), v_vel_x, v_vel_y, v_vel_z);
SetVehicleVelocity(GetPlayerVehicleID(playerid), v_vel_x * 0.9, v_vel_y * 0.9, v_vel_z * 0.9);
}
}
}
}
}
}


stock GetSpeed(playerid)
{
new vehicleid = GetPlayerVehicleID(playerid),
Float: pos_x,
Float: pos_y,
Float: pos_z;

switch(vehicleid)
{
case 0: GetPlayerVelocity(playerid, pos_x, pos_y, pos_z);
default: GetVehicleVelocity(vehicleid, pos_x, pos_y, pos_z);
}
return floatround(VectorSize(pos_x, pos_y, pos_z) * 100.0);
}

Вроде бы на этом всё.Если возможно как то улучшить то пишите как и что)
Помогали: DeimoS, Nexius_Tailer.

DeimoS
29.10.2016, 10:54
new fix_bug_moto[MAX_PLAYERS char]


if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
static keys,
__,
vehicleid,
Float: v_vel_x,
Float: v_vel_y,
Float: v_vel_z;

vehicleid = GetPlayerVehicleID(playerid);
switch(GetVehicleModel(vehicleid))
{
case 462, 522:
{
GetPlayerKeys(playerid, keys, __, __);
if(ud & KEY_UP)
{
if(++fix_bug_moto{playerid} >= 3)
{
fix_bug_moto{playerid} = 0;
GetVehicleVelocity(vehicleid, v_vel_x, v_vel_y, v_vel_z);
SetVehicleVelocity(vehicleid, v_vel_x * 0.9, v_vel_y * 0.9, v_vel_z * 0.9);
}
}
}
}
}

vovandolg
29.10.2016, 14:20
Если умелый античит написать чтобы не прыгали в авто без анимации то вообще можно не вызывать эти функции:
GetPlayerState
GetPlayerVehicleID
GetVehicleModel

HarrWe
29.10.2016, 17:24
new fix_bug_moto[MAX_PLAYERS char]


if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
static keys,
__,
vehicleid,
Float: v_vel_x,
Float: v_vel_y,
Float: v_vel_z;

vehicleid = GetPlayerVehicleID(playerid);
switch(GetVehicleModel(vehicleid))
{
case 462, 522:
{
GetPlayerKeys(playerid, keys, __, __);
if(ud & KEY_UP)
{
if(++fix_bug_moto{playerid} >= 3)
{
fix_bug_moto{playerid} = 0;
GetVehicleVelocity(vehicleid, v_vel_x, v_vel_y, v_vel_z);
SetVehicleVelocity(vehicleid, v_vel_x * 0.9, v_vel_y * 0.9, v_vel_z * 0.9);
}
}
}
}
}

Мне удобно что бы была сначала проверка на клавишу, т.к это клавиша не только в этом фиксе юзается а ещё кое где.

DeimoS
29.10.2016, 19:37
Ну так она в любом случае не всегда нужна. Имхо, лучше вызывай свой GetPlayerKeys для каждого конкретного случая, чем насиловать сервер вызовом функции с тремя параметрами при каждом вызове OnPlayerUpdate.

В любом случае GetPlayerVehicleID лучше записать в переменную

static keys,
__,
vehicleid,
Float: v_vel_x,
Float: v_vel_y,
Float: v_vel_z;
GetPlayerKeys(playerid, keys, __, __);
if(ud & KEY_UP)
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
vehicleid = GetPlayerVehicleID(playerid);
switch(GetVehicleModel(vehicleid))
{
case 462, 522:
{
if(++fix_bug_moto{playerid} >= 3)
{
fix_bug_moto{playerid} = 0;
GetVehicleVelocity(vehicleid, v_vel_x, v_vel_y, v_vel_z);
SetVehicleVelocity(vehicleid, v_vel_x * 0.9, v_vel_y * 0.9, v_vel_z * 0.9);
}
}
}
}
}

И ты не исправил сам массив.

HarrWe
29.10.2016, 19:53
Ну так она в любом случае не всегда нужна. Имхо, лучше вызывай свой GetPlayerKeys для каждого конкретного случая, чем насиловать сервер вызовом функции с тремя параметрами при каждом вызове OnPlayerUpdate.

В любом случае GetPlayerVehicleID лучше записать в переменную

static keys,
__,
vehicleid,
Float: v_vel_x,
Float: v_vel_y,
Float: v_vel_z;
GetPlayerKeys(playerid, keys, __, __);
if(ud & KEY_UP)
{
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
vehicleid = GetPlayerVehicleID(playerid);
switch(GetVehicleModel(vehicleid))
{
case 462, 522:
{
if(++fix_bug_moto{playerid} >= 3)
{
fix_bug_moto{playerid} = 0;
GetVehicleVelocity(vehicleid, v_vel_x, v_vel_y, v_vel_z);
SetVehicleVelocity(vehicleid, v_vel_x * 0.9, v_vel_y * 0.9, v_vel_z * 0.9);
}
}
}
}
}

И ты не исправил сам массив.

А почему лучше записывать ID в переменную?

Redsan
29.10.2016, 20:53
А почему лучше записывать ID в переменную?

Потому что лучше один раз вызвать функцию получения id транспорта, и далее уже работать с полученным значением. Машина ведь не меняется. Получение значения переменной будет быстрее чем вызов функции.

vovandolg
29.10.2016, 22:58
Вот это дадут игроки прикурить серверу когда узнают что за такие нажатия вызываются 3-6 функций)) и это только первая система:sarcastic:, а что ещё тут появится подобного?

HarrWe
29.10.2016, 23:16
Вот это дадут игроки прикурить серверу когда узнают что за такие нажатия вызываются 3-6 функций)) и это только первая система:sarcastic:, а что ещё тут появится подобного?

Как по другому тогда сделать?

vovandolg
29.10.2016, 23:47
new pVehID[MAX_PLAYERS],
pState[MAX_PLAYERS char],
fix_bug_moto[MAX_PLAYERS char];

//native PutPlayerInVehicle(playerid, vehicleid, seatid); её перехватить не забыть и другие нужные функции где бы обнулялась/ставилась инфа
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
pVehID[playerid] = vehicleid;
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
pState{playerid} = newstate;
return 1;
}

public OnPlayerUpdate(playerid)
{
static
keys,
__,
Float: v_vel_x,
Float: v_vel_y,
Float: v_vel_z;

GetPlayerKeys(playerid, keys, __, __);

if(keys & KEY_UP)
{
if(pState{playerid} == PLAYER_STATE_DRIVER)
{
switch(GetVehicleModel(pVehID[playerid])) //с GetVehicleModel перепутал, хотя можно под каждый транспорт выделить ячейку и туда записывать модель, я бы так и сделал, мне не жалко памяти :)
{
case 462, 522:
{
fix_bug_moto{playerid} += 2;
if(fix_bug_moto{playerid} > 5)
{
fix_bug_moto{playerid} = 0;
GetVehicleVelocity(pVehID[playerid], v_vel_x, v_vel_y, v_vel_z);
SetVehicleVelocity(pVehID[playerid], floatmul(v_vel_x, 0.9), floatmul(v_vel_y, 0.9), floatmul(v_vel_z, 0.9));
//на сколько я знаю делать операции для дробных чисел через ^такие функции чучуть идут быстрее
//+ я не проверял какие функции ещё могут тормозить игрока, там полюбасу можно найти что то быстрее
}
}
}
}
}
else
{
if(fix_bug_moto{playerid} > 0) fix_bug_moto{playerid} --;
}
return 1;
}


Иногда и костыли круче какого то мелкого кода:grin:

UPD: Ночь была не сильно понял про какую переменную шла речь, да и вообще вариант оптимизированней будет если сделать по DeimoS'a схеме, но с моим вариантом перехватов пабликов чтобы облегчённо узнавать об игроке.

То есть так:



new pVehID[MAX_PLAYERS],
pState[MAX_PLAYERS char],
fix_bug_moto[MAX_PLAYERS char];

//native PutPlayerInVehicle(playerid, vehicleid, seatid); её перехватить не забыть и другие нужные функции где бы обнулялась/ставилась инфа
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
pVehID[playerid] = vehicleid;
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
pState{playerid} = newstate;
return 1;
}

public OnPlayerUpdate(playerid)
{
if(pState{playerid} == PLAYER_STATE_DRIVER)
{
switch(GetVehicleModel(pVehID[playerid])) //с GetVehicleModel перепутал, хотя можно под каждый транспорт выделить ячейку и туда записывать модель, я бы так и сделал, мне не жалко памяти :)
{
case 462, 522:
{
static
keys,
__,
Float: v_vel_x,
Float: v_vel_y,
Float: v_vel_z;

GetPlayerKeys(playerid, keys, __, __);
if(keys & KEY_UP)
{
fix_bug_moto{playerid} += 2;
if(fix_bug_moto{playerid} > 5)
{
fix_bug_moto{playerid} = 0;
GetVehicleVelocity(pVehID[playerid], v_vel_x, v_vel_y, v_vel_z);
SetVehicleVelocity(pVehID[playerid], floatmul(v_vel_x, 0.9), floatmul(v_vel_y, 0.9), floatmul(v_vel_z, 0.9));
//на сколько я знаю делать операции для дробных чисел через ^такие функции чучуть идут быстрее
//+ я не проверял какие функции ещё могут тормозить игрока, там полюбасу можно найти что то быстрее
}
}
else
{
if(fix_bug_moto{playerid} > 0) fix_bug_moto{playerid} --;
}
}
}
}
return 1;
}

HarrWe
29.10.2016, 23:54
new pVehID[MAX_PLAYERS],
pState[MAX_PLAYERS char],
fix_bug_moto[MAX_PLAYERS char];

//native PutPlayerInVehicle(playerid, vehicleid, seatid); её перехватить не забыть и другие нужные функции где бы обнулялась/ставилась инфа
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
pVehID[playerid] = vehicleid;
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
pState{playerid} = newstate;
return 1;
}

public OnPlayerUpdate(playerid)
{
static
keys,
__,
Float: v_vel_x,
Float: v_vel_y,
Float: v_vel_z;

GetPlayerKeys(playerid, keys, __, __);

if(ud & KEY_UP)
{
if(pState{playerid} == PLAYER_STATE_DRIVER)
{
switch(GetVehicleModel(pVehID[playerid])) //с GetVehicleModel перепутал, хотя можно под каждый транспорт выделить ячейку и туда записывать модель, я бы так и сделал, мне не жалко памяти :)
{
case 462, 522:
{
fix_bug_moto{playerid} += 2;
if(fix_bug_moto{playerid} > 5)
{
fix_bug_moto{playerid} = 0;
GetVehicleVelocity(pVehID[playerid], v_vel_x, v_vel_y, v_vel_z);
SetVehicleVelocity(pVehID[playerid], floatmul(v_vel_x, 0.9), floatmul(v_vel_y, 0.9), floatmul(v_vel_z, 0.9));
//на сколько я знаю делать операции для дробных чисел через ^такие функции чучуть идут быстрее
//+ я не проверял какие функции ещё могут тормозить игрока, там полюбасу можно найти что то быстрее
}
}
}
}
}
else
{
if(fix_bug_moto{playerid} > 0) fix_bug_moto{playerid} --;
}
return 1;
}


Иногда и костыли круче какого то мелкого кода:grin:

Ты проверяешь клавишу из переменной ud, которую ты не получил)Завтра проверю твой код посмотрим.

vovandolg
30.10.2016, 00:00
Ты проверяешь клавишу из переменной ud, которую ты не получил)Завтра проверю твой код посмотрим.

Там я просто логически сделал, если твой вариант нажимать через некоторое время даже не флудить он будет тормозить,
а мой я по идее рассчитал чтобы ложного не было, а как работать будет хз)

wAx
03.11.2016, 13:08
так почему результат GetPlayerVehicleID еще не занесен в переменную?:acute:

Иван Бубнов
03.11.2016, 18:44
new pVehID[MAX_PLAYERS],
pState[MAX_PLAYERS char],
fix_bug_moto[MAX_PLAYERS char];

//native PutPlayerInVehicle(playerid, vehicleid, seatid); её перехватить не забыть и другие нужные функции где бы обнулялась/ставилась инфа
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
pVehID[playerid] = vehicleid;
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
pState{playerid} = newstate;
return 1;
}

public OnPlayerUpdate(playerid)
{
static
keys,
__,
Float: v_vel_x,
Float: v_vel_y,
Float: v_vel_z;

GetPlayerKeys(playerid, keys, __, __);

if(keys & KEY_UP)
{
if(pState{playerid} == PLAYER_STATE_DRIVER)
{
switch(GetVehicleModel(pVehID[playerid])) //с GetVehicleModel перепутал, хотя можно под каждый транспорт выделить ячейку и туда записывать модель, я бы так и сделал, мне не жалко памяти :)
{
case 462, 522:
{
fix_bug_moto{playerid} += 2;
if(fix_bug_moto{playerid} > 5)
{
fix_bug_moto{playerid} = 0;
GetVehicleVelocity(pVehID[playerid], v_vel_x, v_vel_y, v_vel_z);
SetVehicleVelocity(pVehID[playerid], floatmul(v_vel_x, 0.9), floatmul(v_vel_y, 0.9), floatmul(v_vel_z, 0.9));
//на сколько я знаю делать операции для дробных чисел через ^такие функции чучуть идут быстрее
//+ я не проверял какие функции ещё могут тормозить игрока, там полюбасу можно найти что то быстрее
}
}
}
}
}
else
{
if(fix_bug_moto{playerid} > 0) fix_bug_moto{playerid} --;
}
return 1;
}


Иногда и костыли круче какого то мелкого кода:grin:

UPD: Ночь была не сильно понял про какую переменную шла речь, да и вообще вариант оптимизированней будет если сделать по DeimoS'a схеме, но с моим вариантом перехватов пабликов чтобы облегчённо узнавать об игроке.

То есть так:



new pVehID[MAX_PLAYERS],
pState[MAX_PLAYERS char],
fix_bug_moto[MAX_PLAYERS char];

//native PutPlayerInVehicle(playerid, vehicleid, seatid); её перехватить не забыть и другие нужные функции где бы обнулялась/ставилась инфа
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
pVehID[playerid] = vehicleid;
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
pState{playerid} = newstate;
return 1;
}

public OnPlayerUpdate(playerid)
{
if(pState{playerid} == PLAYER_STATE_DRIVER)
{
switch(GetVehicleModel(pVehID[playerid])) //с GetVehicleModel перепутал, хотя можно под каждый транспорт выделить ячейку и туда записывать модель, я бы так и сделал, мне не жалко памяти :)
{
case 462, 522:
{
static
keys,
__,
Float: v_vel_x,
Float: v_vel_y,
Float: v_vel_z;

GetPlayerKeys(playerid, keys, __, __);
if(keys & KEY_UP)
{
fix_bug_moto{playerid} += 2;
if(fix_bug_moto{playerid} > 5)
{
fix_bug_moto{playerid} = 0;
GetVehicleVelocity(pVehID[playerid], v_vel_x, v_vel_y, v_vel_z);
SetVehicleVelocity(pVehID[playerid], floatmul(v_vel_x, 0.9), floatmul(v_vel_y, 0.9), floatmul(v_vel_z, 0.9));
//на сколько я знаю делать операции для дробных чисел через ^такие функции чучуть идут быстрее
//+ я не проверял какие функции ещё могут тормозить игрока, там полюбасу можно найти что то быстрее
}
}
else
{
if(fix_bug_moto{playerid} > 0) fix_bug_moto{playerid} --;
}
}
}
}
return 1;
}


ИМХО лучше юзать OnPlayerKeyStateChange, ибо OnPlayerUpdate вызывается очень часто (мб и ошибаюсь, но вроде как больше ~30 раз в сек)

DeimoS
03.11.2016, 20:00
ИМХО лучше юзать OnPlayerKeyStateChange, ибо OnPlayerUpdate вызывается очень часто (мб и ошибаюсь, но вроде как больше ~30 раз в сек)

OnPlayerKeyStateChange Не вызывается при нажатии на стрелки. Их отловить можно только так

vovandolg
03.11.2016, 20:06
OnPlayerUpdate вызывается очень часто (мб и ошибаюсь, но вроде как больше ~30 раз в сек)

Это просто наглядный пример как надо сделать код для таймера, перетащить его в свой таймер не будет не для кого проблемой, а частота обновления зависит от того что игрок делает и как часто жмёт кнопки + если не ошибаюсь эту частоту можно увеличивать и уменьшать в server.cfg

DeimoS
03.11.2016, 23:17
На самом деле ничего страшного не будет от такого кода в OnPlayerUpdate. Есть скрипты, использующие этот коллбэк для гораздо более страшных вычислений.

Даже взять в пример один иностранный сервер, на который я наткнулся года 2 назад, где режим игры был связан с самолётами и, собственно, лётчиками. Начинал ты там с простого кукурузника и со временем зарабатывал на более крутые самолёты, летая от точки до точки и, возможно, делая что-то ещё (играл я не долго). Дальнобойщики, только реализованные в виде самолётов. Так вот, там на экране была реализована куча всяких датчиков (компас/спидометр/бензин и т.п.) в виде текстдравов и они, судя по точности обновления, были реализованы как раз в OnPlayerUpdate (тот же компас моментально обновлял данные при малейшем повороте). И ничего, онлайн был около 300 человек и ничего не лагало.
Так что использовать OnPlayerUpdate - не смертельно. Главное используйте его с умом и только в тех случаях, когда такая частота обновлений действительно важна. В случае с этим фиксом она важна, если хотите исправить "баг" на корню, не дав и малейшей возможности разогнаться. Если не нужно - создавайте таймер и настраивайте интервал под себя

vovandolg
04.11.2016, 03:07
На самом деле ничего страшного не будет от такого кода в OnPlayerUpdate. Есть скрипты, использующие этот коллбэк для гораздо более страшных вычислений.

Даже взять в пример один иностранный сервер, на который я наткнулся года 2 назад, где режим игры был связан с самолётами и, собственно, лётчиками. Начинал ты там с простого кукурузника и со временем зарабатывал на более крутые самолёты, летая от точки до точки и, возможно, делая что-то ещё (играл я не долго). Дальнобойщики, только реализованные в виде самолётов. Так вот, там на экране была реализована куча всяких датчиков (компас/спидометр/бензин и т.п.) в виде текстдравов и они, судя по точности обновления, были реализованы как раз в OnPlayerUpdate (тот же компас моментально обновлял данные при малейшем повороте). И ничего, онлайн был около 300 человек и ничего не лагало.
Так что использовать OnPlayerUpdate - не смертельно. Главное используйте его с умом и только в тех случаях, когда такая частота обновлений действительно важна. В случае с этим фиксом она важна, если хотите исправить "баг" на корню, не дав и малейшей возможности разогнаться. Если не нужно - создавайте таймер и настраивайте интервал под себя

Я думаю что у них машинка была нормальная, всё ж лучше делать проще если это возможно)

TheMallard
04.11.2016, 14:48
Я думаю на samp-rp такое ставить точно не стоит.

wAx
04.11.2016, 19:57
На самом деле ничего страшного не будет от такого кода в OnPlayerUpdate. Есть скрипты, использующие этот коллбэк для гораздо более страшных вычислений.

Даже взять в пример один иностранный сервер, на который я наткнулся года 2 назад, где режим игры был связан с самолётами и, собственно, лётчиками. Начинал ты там с простого кукурузника и со временем зарабатывал на более крутые самолёты, летая от точки до точки и, возможно, делая что-то ещё (играл я не долго). Дальнобойщики, только реализованные в виде самолётов. Так вот, там на экране была реализована куча всяких датчиков (компас/спидометр/бензин и т.п.) в виде текстдравов и они, судя по точности обновления, были реализованы как раз в OnPlayerUpdate (тот же компас моментально обновлял данные при малейшем повороте). И ничего, онлайн был около 300 человек и ничего не лагало.
Так что использовать OnPlayerUpdate - не смертельно. Главное используйте его с умом и только в тех случаях, когда такая частота обновлений действительно важна. В случае с этим фиксом она важна, если хотите исправить "баг" на корню, не дав и малейшей возможности разогнаться. Если не нужно - создавайте таймер и настраивайте интервал под себя

По сути согласен с DeimoS, многие однажды услышали что: "писать код в OnPlayerUpdate - самый страшный грех любого скриптера" и теперь не вникая в саму идею использования этого callback'a, слепо повторяют то же самое. Я конечно утрировал немного, но общий смысл ясен. Теперь по теме кода, я опять же соглашусь с DeimoS, т.к. перед каждым разработчиком будет всегда выбор, в этом случае выбор в том, как использовать код из мануала. Я считаю, что автор всегда должен предлагать код (фикс), который должен будет срабатывать при выполнении минимального условия, а уж потом кому нужно, подправит его для себя (и если захочет, предложит топикстартеру свой вариант для добавления в тему). Возвращаясь к самой теме о нагрузке этого кода, все на этом форуме любят фразу "мы тут не гадалки", так чего ж вы гадаете упадет сервер или нет? Есть возможность - проверьте, обсуждать можно много и долго но пока не будет конкретного примера, кто-то не запустит хотя-бы очень близкий к реальным нагрузкам тест этого кода - нам не выяснить, увы, ничего.

vovandolg
04.11.2016, 20:02
По сути согласен с DeimoS, многие однажды услышали что: "писать код в OnPlayerUpdate - самый страшный грех любого скриптера" и теперь не вникая в саму идею использования этого callback'a, слепо повторяют то же самое. Я конечно утрировал немного, но общий смысл ясен. Теперь по теме кода, я опять же соглашусь с DeimoS, т.к. перед каждым разработчиком будет всегда выбор, в этом случае выбор в том, как использовать код из мануала. Я считаю, что автор всегда должен предлагать код (фикс), который должен будет срабатывать при выполнении минимального условия, а уж потом кому нужно, подправит его для себя (и если захочет, предложит топикстартеру свой вариант для добавления в тему). Возвращаясь к самой теме о нагрузке этого кода, все на этом форуме любят фразу "мы тут не гадалки", так чего ж вы гадаете упадет сервер или нет? Есть возможность - проверьте, обсуждать можно много и долго но пока не будет конкретного примера, кто-то не запустит хотя-бы очень близкий к реальным нагрузкам тест этого кода - нам не выяснить, увы, ничего.

Сервер не упадёт, просто к нему учащаются запросы и начинается игра в ловлю лагов если хостинг не очень или народу в стриме очень много, сервер то не упадёт, но кто захочет тонуть в искушённых твоих созданных лагах?

DeimoS
04.11.2016, 21:39
Я думаю что у них машинка была нормальная, всё ж лучше делать проще если это возможно)

Ну так если кто-то ставит свой сервер на "ненормальные" машины - это сугубо их проблемы. Давайте теперь GTA 5 запускать на Pentium 1 и плеваться в сторону Rockstar, говоря, что они ужасную игру сделали, в которую нельзя ни в коем случае играть.

Чтоб заставить сервер лагать нормально написанным кодом - нужно хорошенько постараться

vovandolg
05.11.2016, 03:29
Ну так если кто-то ставит свой сервер на "ненормальные" машины - это сугубо их проблемы. Давайте теперь GTA 5 запускать на Pentium 1 и плеваться в сторону Rockstar, говоря, что они ужасную игру сделали, в которую нельзя ни в коем случае играть.

Чтоб заставить сервер лагать нормально написанным кодом - нужно хорошенько постараться

Это как умирающему от жажды и голода дать на выбор что то одно воды или хлеба, так и тут, но в большинстве на данный момент ставят всё на калловые машины, потому что кризис в стране..
Жили бы мы на долларах то другое дело.

DeimoS
05.11.2016, 11:03
Это как умирающему от жажды и голода дать на выбор что то одно воды или хлеба, так и тут, но в большинстве на данный момент ставят всё на калловые машины, потому что кризис в стране..
Жили бы мы на долларах то другое дело.

"Калловые" машины - это что? На процессоре от Nokia 3310 работающие? Сейчас большинство нормальных хстингов (не те, которых школьник Вася открыл и через неделю закроет, а проверенные временем) вытянут SA-MP с пол пинка. И такие хосты, которые бы висли от OnPlayerUpdate, я даже не знаю с каким железом должны быть, ибо тогда они сами по себе должны виснуть от частоты обновлений данных между игроками

И да, логично открывать проект только когда финансы позволяют. Глупо как-то тратить на проект кучу времени, придумывая концепт и реализовывая его в жизнь, а потом пытаться экономить на хостинге, ибо денег нет.