Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

[Pamoka] NPC boto kūrimas


- ŠARAS

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3819 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

NPC bot'as - netikras žaidėjas. Jūs parašote jo veiksmus, o jis tai atlieka serveryje. ( Pavyzdžiui.: važinėja taxi, vaikšto po miestą ir panašiai. )

įrašome NPC boto veiksmus

Visų pirma mums reikia įrašyti jo veiksmus. Įsijungiame serverį ir prisijungiame kaip rcon adminas. ( /rcon login slaptažodis ). Tada rašome /rcon loadfs npc_record. Viskas. Lyg ir pasiruošėme įrašinėjimui, tik dabar truputį plačiau apie komandas...

* /vrecord pavadinimas - įrašinėja veiksmus, kurie atliekami sėdint transporte.

* /ofrecord pavadinimas - įrašinėja veiksmus, kurie atliekami stovint ant kojų.

* /stoprecord - sustabdo įrašinėjimą.

Tarkim, kad aš pasirinkau, kad mano NPC bot'as važinėtų po miestą. Taigi, įlipu i automobilį ir parašau /vrecord TaksiVairuotojas.

Pavažinėsiu po miestą ir kai man užtenka maršruto, rašau /stoprecord.

Viskas. Uždarome serverį.

Aplanke scriptfiles/ mano atveju bus failas TaksiVairuotojas.rec.

Jį reikia perkelti į <Jūsų serveris>/npcmodes/recordings/.

Kontroliuojame NPC botą

Ko gero pastebėjote, kad npcmodes kataloge yra daug įrašų. Tai yra "mini" skriptukai kurie galbūt padės Jums tvarkyti savo NPC botus.

Na, o mes darome įviešis "žaidiant?".

Atsidarome pawno programą, spaudžiame File, o tada New.

Visą šš ten ištriname, ir įklijuojame kodą, esantį apačioje..

#define RECORDING "TaksiVairuotojas" //Jūsų failo pavadinimas.
#define RECORDING_TYPE 1 //1 reiškia, kad veiksmas vyko transporte, o 2 reiškia, kad veiksmas buvo ant kojų.

#include 
main(){}
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);

#if RECORDING_TYPE == 1
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
public OnNPCExitVehicle() StopRecordingPlayback();
#else
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
#endif

Dabar paaiškinsiu kiekvieną funkciją...

---------------------------------------------------------------------

#define RECORDING "TaksiVairuotojas" //Jūsų failo pavadinimas.

Kaip ir komentaras sako, kad čia reikia įrašyti mūsų failo pavadinimą. Pavadinimas turi būti be galūnės. Mūsų failas buvo TaksiVairuotojas.rec, taigi mes įrašome "TaksiVairuotojas"

---------------------------------------------------------------------

#define RECORDING_TYPE 1 //1 reiškia, kad veiksmas vyko transporte, o 2 reiškia, kad veiksmas buvo ant kojų.

Ką daro ši funkcija, ko gero supratote iš komentaro...

clear.png Jeigu Jūs įrašinėjote veiksmą ant kojų, įrašome 2, o jeigu transporte - įrašome 1. Mano atveju buvom Taksi automobilyje ( transporte ), taigi rašome 1.

---------------------------------------------------------------------

#include 

SA-MP NPC botų funkcijos.

---------------------------------------------------------------------

public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);

OnRecordingPlaybackEnd callback'as yra NPC botų funkcijose, kuri priklauso a_npc includ'ui. Ši funkcija mūsų NPC boto veiksmus kartoja. Kai mūsų įrašas baigiasi, ši funkcija tą įraša paleidžia iš naujo. Pasaka be galo... :]

---------------------------------------------------------------------

public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);

Dar viena funkcija, priklausanti NPC botų funkcijoms. Ji pradeda įrašinėti, kai NPC botas atsisėda į transportą.

---------------------------------------------------------------------

public OnNPCExitVehicle() StopRecordingPlayback();

Ir dar viena funkcija. Ji nutraukia įrašinėjimą, jeigu NPC botas dėl kaškokios priežasties išlipa iš transporto.

---------------------------------------------------------------------

public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);

Ši funkcija neišsiskiria iš kitų... Ji taip pat NPC botų funkcijose yra. Ji pradeda rodyti mūsų įrašytus veiksmus, kai NPC botas būna paleidžiamas serveryje.

---------------------------------------------------------------------

Prijungiame NPC botą į serverą

Mes turime "mini" skriptą. Taip pat turime ir savo NPC botą. Dabar mums reikia savo NPC bot'ą įkelti i GameMod'ą ar FilterScript'?.

ConnectNPC funkcija padės mums tai padaryti.

Panagrinėkime tai truputį...

Viskas turi atrodyti:

ConnectNPC("Martin_M","TaksiVairuotojas");

Dabar paaiškinsiu.

Martin_M - mūsų NPC boto vardas. Taip jūs galėsite prijungti daugybė NPC botų. Svarbiausia, kad būtų skirtingi vardai.

TaksiVairuotojas - mūsų įrašo pavadinimas ( be .rec galųnės ).

Ką gi... Dabar pamėginkime padaryti mūsų NPC boto prisijungimą į serverį, kai GameMod'as ar FilterScript'as užkraunamas.

Jeigu jungiate NPC botą GameMod'e, tada rašome...

