Чего не хватает в SA:MP
#1

В этой теме предложены наверно самые ожидаемы функции.

Все будет разделено на 5 групп:
  • Объекты;
  • Коллбэки;
  • Функции;
  • Предложения;
  • Исправление ошибок.
Объекты:
  • Спец объекты с числами - объекты, на которых уже заранее нанесены числа [0..9] белого цвета (для удобного использования параметров materialcolor1 и materialcolor2 в дальнейшем). А нужны для различных реализаций с SetPlayerAttachedObject.
  • Исправить коллизию объекта ID:16203 с зоны 69. Дело в том, что этот объект является и коллизией объекта ID:16323, ангары.
Коллбэки:
  • OnPlayerChangeWeapon - вызывается при любой смене оружия.
    Code:
    public OnPlayerChangeWeapon(playerid, newweapon, oldweapon) {}
    
    • playerid - ID игрока
    • newweapon - ID нового оружия
    • oldweapon - ID старого оружия
Функции:
  • ShowVehicleMarkers - скрывает иконки всего транспорта. Параметр использовать как в ShowPlayerMarkers.
  • IsPlayerAimed - определяет, прицелился ли игрок или нет.
    Code:
    IsPlayerAimed(playerid);
    
    • playerid - ID игрока
  • ToggleHUDComponnent - переключает компоненты худа. Можно будет скрыть.
    Code:
    ToggleHUDComponnent(playerid, componentid, bool:toggle);
    
    • playerid - ID игрока
    • componentid - ID компонента (0 - все, 1 - карта, 2 - худ)
    • bool:toggle - переключатель (true - включить, false - выключить)
  • SetPlayerFatigue - изменить усталость игрока. Эта функция может повлиять на скорость движения игрока и не только.
    Code:
    SetPlayerFatigue(playerid, Float:fatigue);
    
    • playerid - ID игрока
    • Float:fatigue - значение усталости [0..100]
  • GetPlayerFatigue - узнать усталость игрока.
    Code:
    GetPlayerFatigue(playerid, &Float:fatigue);
    
    • playerid - ID игрока
    • &Float:fatigue - переменная, в которую будет записано значение усталости
  • SetPlayerOxygen - изменить уровень кислорода игрока.
    Code:
    SetPlayerOxygen(playerid, Float:oxygen);
    
    • playerid - ID игрока
    • Float:oxygen - значение кислорода [0..100]
  • GetPlayerOxygen - узнать уровень кислорода игрока.
    Code:
    GetPlayerOxygen(playerid, &Float:oxygen);
    
    • playerid - ID игрока
    • &Float:oxygen - переменная, в которую будет записано значение кислорода
  • SetObjectSize - изменить размер объекта.
    Code:
    SetObjectSize(objectid, Float:size);
    
    • objectid - ID объекта
    • Float:size - размер объекта
  • GetObjectSize - узнать размер объекта.
    Code:
    GetObjectSize(objectid, &Float:size);
    
    • objectid - ID объекта
    • &Float:size - переменная, в которую будет записан размер объекта
  • SetPlayerPhysique - визуально растянуть модель игрока (0 - 1000). Пример
    Code:
    SetPlayerPhysique(playerid, integer);
    
    • playerid - ID игрока
    • integer - размер модели игрока
  • GetPlayerPhysique - узнать размер модели игрока.
    Code:
    GetPlayerPhysique(playerid);
    
    • playerid - ID игрока
  • ToggleObjectCollisions - коллизия объекта.
    Code:
    ToggleObjectCollisions(objectid, bool:toggle);
    
    • objectid - ID объекта
    • bool:toggle - переключатель (true - включить, false - выключить)
  • SetPlayerAttachedWeapon - автоматически крепит объект оружия с небольшим увеличением в руки игроку в правильной позиции.
    Code:
    SetPlayerAttachedWeapon(playerid, weaponid, materialcolor1, materialcolor2);
    
    • playerid - ID игрока
    • weaponid - ID оружия
    • materialcolor1, materialcolor2 - окрас оружия
  • SetVisualEffect - установка визуального эффекта очков ночного видения или тепловизора, эффект нахождения под водой или размытия в движении для игрока
    Code:
    SetVisualEffect(playerid, effectid);
    
    • playerid - ID игрока
    • effectid - ID визуального эффекта
     0 - отключение эффекта
     1 - эффект ночного видения
     2 - эффект тепловизора
     3 - эффект нахождения под водой
     4 - эффект  размытия в движении (как нитро)
  • SetVisualEffectToAll - установка визуального эффекта для всех.
    Code:
    SetVisualEffectToAll(effectid);
    
    • effectid - ID визуального эффекта
  • GetVisualEffect - узнать ID визуального эффекта.
    Code:
    GetVisualEffect(playerid);
    
    • playerid - ID игрока
  • SightTextur - установить другую текстуру прицела для игрока.
    Code:
    SightTexture(playerid, sightid);
    
    • playerid - ID игрока
    • sightid - ID прицела (создать отдельную библиотеку на стороне клиента)
  • SightTexturToAll - установить другую текстуру прицела для всех.
    Code:
    SightTextureToAll(sightid);
    
    • sightid - ID прицела
  • AttachSoundToVehicle - прикрепить ID звука к транспорту (чтобы звук следовал за тс).
    Code:
    AttachSoundToVehicle(vehicleid, soundid);
    
    • vehicleid - ID транспорта
    • soundid - ID звука
  • AttachSoundToVehicleSrc - прикрепить ссылку на звук к транспорту.
    Code:
    AttachSoundToVehicleSrc(vehicleid, sound[]);
    
    • vehicleid - ID транспорта
    • sound - ссылка за запись
  • CircleGangZoneCreate - создать круглую ганг зону.
    Code:
    CircleGangZoneCreate(Float:x, Float:y, Float:radius);
    
    • Float:x, Float:y - центр ганг зоны
    • Float:radius - радиус окружности зоны
