Разбор скрипта «NPC боксёр в SAMP» (Заключение и выводы)

05 августа 2016 | Рубрика: Статьи

Читайте предыдущую часть статьи по ссылкеРазбор скрипта «NPC боксёр в SAMP» (Часть 6)

switch(random(3)) выбираем из трех вариантов, либо NPC

нажмет правую кнопку, а затем левую, попробуйте сделать так сами, когда противоположный игрок находится вблизи от вас, что выполнит комбо 1, либо ох, вообщем запутаешься в этих кнопках, дело в том, что все их переназначают обычно, мало у кого на пробел спринт, а на шифт прыжок. Поэтому вот, что я Вам скажу, потестите на Вашем друге какие кнопки Вы нажимаете, затем гляньте, если пробел это уже прыжок, а не бег, как в оригинале, то она будет KEY_JUMP, иначе KEY_JUMP будет шифт, думаю разберетесь, здесь правда ничего сложного, а домашнее задание всем сделать 3е комбо, в кунг-фу, например, это удар с ноги в прыжке. Итак, что у нас получилось на данные момент – 2 комба и блок, всё используется случайно каждые 250 секунд, то ударим, то заблокируем, не предугадать ведь в схватке)

if(dist> 0.8 && dist<15.0 && GetPVarInt(pid, «box»)== 1)

                   {

                            SetPVarInt(npc[npcid][npc_ID], «Condition»,0);

                   }

Если игрок далее чем в 0.8 метров от нас, но не далее 15, то ставим состояние 0, и теперь выполняется оно.

if(dist>26.0)

                   {

                       for (new i = 0; i < 499; i++) {

                   if(GetPVarInt(i, «box»)== 1){

                            DeletePVar(i,»box»);}}

                            KillTimer(boxertimer);

                            FCNPC_Destroy(npc[npcid][npc_ID]);

                            ringused=0;

                            SetTimer(«Renewbox»,15000,0);

         } если же дистанция между игроком, вызвавшим на бой NPC и NPC более 26 метров, удаляем NPC, можете и бан сразу вписать, ибо ринг, в который портает, из него вообщем нереально выбраться, только с читами, ну может кто-то баги знает, лично я нет, а так если вдруг так получилось, ну вдруг админ портнул Вас далеко, то удаляем NPC и обновляем пикап, что из-за одного другим-то мучиться?

public OnPlayerCommandText(playerid, cmdtext[])

{

    if(!strcmp(cmdtext, «/bc», true))

    {

        SetPlayerInterior(playerid, 5);

        SetPlayerPos(playerid,767.5128,6.9371,1000.7142);

                   SetPlayerFacingAngle(playerid,90.9281);

    }

    return 0;

}

Пишем команду /bc и нас портает в спортзал.

Проблемы скрипта

Итак, здесь мы обсудим, чем же неидеален наш скрипт, ничто не идеально, наверное, но тем не менее. Про дистанцию, я подбирал такую дистанцию, когда NPC ещё не врезается в игрока, ведь если тупо писать goto в игрока, то он будет бежать и бежать в игрока, расстояние 0.8 по практическим исследования показалось оптимальным, дело в том, что если мы будет стоять далеко от нашего соперника и жать кнопки, то мы его даже в фокус не возьмем, данном расстояние позволяет брать игрока в фокус, можно же было бы как-то получать угол, или, для продвинутых кватернион, ну точнее изменять кватернион NPC, чтобы он плавно поворачивался к игроку и дрался с ним, но я не знаю как это делается, кватернионы – это типа повороты в пространстве, но плавные, а не сразу с 45, например, градусов перескачить в 180. Идея типа получать зеркальный угол от игрока – бред, если игрок стоит не лоб в лоб, то NPC будет бить по воздуху, вообщем работает очень не круто, если у кого-то есть способы оптимизации скрипта, значительной оптимизации, пишите в комментариях.

Вернуться в начало статьи: Разбор скрипта «NPC боксёр в SAMP» (Часть 1)