public OnGameModeInit()
{
print("NPC botas GameMod'e prijungtas");
ConnectNPC("Martin_M","TaksiVairuotojas");
return 1;
}

O, jeigu jungiame į FilterScript'ą, rašome..

public OnFilterScriptInit()
{
print("NPC botas FilterScript'e prijungtas");
ConnectNPC("Martin_M","TaksiVairuotojas");
return 1;
}

---------------------------------------------------------------------

Ką gi. Mano NPC bot'as važinėjo su Taksi. Tai man reikia sukurti automobilį, kuriuo jis važinėjo.

GameMod'o ar FilterScript'o viršuje, rašome...

new TaksiMasina;

Ir dabar OnGameModeInit turėtų atrodyti šitaip...

public OnGameModeInit()
{
print("NPC botas GameMod'e prijungtas");
ConnectNPC("Martin_M","TaksiVairuotojas");
TaksiMasina = CreateVehicle(420, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
return 1;
}

O jeigu, NPC bot'ą kuriate FilterScript'e, tada turi atrodyti šitaip..

FilterScript'o viršuje:

new TaksiMasina;

O OnFilterScriptInit turi atrodyti šitaip...

public OnFilterScriptInit()
{
print("NPC botas FilterScript'e prijungtas");
ConnectNPC("Martin_M","TaksiVairuotojas");
MyFirstNPCVehicle = CreateVehicle(420, 0.0, 0.0, 5.0, 0.0, 3, 3, 5000);
return 1;
}

DĖMESIO!! Jeigu Jūsų NPC boto veiksmai buvo ant kojų, o ne transporte, šitą dalį praleiskite.

PASTABA: Transpoto vieta nėra svarbi. Vistiek transportas būna nuteleportuotas NPC botui, kai įrašas pradedamas rodyti.

---------------------------------------------------------------------

Ir liko paskutinis žingsnis, kad galėtumėme NPC bot'ą pamatyti žaidime. Tai - pasodinti NPC bot'ą į jam sukurtą transportą.

Tai darome, naudodamiesi OnPlayerSpawn...

PASTABA: Jeigu Jūsų NPC boto veiksmai buvo ant kojų, o ne transporte, šitą dalį praleiskite.

OnPlayerSpawn turi atrodyti šitaip...

public OnPlayerSpawn(playerid)
{
if(IsPlayerNPC(playerid)) //Tikrina, ar žaidėjas paleistas kaip NPC botas.
{
new npcname[MAX_PLAYER_NAME];
GetPlayerName(playerid, npcname, sizeof(npcname)); //Gauna NPC boto vardą.
if(!strcmp(npcname, "Martin_M", true)) //Tikrina, ar NPC boto vardas Martin_M
{
PutPlayerInVehicle(playerid, TaksiMasina, 0); //Pasodina NPC botą į jam sukurtą transportą.
}
return 1;
}
//Visa kita paprastam žaidėjui.
return 1;
}

Jeigu mes norime pridėti dar vieną NPC botą, tai nėra sunku.

clear.pngTiesiog mums reikia pridėti

if(!strcmp(npcname, "KitasNPCvardas", true))
{
PutPlayerInVehicle(playerid, KitaMasina, 0);
return 1;
}

Taigi, 2 NPC botams, viskas turi atrodyti šitaip..

public OnPlayerSpawn(playerid)
{
if(IsPlayerNPC(playerid)) //Tikrina, ar žaidėjas paleistas kaip NPC botas.
{
new npcname[MAX_PLAYER_NAME];
GetPlayerName(playerid, npcname, sizeof(npcname)); //Gauna NPC boto vardą.
if(!strcmp(npcname, "Martin_M", true)) //Tikrina, ar NPC boto vardas Martin_M
{
PutPlayerInVehicle(playerid, TaksiMasina, 0); //Pasodina NPC botą į jam sukurtą transportą.
}
if(!strcmp(npcname, "KitasNPCvardas", true))
{
PutPlayerInVehicle(playerid, KitaMasina, 0);
return 1;
}
return 1;
}
//Visa kita paprastam žaidėjui.
return 1;
}

Viskas. Dabar sukompiliuokite GameMod'ą ar FilterScript'ą paspausdami F5 ir pirmyn tikrinti NPC boto. Jis važinės taip, kaip Jūs jį įrašėte. Sveikinu! Jūs sukūrėte savo NPC botą! [SVARBU]: Pamoką kūriau ne aš, o Martin_M.

  • Teigiamai 4
Nuoroda į komentarą
Dalintis per kitą puslapį

#define RECORDING "TaksiVairuotojas" //Jūsų failo pavadinimas.
#define RECORDING_TYPE 1 //1 reiškia, kad veiksmas vyko transporte, o 2 reiškia, kad veiksmas buvo ant kojų.
#include <a_npc.inc>
main(){}
public OnRecordingPlaybackEnd() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
#if RECORDING_TYPE == 1
public OnNPCEnterVehicle(vehicleid, seatid) StartRecordingPlayback(RECORDING_TYPE, RECORDING);
public OnNPCExitVehicle() StopRecordingPlayback();
#else
public OnNPCSpawn() StartRecordingPlayback(RECORDING_TYPE, RECORDING);
#endif

turėtu būti :)

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 2 savaičių...
  • Parašė po 4 savaičių...
  • Parašė po 7 mėnesių...
  • Parašė po 2 savaičių...

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3819 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...