Предложения:
  • В функцию Create3DTextLabel добавить параметры шрифта и размера текста.
  • В функцию fopen добавить поддержку создания каталогов.
  • В функцию MoveObject добавить компонент создания объекта после завершения движения.
  • Добавить возможность восстановления объектов удаленных через RemoveBuildingForPlayer, RecoveryBuildingForPlayer.
  • Тип диалога: DIALOG_STYLE_TABLIST_CATEGORIES. Сортирует список на подкатегории. Пример
  • Тип диалога: DIALOG_STYLE_MSGBOX_HEADERS. Этот стиль похож на DIALOG_STYLE_MSGBOX, но может разделять контент в таблицу. Пример
  • Встроить в SA:MP chromium. Заменить TD языками верстки. Подойдет для реализаций сайтов в стиле GTAV.
Исправление ошибок:
  • SetPlayerAmmo - если у игрока забрать оружие и снова выдать, то при стрельбе будет воспроизводиться только анимация.
  • Исправление работу с упакованными строками в printf и format.
  • Исправление обновления всех AttachObject. На данный момент они пару раз обновляются и больше не меняют значений.
Автор: m1n1vv
Reply
#2

И зачем это написано?
Reply
#3

Quote:
Originally Posted by Stepashka
View Post
И зачем это написано?
В первом сообщении написано
Reply
#4

Quote:
Originally Posted by m1n1vv
View Post
В первом сообщении написано
От этого данная тема не приобрела какого-либо смысла. Таких тем в этом разделе можно с десяток найти точно. А ещё больше подобных обсуждений можно и в курилке найти, и в новостях о релизе новой версии. На деле же все эти темы - переливание воды из пустого в порожнее.
Ты думаешь, что Куй вдруг зайдёт в этот раздел и обратит внимание на твою тему? Или ты думаешь, что кто-то не знает написанного тобой? Пока что эта тема, как и другие подобные, не имеет никакого смысла, увы
Reply
#5

