Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.

  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Jak zrobić NPC?


  • Zamknięty Temat jest zamknięty
33 odpowiedzi w tym temacie

#1 Optymalny193

    Wszechwidzący

  • Zbanowany

Reputacja: 30
Życzliwy

  • Postów:294
  • Imię:Paweł
  • Lokalizacja:Europa
Offline

Napisano 17.05.2011 19:58

Cześć
jak zrobić npc na forum?
czyli podejde do czegoś i pokazuje sie menu i wybieram sobie cos
taki ludzik na respie
Dołączona grafika

#2 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 17.05.2011 20:17

How To: Make a perfect NPC - AlliedModders

Potem wystarczy find_ent_in_sphere lub podstawowy touch :)
  • +
  • -
  • 3

#3 Optymalny193

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 30
Życzliwy

  • Postów:294
  • Imię:Paweł
  • Lokalizacja:Europa
Offline

Napisano 18.05.2011 12:54

Dzięki jak bym czegoś nie umial będe pisal PW.
Jak możesz to zajrzyj na PW tego ExpModa.

@@EDIT
Patrz diablix od razu mam dotknięcie :D

public npc_think(id) {
// Put your think stuff here.
entity_set_float(id,EV_FL_nextthink,halflife_time() + 0.01)
}


dodam np. menu(id); i otwiera menu ale duzo roboty xD :D

Użytkownik Optymalny193 edytował ten post 18.05.2011 13:19


#4 mierzwi

    Banned

  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 18.05.2011 13:56

jak dasz otwieranie menu to co chwile będzie ci się od nowa ustawiać dlatego daj jakiś bool jak ma otwarte (na tru), jak wyłączy to na false żeby mu nie resetowało go co chwilę.

jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook

na pewno jakoś C się odwdzięczę!


#5 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 18.05.2011 14:16

Dzięki jak bym czegoś nie umial będe pisal PW.
Jak możesz to zajrzyj na PW tego ExpModa.

@@EDIT
Patrz diablix od razu mam dotknięcie :D


public npc_think(id) {
// Put your think stuff here.
entity_set_float(id,EV_FL_nextthink,halflife_time() + 0.01)
}


dodam np. menu(id); i otwiera menu ale duzo roboty xD :D


To jest think zarejestrowany na byt (klasa npc).
W tym raczej nie wykryjesz człowieka (chyba że wcześniej wspomnianym find_ent_insphere)
Najlepsza metoda to touch (i najoptymalniejsza)
  • +
  • -
  • 1

#6 Optymalny193

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 30
Życzliwy

  • Postów:294
  • Imię:Paweł
  • Lokalizacja:Europa
Offline

Napisano 18.05.2011 14:50

a jak pobrać zamknięcie menu i dać np.
menu = false;


@UP
I jak dać dokladny kod na pobranie czy to czlowiek bo tutkow nie ma

#7 mierzwi

    Banned

  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 18.05.2011 16:48

możesz zrobić task i wyszukać, możesz jak diablix mówi touch użyć, a zmienną chyba umiesz dać true/false, jak nie to nie bierz się za to ;d

jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook

na pewno jakoś C się odwdzięczę!


#8 Optymalny193

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 30
Życzliwy

  • Postów:294
  • Imię:Paweł
  • Lokalizacja:Europa
Offline

Napisano 18.05.2011 19:16

Mam tak:

public npc_think(id, ent) {
// Put your think stuff here.
entity_set_float(id,EV_FL_nextthink,halflife_time() + 0.01)

if(JestObokBytu(id, ent, "npc_resp", 45.0)){
//gracz jest obok bytu (w zasiegu 45 unitow)
}
}


I tak


stock bool:JestObokBytu(id, ent, const gszEntClassname[], Float:fDistance){
new szClassname[64];
pev(ent, pev_classname, szClassname, sizeof szClassname - 1);

if(equal(szClassname, gszEntClassname)){
new Float:fOrigin[3];
entity_get_vector(ent, EV_VEC_origin, fOrigin);

if(find_ent_in_sphere(id, fOrigin, fDistance)){
if((1 <= id <= get_maxplayers() && is_user_alive(id)){
return true;
}
}
}
return false;
}

I kod sie nie kompiluje
by diablix.

#9 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 18.05.2011 19:34

Mam tak:


public npc_think(id, ent) {
// Put your think stuff here.
entity_set_float(id,EV_FL_nextthink,halflife_time() + 0.01)

if(JestObokBytu(id, ent, "npc_resp", 45.0)){
//gracz jest obok bytu (w zasiegu 45 unitow)
}
}


I tak


stock bool:JestObokBytu(id, ent, const gszEntClassname[], Float:fDistance){
new szClassname[64];
pev(ent, pev_classname, szClassname, sizeof szClassname - 1);

if(equal(szClassname, gszEntClassname)){
new Float:fOrigin[3];
entity_get_vector(ent, EV_VEC_origin, fOrigin);

if(find_ent_in_sphere(id, fOrigin, fDistance)){
if((1 <= id <= get_maxplayers() && is_user_alive(id)){
return true;
}
}
}
return false;
}

I kod sie nie kompiluje
by diablix.



Stock mój ale think nie xD

Musisz walnąć pętle w tym thinku bo on przyjmuje tylko jeden parametr (ent)
  • +
  • -
  • 0

#10 Optymalny193

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 30
Życzliwy

  • Postów:294
  • Imię:Paweł
  • Lokalizacja:Europa
Offline

Napisano 18.05.2011 21:04

Takie cuś?


public npc_think(id, ent) {

new iPlayers[32], iNum;
get_players(iPlayers, iNum);

for(new g = 0; g<iNum ;g++){

new id = iPlayers[g];

// Put your think stuff here.
entity_set_float(id,EV_FL_nextthink,halflife_time() + 0.01)

if(JestObokBytu(id, ent, "npc_resp", 45.0)){
//gracz jest obok bytu (w zasiegu 45 unitow)
}
}
}


Tylko w tym blad:



stock bool:JestObokBytu(id, ent, const gszEntClassname[], Float:fDistance){
new szClassname[64];
pev(ent, pev_classname, szClassname, sizeof szClassname - 1);

if(equal(szClassname, gszEntClassname)){
new Float:fOrigin[3];
entity_get_vector(ent, EV_VEC_origin, fOrigin);

if((find_ent_in_sphere(id, vOrigin, fDistance))){
if((1 <= id <= get_maxplayers() && is_user_alive(id)){
return true;
}
}
}
return false;
}


Bledy:
Error: Undefined symbol "vOrigin" on line 299
Error: Invalid expression, assumed zero on line 300
Warning: Symbol is never used: "fDistance" on line 306

#11 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6033
Godlike

  • Postów:10826
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Online

Napisano 19.05.2011 06:51


bool:JestObokBytu(id, ent, const gszEntClassname[], Float:fDistance){
new szClassname[64];
pev(ent, pev_classname, szClassname, sizeof szClassname - 1);

if(equal(szClassname, gszEntClassname)){
new Float:fOrigin[3];
entity_get_vector(ent, EV_VEC_origin, fOrigin);

new Float:vOrigin[3]
pev(id,pev_origin,vOrigin)

if((find_ent_in_sphere(id, vOrigin, fDistance))){
if(is_user_alive(id)){
return true;
}
}
}
return false;
}

  • +
  • -
  • 1

#12 Optymalny193

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 30
Życzliwy

  • Postów:294
  • Imię:Paweł
  • Lokalizacja:Europa
Offline

Napisano 19.05.2011 14:32

Ok dzięki
Mam taki kod na npc:

public onna(id) {
new Float:origin[3]
entity_get_vector(id,EV_VEC_origin,origin)
new ent = create_entity("info_target")
new npc = create_entity("info_target")
//give_weapon(ent)
entity_set_origin(ent,origin);
origin[2] += 300.0
entity_set_origin(id,origin)
entity_set_float(ent,EV_FL_takedamage,1.0)
entity_set_float(ent,EV_FL_health,100.0)
entity_set_string(ent,EV_SZ_classname,"npc_resp");

entity_set_int(npc, EV_INT_solid, SOLID_BBOX);

entity_set_model(ent,"models/npc.mdl");
entity_set_int(ent,EV_INT_solid, 2)
entity_set_byte(ent,EV_BYTE_controller1,125);
entity_set_byte(ent,EV_BYTE_controller2,125);
entity_set_byte(ent,EV_BYTE_controller3,125);
entity_set_byte(ent,EV_BYTE_controller4,125);
new Float:maxs[3] = {16.0,16.0,36.0}
new Float:mins[3] = {-16.0,-16.0,-36.0}
entity_set_size(ent,mins,maxs)
entity_set_float(ent,EV_FL_animtime,2.0)
entity_set_float(ent,EV_FL_framerate,1.0)
entity_set_int(ent,EV_INT_sequence,0);
entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.01)

drop_to_floor(ent)

return 1;

}

public npc_think(id, ent) {

new iPlayers[32], iNum;
get_players(iPlayers, iNum);

for(new g = 0; g<iNum ;g++){

new id = iPlayers[g];

// Put your think stuff here.
entity_set_float(id,EV_FL_nextthink,halflife_time() + 0.01)

if(JestObokBytu(id, ent, "npc_resp", 45.0)){
//gracz jest obok bytu (w zasiegu 45 unitow)
menu(id);
}
}
}


Czy wszystko jest dobrze?

#13 mierzwi

    Banned

  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 19.05.2011 15:51

szczerze to nie wiem po co ta pętla for(new g = 0; g<iNum ;g++){ i ogólnie to możesz ogarnąć sobie serwer testowy lub new game bo to jest bez sensu pisanie czy to wszystko/czy to działa, bo chyba ty to masz sprawdzać czy to działa, my tylko doradzamy.

jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook

na pewno jakoś C się odwdzięczę!


#14 Optymalny193

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 30
Życzliwy

  • Postów:294
  • Imię:Paweł
  • Lokalizacja:Europa
Offline

Napisano 19.05.2011 17:46

Tak, będe testowal na New Game lecz pytam się czy dobrze napisany

#15 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 19.05.2011 18:13

szczerze to nie wiem po co ta pętla for(new g = 0; g<iNum ;g++){ i ogólnie to możesz ogarnąć sobie serwer testowy lub new game bo to jest bez sensu pisanie czy to wszystko/czy to działa, bo chyba ty to masz sprawdzać czy to działa, my tylko doradzamy.


Petla wymagana zeby na graczu uzyc.. sam think przyjmuje tylko jeden parametr (dany byt)
  • +
  • -
  • 1

#16 Whisper

    Zaawansowany

  • Użytkownik

Reputacja: 28
Życzliwy

  • Postów:80
  • Imię:Marcin
  • Lokalizacja:Polska
Offline

Napisano 20.05.2011 09:23

Przepraszam, że się wetnę w temat ale potrzebuje jednej rzeczy dot. NPC (zakładałem temat ale była jedna odpowiedź z linkiem do tutoriala)

Wklejka 130175529314842 - AMXX.pl: Support AMX Mod X

Jak pobrać ID atakującego naszego NPC?

I jeszcze jak zapisać miejsce [pozycję] tego NPC, żeby pojawiał się powiedzmy co minute.

Użytkownik Whisper edytował ten post 20.05.2011 09:24

  • +
  • -
  • 0

Dołączona grafika


#17 mierzwi

    Banned

  • Zbanowany

Reputacja: 235
Wszechwidzący

  • Postów:651
  • Lokalizacja:Polska
Offline

Napisano 20.05.2011 12:17

to jak think przyjmuje 1 parametr to po co public npc_think(id, ent) ? nie ogarniam was xD ;d
==

jeśli masz fejsa i chcesz mi pomóc to wejdź tutaj: Zaproś kumpla by lubił nasz sklep | Facebook

na pewno jakoś C się odwdzięczę!


#18 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 20.05.2011 12:52

to jak think przyjmuje 1 parametr to po co public npc_think(id, ent) ? nie ogarniam was xD ;d
==


A o to to już pytaj autora tematu xD
  • +
  • -
  • 1

#19 Optymalny193

    Wszechwidzący

  • Autor tematu
  • Zbanowany

Reputacja: 30
Życzliwy

  • Postów:294
  • Imię:Paweł
  • Lokalizacja:Europa
Offline

Napisano 20.05.2011 12:58

co do pierwszego Whisper to to:

new attacker = read_data( 1 );


#20 diablix

    emeryt

  • Przyjaciel

Reputacja: 507
Wszechwiedzący

  • Postów:663
  • GG:
  • Steam:steam
  • Imię:Daniel
  • Lokalizacja:Warszawa
Offline

Napisano 20.05.2011 13:22

co do pierwszego Whisper to to:


new attacker = read_data( 1 );


Nie trzeba nic nowego tworzyć skoro już jest parametr attacker w Ham_TakeDamage
  • +
  • -
  • 1




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych