PDA

Просмотр полной версии : [Вопрос] По синхронизации



Flime
19.07.2014, 00:54
Здравствуйте, вот пишу свой сервер и сталкиваюсь с рядом проблем...
Самая главная из них - это проблема с синхронизацией..
Понимаю, что разработчики сампа еще не решили эту проблему до конца, однако...
Вот пример..
Если взять чистый мод..
И написать следующий код:


public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
switch(hittype)
{
case 1:PlayerPlaySound(playerid,6401,0.0,0.0,0.0);
}
return 1;
}

То будет видно, что при некоторых попаданиях колокол будет работать, а уровень хп игрока снижаться не будет..
Из всего этого у меня возник вопрос можно ли как-то полностью синхронизировать эти паблики..
Ведь глобальным проектам(Адванс, Даймонд) это удалось...
Слышал про способ:


public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{
new Float: vida, Float: armadura, Float: dmg;

GetPlayerArmour(damagedid, armadura);
GetPlayerHealth(damagedid, vida);

if(armadura > 0)
{
if(amount > armadura)
{
dmg = amount - armadura;
vida = vida - dmg;
SetPlayerArmour(damagedid, 0.0);
SetPlayerHealth(damagedid, vida);
return 1;
}
armadura = armadura - amount;
SetPlayerArmour(damagedid, armadura);
}
if(armadura < 1)
{
vida = vida - amount;
SetPlayerHealth(damagedid, vida);
}
return true;
}

Хочу услышать ваше мнение о нем?
Еще слышал, что существуют какие-то минусы, что-то связанное с тем что можно бесконечно всех убивать, если использовать данный код.
Была у меня мысль про скрытые функции сампа.. Может быть разработчики сампа дают большим проектам улучшенные сервера... Ну это бред мне кажется.
Жду вашей помощи..

underwoker
19.07.2014, 01:24
Здравствуйте, вот пишу свой сервер и сталкиваюсь с рядом проблем...
Самая главная из них - это проблема с синхронизацией..
Понимаю, что разработчики сампа еще не решили эту проблему до конца, однако...
Вот пример..
Если взять чистый мод..
И написать следующий код:


public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
switch(hittype)
{
case 1:PlayerPlaySound(playerid,6401,0.0,0.0,0.0);
}
return 1;
}

То будет видно, что при некоторых попаданиях колокол будет работать, а уровень хп игрока снижаться не будет..
Из всего этого у меня возник вопрос можно ли как-то полностью синхронизировать эти паблики..
Ведь глобальным проектам(Адванс, Даймонд) это удалось...
Слышал про способ:


public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{
new Float: vida, Float: armadura, Float: dmg;

GetPlayerArmour(damagedid, armadura);
GetPlayerHealth(damagedid, vida);

if(armadura > 0)
{
if(amount > armadura)
{
dmg = amount - armadura;
vida = vida - dmg;
SetPlayerArmour(damagedid, 0.0);
SetPlayerHealth(damagedid, vida);
return 1;
}
armadura = armadura - amount;
SetPlayerArmour(damagedid, armadura);
}
if(armadura < 1)
{
vida = vida - amount;
SetPlayerHealth(damagedid, vida);
}
return true;
}

Хочу услышать ваше мнение о нем?
Еще слышал, что существуют какие-то минусы, что-то связанное с тем что можно бесконечно всех убивать, если использовать данный код.
Была у меня мысль про скрытые функции сампа.. Может быть разработчики сампа дают большим проектам улучшенные сервера... Ну это бред мне кажется.
Жду вашей помощи..
Ну про одну функцию скрытую уже говорили ;) С помощью нее Адванс сделали античит на собейт и клео вроде, если память не изменяет.

DeimoS
19.07.2014, 03:30
Попробуйте полностью перенести урон на сторону сервера (SetPlayerHealth в OnPlayerWeaponShot для каждого оружия).

Flime
20.07.2014, 04:11
Попробуйте полностью перенести урон на сторону сервера (SetPlayerHealth в OnPlayerWeaponShot для каждого оружия).
Мне кажется этот вариант не плох, но под каждое оружия сидеть подбирать урон, под ShotGun сверять дистанцию, искать анимации при попадании игроку в живот... Очень много работы. Возможно, есть еще варианты?

DeimoS
22.07.2014, 08:24
Мне кажется этот вариант не плох, но под каждое оружия сидеть подбирать урон, под ShotGun сверять дистанцию, искать анимации при попадании игроку в живот... Очень много работы. Возможно, есть еще варианты?

Других вариантов, дающих полный контроль над уроном, нет :to_take_umbrage:

J-Ex
24.07.2014, 01:04
Эмм...зачем нужны оба коллбэка сразу? В каждой конкретной ситуации можно пользоваться только одним из коллбэков. Про второй вариант правда, что есть клео, которое вызывает ложное срабатывание коллбэка, но сразу 2 варианта этого чита фиксятся в 2 строки(достаточно немного потестить, сам на той неделе этим занимался).