Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 15
  1. #1
    Аватар для Edwin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±

    SpawnPlayerToKvadrat

    Функция устанавливает позицию игрока рандомно в периметре указанного прямоугольника. Если не указывать позицию Z, сервер попытается установить её автоматически



    PHP код:
    SpawnPlayerToRect(playeridFloat:min_xFloat:min_yFloat:max_xFloat:max_yFloat:posZ 65535.0)
    {
        new 
    Float:fPos[2];
        
    fPos[0] = fRand(floatround(min_x), floatround(max_x));
        
    fPos[1] = fRand(floatround(min_y), floatround(max_y));
        
        if(
    posZ == 65535.0)
            
    SetPlayerPosFindZ(playeridfPos[0], fPos[1], posZ);
        else
            
    SetPlayerPos(playeridfPos[0], fPos[1], posZ);

     Лучшая, по мнению Ziggi, реализация функции fRand

    PHP код:
    stock Float:fRand(Float:minFloat:max)
        return 
    floatadd(frandom(floatsub(maxmin)), min); 



    Сюда же, дополнительно спавн по указанному радиусу. Аналогично предыдущей функции,
    позиция по оси Z будет выставлена автоматически, если её не указать в аргументах

    PHP код:
    SpawnPlayerToCircle(playeridFloat:cRadFloat:cPosXFloat:cPosYFloat:cPosZ 65535.0)
    {
        new 
    Float:rPos[2];
        
    rPos[0] = cRad *floatcos(random(360), degrees) +cPosX;
        
    rPos[1] = cRad *floatsin(random(360), degrees) +cPosY;

        if(
    cPosZ == 65535.0)
            
    SetPlayerPosFindZ(playeridrPos[0], rPos[1], cPosZ);
        else
            
    SetPlayerPos(playeridrPos[0], rPos[1], cPosZ);



    Примечание:
    Координата по оси Z вычисляется неточно, её правильность зависит от того, находится ли игрок в зоне видимости новой точки. Для более точного вычисления используйте плагин Map Andreas

    Автор: Edwin (am I)
    Последний раз редактировалось Edwin; 21.05.2017 в 00:25.

  2. Пользователь сказал cпасибо:
    DeimoS (06.05.2017)
  3. #2
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    fPos[2] откуда берёт истоки) накладочка какая то там
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  4. #3
    Аватар для Edwin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    fPos[2] откуда берёт истоки) накладочка какая то там
    Там SetPlayerPosFindZ, там какую ни поставь, всё одно - изменится
    Факт в том, что изменится только если этот квадрат в зоне стрима игрока...
    Но это поправимо с помощью MapAndreas)

    - - - Добавлено - - -

    Ну, в принципе, ради экономии миллисекунд, - да, можно не создавать третью ячейку, и вписать любое значение

  5. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    А можно ещё пару миллисекунд сэкономит :3
    PHP код:
    stock SpawnPlayerToKvadrat(playeridFloat:min_xFloat:min_yFloat:max_xFloat:max_yFloat:posZ 65535.0)
    {
    #if !defined frand
        #define frand(%0,%1) (float(random(%1-%0)+%0)+float(random(1000))/1000)

        
    min_x frand(floatround(min_x), floatround(max_x));
        
    min_y frand(floatround(min_y), floatround(max_y));
        
    #undef frand
    #endif    
        
    if(posZ == 65535.0)
            
    SetPlayerPosFindZ(playeridmin_xmin_yposZ);
        else
            
    SetPlayerPos(playeridmin_xmin_yposZ);
        return 
    1;

    Заодно и не засорять чужой мод макросом, который вряд ли впоследствии будет использоваться где-то ещё
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  6. #5
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А можно ещё пару миллисекунд сэкономит :3
    PHP код:
    stock SpawnPlayerToKvadrat(playeridFloat:min_xFloat:min_yFloat:max_xFloat:max_yFloat:posZ 65535.0)
    {
    #if !defined frand
        #define frand(%0,%1) (float(random(%1-%0)+%0)+float(random(1000))/1000)

        
    min_x frand(floatround(min_x), floatround(max_x));
        
    min_y frand(floatround(min_y), floatround(max_y));
        
    #undef frand
    #endif    
        
    if(posZ == 65535.0)
            
    SetPlayerPosFindZ(playeridmin_xmin_yposZ);
        else
            
    SetPlayerPos(playeridmin_xmin_yposZ);
        return 
    1;

    Заодно и не засорять чужой мод макросом, который вряд ли впоследствии будет использоваться где-то ещё
    Вынести frand в отдельную функцию будет намного лучше, так как не будет лишних вызовов floatround:
    PHP код:
    stock Float:frand(Float:minFloat:max)
    {
        return 
    float(random(floatround(min) - floatround(max))) + min float(random(1000)) / 1000.0;
    }

    stock SpawnPlayerToKvadrat(playeridFloat:min_xFloat:min_yFloat:max_xFloat:max_yFloat:posZ 65535.0)
    {
        
    min_x frand(min_xmax_x);
        
    min_y frand(min_ymax_y);

        if(
    posZ == 65535.0)
            
    SetPlayerPosFindZ(playeridmin_xmin_yposZ);
        else
            
    SetPlayerPos(playeridmin_xmin_yposZ);

    Но реализация frand очень странная, предлагаю использовать эту: https://gist.github.com/ziggi/262818...6c812fa07e4b47
    Или вот, укороченная версия для этого случая:
    PHP код:
    stock Float:frand(Float:minFloat:max
    {
        return 
    float(random(0)) / (float(cellmax) / (max min)) + min

    Последний раз редактировалось ziggi; 29.04.2017 в 22:46.

  7. 2 пользователя(ей) сказали cпасибо:
    Enrique_Black (30.04.2017) Outsider (16.12.2017)
  8. #6
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Вдобавок ко всему вышеперечисленному советую название SpawnPlayerInRect. Всяко лучше, чем непонятная смесь английского с транслитом, хоть название здесь и не самый большой изъян.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  9. Пользователь сказал cпасибо:
    Enrique_Black (30.04.2017)
  10. #7
    Аватар для Edwin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Вдобавок ко всему вышеперечисленному советую название SpawnPlayerInRect. Всяко лучше, чем непонятная смесь английского с транслитом, хоть название здесь и не самый большой изъян.
    Тоже верно, изменить не долго)

  11. #8
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Edwin Посмотреть сообщение
    Тоже верно, изменить не долго)
    Если это посыл к пользователям, то, боюсь, вы не та том форуме с таким подходом.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  12. #9
    Аватар для Edwin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    14.02.2014
    Адрес
    Беларусь
    Сообщений
    196
    Репутация:
    22 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Если это посыл к пользователям, то, боюсь, вы не та том форуме с таким подходом.
    Взял, каждый кто хочет, - изменил, какая проблема?

    Есть знаменитая функция PlayerToKvadrat, которой пользуется подавляющее большинство пользователей этого форума, и я ещё не ни разу видел, что бы кто-то предложил переименовать её в PlayerToRect
    Многие учатся понимать скриптинг, но не все знают английский. Что за предвзятость к названиям? Я же называю функцию не просто так, а что бы скриптеры, плохо понимающие английский, могли сразу вникнуть в назначение функции. Не Ваши ли слова о том, что всё быть должно понятно?

  13. #10
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Edwin Посмотреть сообщение
    Многие учатся понимать скриптинг, но не все знают английский. Что за предвзятость к названиям? Я же называю функцию не просто так, а что бы скриптеры, плохо понимающие английский, могли сразу вникнуть в назначение функции. Не Ваши ли слова о том, что всё быть должно понятно?
    Насчёт последнего согласиться сложно. Представь ситуацию, что ты или кто-то, кто выложит твой код не на русскоязычном форуме. Тотчас же такая понятность пропадёт и вникать тем пользователям нужно будет абсолютно с нуля. И более того, пользователь даже при желании перевести этот транслит вряд ли поймёт что-то внятное, в отличие от нормальных названий на английском, которое перевести русскоязычному пользователю труда не составляет никакого.

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

    Ну а если конкретно по теме, то действительно проблема не первостепенная.
    И хорошо бы добавить поддержку MapAndreas/ColAndreas по проверке его наличия для более точного подсчёта Z
    Последний раз редактировалось Nexius_Tailer; 05.05.2017 в 14:33.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •