Учимся создавать свой первый NPC

09 октября 2014 | Рубрика: Статьи

<< Учим NPC в SAMP ездить на машине

Создание NPC

В данном разделе мы создадим простейшего NPC и будем его усложнять.

#include <a_samp>

#include <fcnpc>   // подгружаем наши include, находящиеся в D:\server\ pawno\include

enum npcInfo {     // создаем enum для создания таблицы с данными

        npc_Name[MAX_PLAYER_NAME],

        npc_Skin,

        npc_FightStyle,

        Float:npc_X,

        Float:npc_Y,

        Float:npc_Z,

        Float:npc_A,

        npc_ID,    

}

new npc[][npcInfo] = {

{«Test_NPC», 255, FIGHT_STYLE_BOXING, 368.2780,1864.0972,7.6719,185.1584}

};

// согласно enum’у выше создаем нашего NPC с именем Test_NPC, скином 255, стилем боя боксом, координатами x,y,z и углом поворота.

public OnFilterScriptInit() // что произойдет при загрузке скрипта

{        SetTimer(«spawnNPC», 3500, 0);  // таймер необязателен, но пусть прогрузится.

        return 1;

}

public OnFilterScriptExit() //что произойдет при отключении скрипта

{

        for (new npcids = 0; npcids < sizeof(npc); npcids++) {

        FCNPC_Destroy(npc[npcids][npc_ID]);} // удаляем всех созданных NPC в скрипте

        return 1;}

}

forward spawnNPC(); // паблик, где создается наш NPC

public spawnNPC()

{

            for (new npcids = 0; npcids < sizeof(npc); npcids++) {  //для всех npc в enum’е

            npc[npcids][npc_ID] = FCNPC_Create(npc[npcids][npc_Name]); //делаем ID, а не имя

            FCNPC_Spawn(npc[npcids][npc_ID], npc[npcids][npc_Skin], npc[npcids][npc_X], npc[npcids][npc_Y], npc[npcids][npc_Z]); //спавним NPC

            FCNPC_SetAngle(npc[npcids][npc_ID], npc[npcids][npc_A]); // задаем угол

            FCNPC_StopAttack(npc[npcids][npc_ID]); //при спавне NPC тупит, остановим

            }

}

Вот пример простейшего скрипта, у нас создается NPC с 255 скином по таким-то координатам и угол поворота такой-то.

Усложним скрипт, ведь если мы убьем нашего NPC он же не возродиться, поможем ему обрести жизнь, для этого рекомендуется перейти на версию плагина 0.3x для Windows, ибо тут мы NPC не убьем, хотя на некоторых серверах убиваются, и у меня убивались, но кто знает, что за сервер у Вас, но если все же вам влом что-то менять, то убьём NPC скриптово, чисто для теста функции, добавим в скрипт:

forward NPC_Death(npcid);

public NPC_Death(npcid)

{

    FCNPC_Respawn(npcid);

}

public FCNPC_OnDeath(npcid)

{

            SetTimerEx(«NPC_Death»,5000,0,»dd»,npcid);

}

public OnPlayerCommandText(playerid, cmdtext[])

{

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

    {

        for (new npcids = 0; npcids < 1; npcids++) {

        FCNPC_Kill(npc[npcids][npc_ID]);

        }

        return 1;

    }

    return 0;

}

Самое интересное дальше: Оживляем NPC после смерти в SAMP >>