Skocz do zawartości
Mr_Auto

Tworzenie prostego bot'a (NPC)

Rekomendowane odpowiedzi

A co trzeba zmienić, by dodać więcej niż 1 bota? Bo potrzebuje tak ok. 15 wstawić na server, bo mam za mało osób do nagrywania, a boty są bardziej ogarnięte :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

w server.cfg dajesz

maxnpc 15

musisz mieć 15 nagrań botów (chyba że niektóre maja mieć te same) robisz skrypty tych botów (każdy musi mieć swój) w folderze 'npcmodes' tak jak napisane w poradniku i na koniec skrypt lub w mapie już tej normalnej robisz przyłączanie botów na serwer itp.

ogólnie botem jest plik .amx w folderze 'npcmodes' a nie nagranie

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A jak by zrobić, by np. nagranie odtworzyło się dopiero jak gracz jest w odległości np. 20 m od bota?

Podejrzewam, że trzeba użyć IsPlayerInArea, ale nie wiem jak...

Niby wiem jak to zrobić, ale pod jaki public to wsadzić? OnGamemodeInit?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

w skrypcie bota tworzysz 1 zmienną gdzieś pod #include np.

new akcjaon;
potem timer i pętla dla all graczy
new Float:ppos[3];
GetMyPos(ppos[0], ppos[1], ppos[2]);
for(new i; i < 30; i++) // 30 liczba slotów
{
if(IsPlayerInRangeOfPoint(i, 20.0, ppos[0], ppos[1], ppos[2]) && !akcjaon)
{
//tutaj start nagrania czyli StartRecordingPlayback
akcjaon = true;
return 1;
}
}
//tutaj co ma się stać jeśli nie ma nikogo w pobliżu, możesz zostawić puste
i
public OnRecordingPlaybackEnd()
{
akcjaon = false;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mi jakos bota wogóle nie laduje nie wiem czemu :'( :'(

I mam error i 3 warningi

C:\ss\gamemodes\FullDM.pwn(12951) : warning 219: local variable "pojazd" shadows a variable at a preceding level
C:\ss\gamemodes\FullDM.pwn(19946) : warning 219: local variable "pojazd" shadows a variable at a preceding level
C:\ss\gamemodes\FullDM.pwn(20464) : error 010: invalid function or declaration
C:\ss\gamemodes\FullDM.pwn(20473) : warning 203: symbol is never used: "FindNPC"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

Co jest? o co tu chodzi

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Mi jakos bota wogóle nie laduje nie wiem czemu :'( :'(

może nie zmieniłeś ustawień w server.cfg

chodzi o to że masz już zmienną pojazd, wybierz sobie inną nazwę i zmień ją w tym kodzie bota, np. AuTo

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ja mam ustawienia dobre tylko mam jeden error

C:\ss\gamemodes\FullDM.pwn(8571) : error 017: undefined symbol "FindNPC"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

Czemu kompilator nie wie co to znaczy?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Witam.

Ja stworzyłem ten skrypt w pustym pliku .pwn. Oto kod:

#include <a_samp>

new pojazd;

public OnFilterScriptInit()
{
ConnectNPC("Kurs do LS","bot1");

pojazd = AddStaticVehicle(437, 1550.5108, -28.9338, 21.3374, 90, 3, 6);
}

public OnPlayerConnect()

{
if(IsPlayerNPC(playerid)) return 1;

return 1;
}

public OnPlayerRequestClass()

{
if(IsPlayerNPC(playerid))
{
new playername[30];
GetPlayerName(playerid,playername,sizeof(playername));
if(!strcmp(playername,"Kurs do LS",false))
{ SetSpawnInfo(playerid,437, 1550.5108, -28.9338, 21.3374, 90, 3, 6);
		}
return 1;
}
return 1;
}

public OnPlayerSpawn()

if(IsPlayerNPC(playerid))
{
new playername[64];
GetPlayerName(playerid,playername,64);

if(!strcmp(playername,"Kurs do LS",false)) {
PutPlayerInVehicle(playerid,pojazd, 0);
SetPlayerColor(playerid,0xFF0000FF);
}
return 1;
}

FindNPC("bot1")
{
new id=-1;
for(new i=0; i<GetMaxPlayers(); i++)
{
if(IsPlayerNPC(i)&&strcmp(PlayerName(i), imie, false)==0)
{
id=i;
break;
}}
return id;
}
A oto moje błędy:
C:\Documents and Settings\Michał\Pulpit\SAMP\pawno\PWN\npc1.pwn(15) : error 017: undefined symbol "playerid"
C:\Documents and Settings\Michał\Pulpit\SAMP\pawno\PWN\npc1.pwn(23) : error 017: undefined symbol "playerid"
C:\Documents and Settings\Michał\Pulpit\SAMP\pawno\PWN\npc1.pwn(26) : error 017: undefined symbol "playerid"
C:\Documents and Settings\Michał\Pulpit\SAMP\pawno\PWN\npc1.pwn(28) : error 017: undefined symbol "playerid"
C:\Documents and Settings\Michał\Pulpit\SAMP\pawno\PWN\npc1.pwn(37) : error 017: undefined symbol "playerid"
C:\Documents and Settings\Michał\Pulpit\SAMP\pawno\PWN\npc1.pwn(40) : error 017: undefined symbol "playerid"
C:\Documents and Settings\Michał\Pulpit\SAMP\pawno\PWN\npc1.pwn(43) : error 017: undefined symbol "playerid"
C:\Documents and Settings\Michał\Pulpit\SAMP\pawno\PWN\npc1.pwn(44) : error 017: undefined symbol "playerid"
C:\Documents and Settings\Michał\Pulpit\SAMP\pawno\PWN\npc1.pwn(49) : warning 209: function "OnPlayerSpawn" should return a value
C:\Documents and Settings\Michał\Pulpit\SAMP\pawno\PWN\npc1.pwn(49) : error 010: invalid function or declaration
C:\Documents and Settings\Michał\Pulpit\SAMP\pawno\PWN\npc1.pwn(64) : warning 203: symbol is never used: "FindNPC"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


9 Error

Bardzo prosiłbym o pomoc. Nie wiem jak to rozwikłac, jestem jeszcze zielony.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzięki, ale teraz rodzi się nowy problem.

W tym kodzie:

public OnPlayerRequestClass(playerid)

{
if(IsPlayerNPC(playerid))
{
new playername[30];
GetPlayerName(playerid,playername,sizeof(playername));
if(!strcmp(playername,"Kurs do LS",false))
{
SetSpawnInfo(playerid, 437, 1550.5108, -28.9338, 21.3374, 90, -1, -1, -1, -1, -1, -1, -1);
		}
return 1;
}
return 1;
}
Kompilator czepia się tu:
C:\Documents and Settings\Michał\Pulpit\SAMP\pawno\PWN\npc1.pwn(29) : warning 213: tag mismatch
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.

Poczytałem trochę w Google, ale żaden ze sposobów, które były tam podanie nie zadziałały. Byłbym bardzo wdzięczny za pomoc w tym. (pomoc definitywną)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

OMG

w OnPlayerSpawn dajesz

if(IsPlayerNPC(playerid))
{
if(!strcmp(PlayerName(playerid), "Nick Bota"))
{
Attach3DTextLabelToPlayer(Create3DTextLabel(...), playerid,0.0,0.0,0.0);
}
}

playerid to zmienna, głupia nazwa, została stworzona/wymyślona przed stworzeniem NPC'tów, po dodaniu ich idiotyzmem było by zmienianie wszystkich tych nazw bo powodowało by to błędy w każdym starym gamemodzie/skrypcie

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

OMG

w OnPlayerSpawn dajesz

if(IsPlayerNPC(playerid))
{
if(!strcmp(PlayerName(playerid), "Nick Bota"))
{
Attach3DTextLabelToPlayer(Create3DTextLabel(...), playerid,0.0,0.0,0.0);
}
}

playerid to zmienna, głupia nazwa, została stworzona/wymyślona przed stworzeniem NPC'tów, po dodaniu ich idiotyzmem było by zmienianie wszystkich tych nazw bo powodowało by to błędy w każdym starym gamemodzie/skrypcie

Dzięki Terminator  :D

Jak bot ma id 0, to zamiast playerid dajesz 0.

playerid to playerid, zamiast tego nie daje się 0

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

playerid to playerid, zamiast tego nie daje się 0.

SendClientMessage(15, -1, "lalala");

wyśle wiadomość do gracza o id 15. Po prostu playerid to id gracza, który np. wpisał komendę. Możesz wstawić tam np. liczbę (id) bota i nie będzie to sprawiało różnicy.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

platerid to nic innego, niż pobrane id gracza ( na różne sposoby ).

Jak masz tam funkcje co muszą mieć wpisane id gracza, to możesz tam wpisać każdą liczbe od 0 do liczby slotów na servie. Również, możesz tam dać funkcje która zwraca id gracza - w tym przypadku playerid.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×