Jak zrobić NPC?
Optymalny193 17.05.2011
Cześć
jak zrobić npc na forum?
czyli podejde do czegoś i pokazuje sie menu i wybieram sobie cos
taki ludzik na respie
jak zrobić npc na forum?
czyli podejde do czegoś i pokazuje sie menu i wybieram sobie cos
taki ludzik na respie
diablix
17.05.2011
Optymalny193 18.05.2011
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
dodam np. menu(id); i otwiera menu ale duzo roboty
Edited by Optymalny193, 18.05.2011 13:19.
Jak możesz to zajrzyj na PW tego ExpModa.
@@EDIT
Patrz diablix od razu mam dotknięcie
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
Edited by Optymalny193, 18.05.2011 13:19.
mierzwi 18.05.2011
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ę.
diablix
18.05.2011
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
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
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)
Optymalny193 18.05.2011
a jak pobrać zamknięcie menu i dać np.
@UP
I jak dać dokladny kod na pobranie czy to czlowiek bo tutkow nie ma
menu = false;
@UP
I jak dać dokladny kod na pobranie czy to czlowiek bo tutkow nie ma
mierzwi 18.05.2011
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
Optymalny193 18.05.2011
Mam tak:
I tak
I kod sie nie kompiluje
by diablix.
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.
diablix
18.05.2011
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
Musisz walnąć pętle w tym thinku bo on przyjmuje tylko jeden parametr (ent)
Optymalny193 18.05.2011
Takie cuś?
Tylko w tym blad:
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
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
DarkGL
19.05.2011
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;
}
Optymalny193 19.05.2011
Ok dzięki
Mam taki kod na npc:
Czy wszystko jest dobrze?
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?
mierzwi 19.05.2011
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.
diablix
19.05.2011
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)
Whisper
20.05.2011
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.
Edited by Whisper, 20.05.2011 09:24.
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.
Edited by Whisper, 20.05.2011 09:24.
mierzwi 20.05.2011
to jak think przyjmuje 1 parametr to po co public npc_think(id, ent) ? nie ogarniam was ;d
==
==
diablix
20.05.2011
to jak think przyjmuje 1 parametr to po co public npc_think(id, ent) ? nie ogarniam was ;d
==
A o to to już pytaj autora tematu
diablix
20.05.2011
co do pierwszego Whisper to to:
new attacker = read_data( 1 );
Nie trzeba nic nowego tworzyć skoro już jest parametr attacker w Ham_TakeDamage