Разбор скрипта «NPC боксёр в SAMP» (Часть 5)

26 ноября 2015 | Рубрика: Статьи

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

SetTimer(«spawnNPC», 500, 0); — феил, не стер со старого скрипта, он ничего не делает, раньше NPC вызывался через паблик, паблик удалил, а вот то, что его вызывать один раз не удалил, вообщем он ни на что не влияет можете смело удалить эту строчку.

} – закрываем пикап.

Return 1; — ну обычно его ставят, пусть постоит, он нужен не везде, например, вы вызывали выдачу какого-то сообщения через таймер, таймер крайне мал по времени, в том плане, что вызывается каждые 200 секунд, скажем, чтобы Вам 2 раза не выдало одно и то же, ставим в конце return 0, типа не повторять и удаляем его, это как пример, подробнее на samp wiki)

}Закрываем паблик скобочкой.

forward destroyNPC(npcid);

public destroyNPC(npcid)

{

        FCNPC_Destroy(npcid);

}

Удаляем NPC, используется при смерти NPC.

forward Renewbox(npcid);

public Renewbox(npcid)

{

        pickupkase = CreatePickup(1314,2, 757.4380,5.8088,1000.7014, -1);

        SendClientMessageToAll(-1,»Боксерский ринг обновлен!»);

}

Обновляем боксерский ринг и пишем об этом всем

public FCNPC_OnDeath(npcid, killerid, weaponid) вызывается когда NPC умер

{

Проверяем если скин NPC 81 и его состояния равно 0, либо 1, либо 2, то

    if(FCNPC_GetSkin(npcid)==81 && GetPVarInt(npcid, «Condition»)== 0 || GetPVarInt(npcid, «Condition»)== 1 || GetPVarInt(npcid, «Condition»)== 2)

    {

    if(ringused==1) если стоит, что ринг используется, перевести в не используется

    {

    ringused=0;

    SetTimer(«Renewbox»,15000,0); обновляем ринг

    }

    DeletePVar(npcid,»Condition»); удаляем Pvar для NPC

    SetTimerEx(«destroyNPC»,5000,0,»dd»,npcid); удаляем конкретного NPC

    KillTimer(boxertimer); убиваем таймер

    if(GetPVarInt(killerid, «box»)== 1){ если игрок убивший NPC имел идентификатор box, выдадим ему стиль и напишем об этом

    SetPlayerFightingStyle(killerid,FIGHT_STYLE_BOXING);

    SendClientMessage(killerid,COLOR_GREEN,»Вы овладели боксом! «);}

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

для всех игроков, если у них идентификатор 1, то зададим виртуальный мир, позицию и угол, а так же удалим идентификатор.

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

    SetPlayerInterior(i, 5);

    SetPlayerPos(i, 766.2117,6.1029,1000.7167);

    SetPlayerFacingAngle(i, 170.4782);

         DeletePVar(i,»box»);}}

    }

         return 1;

}

static stock GetClosestPlayer(playerid,&Float:cdist)

{

         new cid = INVALID_PLAYER_ID;

         new Float:dist;

         new Float:x,Float:y,Float:z;

         new Float:mx,Float:my,Float:mz;

         cdist = 65000.0;

         GetPlayerPos(playerid,mx,my,mz);

         for(new i = GetMaxPlayers();i >= 0;i—)

         {

                   if(playerid == i) continue;

                   if(!IsPlayerConnected(i)) continue;

                   if (IsPlayerNPC(i)) continue;

                   GetPlayerPos(i,x,y,z);

                   x -= mx;

                   y -= my;

                   z -= mz;

                   dist = floatsqroot(x*x + y*y + z*z);

                   if(dist < cdist)

                   {

                            cdist = dist;

                            cid = i;

                   }

         }

         return cid;

}

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