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

[Pamoka Endis] NPC boto kurimas


Endis

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4407 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 įraš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 rasome /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, įlipų i automobilį ir parašau /vrecord TaksiVairuotojas.

Pavažinėju 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 į /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žią "žaidėją".

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

Viską iš 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.. ;) 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, šią 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ų, one transporte, šią 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 noprime pridėti dar vieną NPC botą, tai nėra sunku. ;) Tiesiog 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ą! =]

Pamoka versta iš:

  • Teigiamai 1
  • Neigiamai 1
Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 3 savaičių...
  • Parašė po 6 mėnesių...

Krc sukumplikuoju ir eroru 7

D:\Documents and Settings\Admin\Desktop\srw\filterscripts\npcas.pwn(15) : warning 235: public function lacks forward declaration (symbol "OnFilterScriptInit")

D:\Documents and Settings\Admin\Desktop\srw\filterscripts\npcas.pwn(18) : error 017: undefined symbol "ConnectNPC"

D:\Documents and Settings\Admin\Desktop\srw\filterscripts\npcas.pwn(19) : error 017: undefined symbol "MyFirstNPCVehicle"

D:\Documents and Settings\Admin\Desktop\srw\filterscripts\npcas.pwn(19) : error 017: undefined symbol "CreateVehicle"

D:\Documents and Settings\Admin\Desktop\srw\filterscripts\npcas.pwn(22) : error 010: invalid function or declaration

D:\Documents and Settings\Admin\Desktop\srw\filterscripts\npcas.pwn(24) : warning 235: public function lacks forward declaration (symbol "OnPlayerSpawn")

D:\Documents and Settings\Admin\Desktop\srw\filterscripts\npcas.pwn(26) : error 017: undefined symbol "IsPlayerNPC"

D:\Documents and Settings\Admin\Desktop\srw\filterscripts\npcas.pwn(32) : error 017: undefined symbol "PutPlayerInVehicle"

D:\Documents and Settings\Admin\Desktop\srw\filterscripts\npcas.pwn(36) : error 030: compound statement not closed at the end of file (started at line 26)

Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

7 Errors.

Ka netaip darau?

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 2 mėnesių...
  • Parašė po 2 mėnesių...

Man error C:\Documents and Settings\Mantvydas\Desktop\Samp03bsvr\filterscripts\npc.pwn(17) : warning 235: public function lacks forward declaration (symbol "OnFilterScriptInit")

C:\Documents and Settings\Mantvydas\Desktop\Samp03bsvr\filterscripts\npc.pwn(20) : error 017: undefined symbol "ConnectNPC"

Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

1 Error.

padekite plz

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 3 savaičių...
  • Parašė po 1 mėnesio...
  • Parašė po 2 mėnesių...
  • Parašė po 4 savaičių...
  • Parašė po 2 mėnesių...
  • Parašė po 2 savaičių...

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4407 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ą...