Quote:
Originally Posted by Eims
View Post
От этого данная тема не приобрела какого-либо смысла. Таких тем в этом разделе можно с десяток найти точно. А ещё больше подобных обсуждений можно и в курилке найти, и в новостях о релизе новой версии. На деле же все эти темы - переливание воды из пустого в порожнее.
Ты думаешь, что Куй вдруг зайдёт в этот раздел и обратит внимание на твою тему? Или ты думаешь, что кто-то не знает написанного тобой? Пока что эта тема, как и другие подобные, не имеет никакого смысла, увы
Английская версия в процессе
Reply
#6

Quote:
Originally Posted by m1n1vv
View Post
В первом сообщении написано
Давайте вы будете честны со всеми, в первую очередь с собой.
В этой теме предложены функции которых не хватает исключительно ВАМ. Никакого отношения к "самым ожидаемым функциям" ни эта тема, ни другая похожая не имеет никакого отношения.

Сдерживайте свои влажные фантазии!
Reply
#7

Quote:
Originally Posted by Stepashka
View Post
Давайте вы будете честны со всеми, в первую очередь с собой.
В этой теме предложены функции которых не хватает исключительно ВАМ. Никакого отношения к "самым ожидаемым функциям" ни эта тема, ни другая похожая не имеет никакого отношения.

Сдерживайте свои влажные фантазии!
Но и ты не все
Reply
#8

Code:
IsPlayerAimed
ne super effectivna, nu, eta mozhna delat v pawn.
Ne zdelal eta 3D, ne hatel sdelat slishkom ``spaghetti``

(ne testiravana)
pawn Code:
stock isPlayerAimed2D(playerid) {
    new FLOAT:x,FLOAT:y,FLOAT:z,Float:tx,Float:ty,Float:tz,Float:Pyt,Float:Fa,Float:dx,Float:dy,Float:nFa,Aimed=false;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    for(new j=0;j<MAX_PLAYERS;j++) {
        GetPlayerPos(playerid, tx, ty, tz);
        // Pythagoras
        Pyt=floatsqroot(floatadd(floatadd(floatpower(floatsub(x,tx),2),floatpower(floatsub(y,ty),2))));
        dx=floatsqroot(floatpower(x-tx)); // bez minusa
        // Kakoi FacingAngle dolizhin bit shtob vnivo
        nFa=floattan(floatdiv(dx,Pyt), degrees)+SubsetFacingAngle(playerid, x, y, tx, ty);
        // yesli ani vmestimi i on precelivaytsa
        if(nFa==a&&IsPlayerAiming(playerid)) {
            Aimed=true;
            // ne uveren yesli mogu delat "return" atsuda
            break;
        }  
    }
    return Aimed;
}
// FacingAngle ne idot po chisavuyu
stock Float:SubsetFacingAngle(playerid, Float:x, Float:y, Float:tx, Float:ty) {
    if(tx>=x&&ty>=y) {
        return 0.0;
    }else if(tx>=x&&ty<=y) {
        return 270.0;
    }else if(tx<=x&&ty<=y) {
        return 180.0;
    }else if(tx<=x&&ty>=y) {
        return 90.0;
    }
}
https://sampforum.blast.hk/showthread.php?tid=547324
pawn Code:
stock IsPlayerAiming(playerid)
{
    new anim = GetPlayerAnimationIndex(playerid);
    if (((anim >= 1160) && (anim <= 1163)) || (anim == 1167) || (anim == 1365) ||
    (anim == 1643) || (anim == 1453) || (anim == 220)) return 1;
    return 0;
}

public OnPlayerUpdate(playerid) // You can put under OnPlayerTakeDamage or others to detect players is aiming
{
        if(IsPlayerAiming(playerid))
        {
                //Your some thing do here
        }
        return 1;
}
EDIT: akazivaytsa ktota uzhe eta probaval i protestiraval
dumayu shto lutshe chem moi cod
https://sampforum.blast.hk/showthread.php?tid=140765
pawn Code:
stock IsPlayerAimed(playerid) {
    new FLOAT:x,FLOAT:y,FLOAT:z,Float:tx,Float:ty,Float:tz,Float:Pyt,Float:Fa,Float:dx,Float:dy,Float:nFa,Aimed=false;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    for(new j=0;j<MAX_PLAYERS;j++) {
        GetPlayerPos(playerid, tx, ty, tz);
        if(GetPointAngleToPoint(x, y, tx, ty) == a&&IsPlayerAiming(playerid)) {
            Aimed=true;
            break;
        }
    }
    return Aimed;
}
stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y) {

  new Float:DX, Float:DY;
  new Float:angle;

  DX = floatabs(floatsub(x2,X));
  DY = floatabs(floatsub(y2,Y));

  if (DY == 0.0 || DX == 0.0) {
    if(DY == 0 && DX > 0) angle = 0.0;
    else if(DY == 0 && DX < 0) angle = 180.0;
    else if(DY > 0 && DX == 0) angle = 90.0;
    else if(DY < 0 && DX == 0) angle = 270.0;
    else if(DY == 0 && DX == 0) angle = 0.0;
  }
  else {
    angle = atan(DX/DY);

    if(X > x2 && Y <= y2) angle += 90.0;
    else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle);
    else if(X < x2 && Y >= y2) angle -= 90.0;
    else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle);
  }

  return floatadd(angle, 90.0);
}
SetPlayerOxygen
Vi imeyte vidu ``Stamina``

Quote:
Originally Posted by m1n1vv
View Post
Английская версия в процессе
Yesli tak
https://sampforum.blast.hk/showthread.php?tid=302201
Reply
#9

Quote:
Originally Posted by m1n1vv
View Post
Но и ты не все
А я то тут причём, я не своих желания, ни фантазий не высказывал.
Reply
#10

Quote:
Originally Posted by m1n1vv
View Post
Английская версия в процессе
Да хоть лично Кую в личку отправляй это всё. Думаешь, ты такой единственный?
Многое из того, что ты описал в теме, ждут чуть ли не с самого появления сампа. Только вот суть в том, что у Куя есть свои представления о том, каким должен быть самп и чхать он хотел на все твои старания.

Ну разве что можешь открыть сервер, сделать его одним из крупнейших в сампе и может тогда Куй обратит внимание на твои хотелки. А до этого момента нет смысла даже пытаться просить хоть что-то, не говоря уже о функциях, а-ля SetPlayerPhysique или SightTextur, которые идут напрямую вразрез с идеями Куя о том, что самп должен оставаться GTA SA по сети, а не игровым движком, позволяющим делать подобные вещи.
Reply
#11

Quote:
Originally Posted by Kaperstone
View Post
Code:
IsPlayerAimed
ne super effectivna, nu, eta mozhna delat v pawn.
Ne zdelal eta 3D, ne hatel sdelat slishkom ``spaghetti``

(ne testiravana)
pawn Code:
stock isPlayerAimed2D(playerid) {
    new FLOAT:x,FLOAT:y,FLOAT:z,Float:tx,Float:ty,Float:tz,Float:Pyt,Float:Fa,Float:dx,Float:dy,Float:nFa,Aimed=false;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    for(new j=0;j<MAX_PLAYERS;j++) {
        GetPlayerPos(playerid, tx, ty, tz);
        // Pythagoras
        Pyt=floatsqroot(floatadd(floatadd(floatpower(floatsub(x,tx),2),floatpower(floatsub(y,ty),2))));
        dx=floatsqroot(floatpower(x-tx)); // bez minusa
        // Kakoi FacingAngle dolizhin bit shtob vnivo
        nFa=floattan(floatdiv(dx,Pyt), degrees)+SubsetFacingAngle(playerid, x, y, tx, ty);
        // yesli ani vmestimi i on precelivaytsa
        if(nFa==a&&IsPlayerAiming(playerid)) {
            Aimed=true;
            // ne uveren yesli mogu delat "return" atsuda
            break;
        }  
    }
    return Aimed;
}
// FacingAngle ne idot po chisavuyu
stock Float:SubsetFacingAngle(playerid, Float:x, Float:y, Float:tx, Float:ty) {
    if(tx>=x&&ty>=y) {
        return 0.0;
    }else if(tx>=x&&ty<=y) {
        return 270.0;
    }else if(tx<=x&&ty<=y) {
        return 180.0;
    }else if(tx<=x&&ty>=y) {
        return 90.0;
    }
}
https://sampforum.blast.hk/showthread.php?tid=547324
pawn Code:
stock IsPlayerAiming(playerid)
{
    new anim = GetPlayerAnimationIndex(playerid);
    if (((anim >= 1160) && (anim <= 1163)) || (anim == 1167) || (anim == 1365) ||
    (anim == 1643) || (anim == 1453) || (anim == 220)) return 1;
    return 0;
}

public OnPlayerUpdate(playerid) // You can put under OnPlayerTakeDamage or others to detect players is aiming
{
        if(IsPlayerAiming(playerid))
        {
                //Your some thing do here
        }
        return 1;
}
EDIT: akazivaytsa ktota uzhe eta probaval i protestiraval
dumayu shto lutshe chem moi cod
https://sampforum.blast.hk/showthread.php?tid=140765
pawn Code:
stock IsPlayerAimed(playerid) {
    new FLOAT:x,FLOAT:y,FLOAT:z,Float:tx,Float:ty,Float:tz,Float:Pyt,Float:Fa,Float:dx,Float:dy,Float:nFa,Aimed=false;
    GetPlayerPos(playerid, x, y, z);
    GetPlayerFacingAngle(playerid, a);
    for(new j=0;j<MAX_PLAYERS;j++) {
        GetPlayerPos(playerid, tx, ty, tz);
        if(GetPointAngleToPoint(x, y, tx, ty) == a&&IsPlayerAiming(playerid)) {
            Aimed=true;
            break;
        }
    }
    return Aimed;
}
stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y) {

  new Float:DX, Float:DY;
  new Float:angle;

  DX = floatabs(floatsub(x2,X));
  DY = floatabs(floatsub(y2,Y));

  if (DY == 0.0 || DX == 0.0) {
    if(DY == 0 && DX > 0) angle = 0.0;
    else if(DY == 0 && DX < 0) angle = 180.0;
    else if(DY > 0 && DX == 0) angle = 90.0;
    else if(DY < 0 && DX == 0) angle = 270.0;
    else if(DY == 0 && DX == 0) angle = 0.0;
  }
  else {
    angle = atan(DX/DY);

    if(X > x2 && Y <= y2) angle += 90.0;
    else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle);
    else if(X < x2 && Y >= y2) angle -= 90.0;
    else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle);
  }

  return floatadd(angle, 90.0);
}
SetPlayerOxygen
Vi imeyte vidu ``Stamina``


Yesli tak
https://sampforum.blast.hk/showthread.php?tid=302201
Все конечно прекрасно, но согласись, что было бы намного лучше это со стороны клиента.
Reply
#12

Quote:
Originally Posted by m1n1vv
View Post
Все конечно прекрасно, но согласись, что было бы намного лучше это со стороны клиента.
была бы хорошо, ну шансы на это очень незки

https://www.youtube.com/watch?v=N55sNUv0grw
Reply
#13

Античит бы мощный запилить и встроить в самп-фикс мыши по вертикали.
Reply
#14

Quote:
Originally Posted by RickTaylor
View Post
Античит бы мощный запилить
Мощным античитом не может похвастаться даже Rockstar в своей GTA 5, а ты хочешь этого от пиратского мультиплеера, который раз в сто лет обновляется.
Reply
#15

его через 2дн ломанут
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)