Guida Giuda Creare Un Npc

KiimiKaBrotheR

Utente Attivo
Autore del topic
20 Ottobre 2011
256
0
Miglior risposta
0
gli npc sono creati con un particolare linguaggio di script chiamato LUA,
il lua è usato in moltissimi giochi,anche se i comandi sono quasi sempre diversi
vanno scritti in un documento di testo,consiglio notepad++
Download notepad++

RICORDO CHE GLI SPAZI SONO IMPORTANTISSIMI!

COME FACCIO A FAR DIRE QUALCOSA A UN NPC?

ci sono tre modi per far parlare in tre modi diversi

se si vuole far dire a un npc qualcosa normalmente si scrive

codice:
say ( "testo" )

a questo punto il nostro npc dirà semplicemente "testo"

è abbastanza intuitivo visto che "say" in inglese vuol dire "dire"

se si vuole far dire un titolo usiamo

codice:
say_title ( "titolo" )

il titolo viene visualizzato in giallo

se invece è un avviso si scrive

codice:
say_reward ( "avviso" )

e verrà visualizzato in rosa



facciamo l'esempio di un npc che vende item



codice:
say_title ( "venditore" )
say ( "sono un venditore sai?" )
say ( "posso venderti degli item" )
say ( "vuoi?" )
say_reward ( "ricordati che costa yang!" )


continuando con l'npc che vende item ora vediamo come...

CREARE DELLE OPZIONI

è molto semplice

codice:
local blabla = select ( "pelle di zampa d'orso" , "artiglio di lupo" , "dente di cinghiale" , "chiudi" )

a questo punto "blabla" è diventata la variabile della selezione!

le variabili vi serviranno molto in npc più complicati con opzioni l'una dentro l'altra!

ma adesso come facciamo a specificare cosa avviene quando viene cliccata un opzione?

GLI IF & ELSEIF

è molto intuitivo,"if",si sa,in ingleve vuol dire "se"

e allora scriviamo

codice:
if blabla == 1 then

sotto vanno messi i comandi che dopo vedremo

molto facile da interpretare, in italiano sarebbe

se blabla == 1 allora

praticamente: SE l'opzione è uguale a 1 allora
[comandi]

ricordiamo che blala è la nostra variabile,se noi avessimo messo "local vloaid" allora
adesso metteremmo "if vloaid"

per la seconda opzione non dobbiamo più mettere if ma elseif,else in inglese vuol
dire altrimenti

codice:
elseif blabla== 2 then

altrimenti se blabla è uguale a 2 allora

siamo arrivati qua

codice:
say_title ( "venditore" )
say ( "sono un venditore sai?" )
say ( "posso venderti degli item" )
say ( "vuoi?" )
say_reward ( "ricordati che costa yang!" )
local blabla = select ( "pelle di zampa d'orso" , "artiglio di lupo" , "dente di cinghiale" , "chiudi" )
if blabla == 1 then

adesso vediamo i fatidici COMANDI

I COMANDI

/!\ QUANDO FINISCE UNA SERIE DI COMANDI BISOGNA SEMPRE METTERE
return
end

ci sono diversi tipi di comandi da mettere sotto agli if,nel caso del venditore

codice:
pc . give_item2 ( "value" , quantità )

questo comando da l'item "value" nella

"quantità" scelta

però gli item non li vogliamo dare gratis

per far pagare mettiamo questo comando

codice:
if pc . gold >= 10 then

pc . changegold ( - 10 )



se i soldi sono maggiori (>) di 10 allora
cambia i soldi in meno (-) 10

naturalmente 10 è un esempio,voi mettete il vostro prezzo

siamo arrivati qui

codice:
say_title ( "venditore" )
say ( "sono un venditore sai?" )
say ( "posso venderti degli item" )
say ( "vuoi?" )
say_reward ( "ricordati che costa yang!" )
local blabla = select ( "pelle di zampa d'orso" , "artiglio di lupo" , "dente di cinghiale" , "chiudi" )
if blabla == 1 then
if pc . gold >= 10 then
pc . changegold ( - 10 )
pc . give_item2 ( "30053" , 1 )

ma se chi clicca l'npc non ha abbastanza soldi? c'è il nostro amico else

codice:
else
say ( "Non hai abbastanza yang!" )


codice:
say_title ( "venditore" )
say ( "sono un venditore sai?" )
say ( "posso venderti degli item" )
say ( "vuoi?" )
say_reward ( "ricordati che costa yang!" )
local blabla = select ( "pelle di zampa d'orso" , "artiglio di lupo" , "dente di cinghiale" , "chiudi" )
if blabla == 1 then
if pc . gold >= 10 then

pc . changegold ( - 10 )
pc . give_item2 ( "30053" , 1 )
else
say ( "Non hai abbastanza yang!" )
return
end

ho messo return end perchè è finita una serie di comandi!

naturalmente possiamo continuare a fare le opzioni con elseif

codice:
say_title ( "venditore" )
say ( "sono un venditore sai?" )
say ( "posso venderti degli item" )
say ( "vuoi?" )
say_reward ( "ricordati che costa yang!" )
local blabla = select ( "pelle di zampa d'orso" , "artiglio di lupo" , "dente di cinghiale" , "chiudi" )
if blabla == 1 then
if pc . gold >= 10 then
pc . changegold ( - 10 )
pc . give_item2 ( "30053" , 1 )
else
say ( "Non hai abbastanza yang!" )
return
end
elseif blabla == 2 then
if pc . gold >= 10 then
pc . changegold ( - 10 )
pc . give_item2 ( "30028" , 1 )
else
say ( "Non hai abbastanza yang!" )
return
end
elseif blabla == 3 then
if pc . gold >= 10 then

pc . changegold ( - 10 )
pc . give_item2 ( "30004" , 1 )
else
say ( "Non hai abbastanza yang!" )
return
end

per il "chiudi":non specificatelo nemmeno,se non è specificato quando lo si clicca si termina automaticamente lo script...


CREARE UN INPUT CON VARIABILE

un input è un riquadro di testo,in cui inserire un informazione che servirà
per i comandi seguenti


codice:
local lala = input ( )

questo è il comando,lala è come sopra blabla

automaticamente lala diventa la variabile di quello che c'è scritto dentro,se
noi la dentro scriviamo ciao

lala = ciao

e adesso come facciamo a utilizzarla?

mettiamo che è un npc per gm e serve a settare le skill a p di qualcuno

codice:
local nome_pg = input ( )
command("setskillother " .. nome_pg .. " 4 59")

IMPORTANTISSIMI GLI SPAZI

"[spazio]..[spazio]nome_pg[spazio]..[spazio]"

questo setterà a p aura del pg di cui hai inserito il nome

ma..avete notato command?
command serve a far fare un comando gm a un npc,naturalmente funzionerà solo
se il pg è gm

i comandi sono veramente tantissimi,consiglio di guardare gli npc da scaricare
per scoprirne e utilizzarne di nuovi!

COME AGGIUNGERE l'NPC CHE ABBIAMO APPENA CREATO

create una cartella e chiamatela con il value che volete dare all'npc IL VALUE DEVE ESSERE QUELLO DI UN NPC GIA ESISTENTE MA VUOTO es 20092
dentro createci una cartella e chiamatela "chat" (senza virgolette "")
e salvateci dentro il documento di testo come
change_empire.start.0.script

poi create un altro documento di testo e chiamatelo
change empire.start.0.arg
e dentro ci mettiamo
codice:
"Testo che volete venga visualizzato sull'opzione per entrare nell'npc"

es: vuoi viaggiare?
attenzione a mettere le virgolette ""

creiamone un altro e chiamiamolo
change_empire.start.0.when
quasi sempre va lasciato vuoto,ma se vogliamo far si
che questo npc lo possano usare solo i gm scriviamo dentro
codice:
return pc . is_gm ( )

mettete sopra l'arg in mezzo lo script e sotto il when,dopodichè mettete la cartella nell'ftp questo percorso

/usr/game(o rain)/channel/share_data/locale/hongkong(o english o newcibn)/quest/object

riavviate il server oppure in game date il comando codice:
/reload q

spawnate il vostro npc con il comando codice:
/m numero del nome della cartella

se avete sbagliato non vi manderà in loop niente,semplicemente l'npc non funzionerà

un po di comandi

if pc . gold >= 100 then
pc . changegold ( - 100 ) toglie 100 yang

if pc . gold >= 100 then
pc . changegold ( + 100 ) aggiunge 100 yang

elseif pc . countitem ( "value" ) < quantità then
say ( "Mi dispiace, ma non hai abbastanza item." )
elseif pc . countitem ( "value" ) >= quantità then
pc . removeitem ( "value" , quantità ) toglie item "value" nella quantià "quantità"


horse.advance ( ) fa salire il cavallo di un livello
horse.is_dead fa morire il cavallo
horse.is_riding () Credo serva per cavalcare il cavallo senza averlo come i buoni equitazione
horse.revive () Fa risorgere il cavallo morto
horse.ride () Serve a far salire il pg che clicca l'npc
horse.set_level () Setta il livello del cavallo del pg che clicca l'npc
horse.summon () Evoca il cavallo
horse.unride () Fa scendere il pg dal cavallo
horse.unsummon () Congeda il cavallo
horse.feed () da da mangiare al cavallo

change_sex () cambia sesso del personaggio

e ora una lunga lista di comandi di cui non conosco l'utilità presi da una vecchia guida di Sh0ck1991
codice:
__give_char_priv ()
addImage ()
addmapsignal ()
affect.add ()
affect.remove ()
affect.remove_bad ()
affect.remove_good ()
bool_to_str ()
building.get_land_id ()
building.get_land_info ()
building.has_land ()
building.set_land_owner ()
char_log ()
Chat ()
clear_server_timer ()
clearmapsignal ()
clear timer ()
cmdchat ()
color ()
complete_quest ()
complete_quest_state ()
confirm ()
sys_log ()
d.check_eliminated ()
d.clear_regen ()
d.count_monster ()
d.exit ()
d.exit_all ()
d.exit_all_to_start_position ()
d.get_kill_mob_count ()
d.get_kill_stone_count ()
d.get_map_index ()
d.getf ()
d.is_unique_dead ()
d.is_use_potion ()
d.join ()
d.jump_all ()
d.jump_all_local ()
d.kill_unique ()
d.new_jump ()
d.new_jump_all ()
d.purge ()
d.purge_unique ()
d.regen_file ()
d.revived ()
d.select ()
d.set_dest ()
d.set_exit_all_at_eliminate ()
d.set_regen_file ()
d.set_unique ()
d.set_warp_at_eliminate ()
d.setf ()
d.spawn ()
d.spawn_goto_mob ()
d.spawn_group ()
d.spawn_mob ()
d.spawn_move_group ()
d.spawn_move_unique ()
d.spawn_name_mob ()
d.spawn_stone_door ()
d.spawn_unique ()
d.spawn_wooden_door ()
d.unique_get_hp_perc ()
d.unique_set_def_grade ()
d.unique_set_hp ()
d.unique_set_maxhp ()
delay ()
find_npc_by_vnum ()
find_pc_by_name ()
find_pc_cond ()
game.drop_item ()
game.get_event_flag ()
game.get_guild_name ()
game.get_safebox_level ()
game.get_warp_guild_war_list ()
game.open_mall ()
game.open_safebox ()
game.request_make_guild ()
game.set_event_flag ()
game.set_safebox_level ()
get_global_time ()
get_locale ()
get_server_timer_arg ()
get_time ()
guild.around_ranking_string ()
guild.get_any_war ()
guild.get_ladder_point ()
guild.get_name ()
guild.get_rank ()
guild.get_reserve_war_table ()
guild.get_warp_war_list ()
guild.high_ranking_string ()
guild.is_bet ()
guild.is_war ()
guild.level ()
guild.name ()
guild.war_bet ()
guild.war_enter ()
highscore.register ()
highscore.show ()
horse.advance ()
horse.feed ()
horse.get_grade ()
horse.get_health ()
horse.get_health_pct ()
horse.get_hp ()
horse.get_level ()
horse.get_stamina ()
horse.get_stamina_pct ()
horse.is_dead ()
horse.is_mine
horse.is_riding ()
horse.revive ()
horse.ride ()
horse.set_level ()
horse.summon ()
horse.unride ()
horse.unsummon ()
input ()
is_test_server ()
item.get_count ()
item.get_level ()
item.get_name ()
item.get_refine_vnum ()
item.get_size ()
item.get_socket ()
item.get_sub_type ()
item.get_type ()
item.get_value ()
item.get_vnum ()
item.has_flag ()
item.next_refine_vnum ()
item.remove ()
item.set_socket ()
item_name ()
loop_timer ()
makequestbutton ()
marriage.divorce_time_check ()
marriage.end_wedding ()
marriage.engage_to ()
marriage.find_married_vid ()
marriage.get_married_time ()
marriage.get_wedding_list ()
marriage.join_wedding ()
marriage.marry_to ()
marriage.remove ()
marriage.set_to_marriage ()
marriage.warp_to_my_marriage_map ()
marriage.wedding_dark ()
marriage.wedding_snow ()
marriage.wedding_music ()
marriage.wedding_is_playing_music ()
Math.floor ()
Math.max ()
math.mod ()
Math.random ()
member.chat ()
member.clear_ready ()
member.set_ready ()
mob.spawn ()
mob.spawn_group ()
mob_name ()
mob_vnum ()
next_time_is_now ()
next_time_set ()
notice ()
npc.dec_remain_hairdye_count ()
npc.dec_remain_skill_book_count ()
npc.get_empire ()
npc.get_race ()
npc.get_remain_hairdye_count ()
npc.get_remain_skill_book_count ()
npc.getrace ()
npc.is_near ()
npc.is_near_vid ()
npc.is_pc ()
npc.is_quest ()
npc.kill ()
npc.lock ()
npc.open_shop ()
npc.purge ()
npc.unlock ()
npc_get_job ()
npc_is_same_empire ()
npc_is_same_job ()
number ()
party.chat ()
party.clear_ready ()
party.get_max_level ()
party.get_near_count ()
party.getf ()
party.is_leader ()
party.is_party ()
party.run_cinematic ()
party.setf ()
party.setqf ()
party.show_cinematic ()
party.syschat ()
pc.aggregate_monster ()
pc.change_alignment ()
pc.change_gold ()
pc.change_money ()
pc.change_sp ()
pc.changealignment ()
pc.changegold ()
pc.changemoney ()
pc.clear_skill ()
pc.clear_sub_skill ()
pc.clear_one_skill ()
pc.count_item ()
pc.countitem ()
pc.delqf ()
pc.destroy_guild ()
pc.enough_inventory ()
pc.forget_my_attacker ()
pc.get_armor ()
pc.get_empire ()
pc.get_equip_refine_level ()
pc.get_exp ()
pc.get_gold ()
pc.get_horse_level ()
pc.get_hp ()
pc.get_job ()
pc.get_leadership ()
pc.get_level ()
pc.get_local_x ()
pc.get_local_y ()
pc.get_map_index ()
pc.get_max_hp ()
pc.get_max_sp ()
pc.get_name ()
pc.get_next_exp ()
pc.get_part ()
pc.get_playtime ()
pc.get_sex ()
pc.get_skill_level ()
pc.get_sp ()
pc.get_start_location ()
pc.get_vid ()
pc.get_war_map ()
pc.get_weapon ()
pc.get_x ()
pc.get_y ()
pc.getarmor ()
pc.getcurrentmapindex ()
pc.getempire ()
pc.getf ()
pc.getgold ()
pc.getguild ()
pc.gethp ()
pc.getleadership ()
pc.getmaxhp ()
pc.getmaxsp ()
pc.getmoney ()
pc.getname ()
pc.getplaytime ()
pc.getqf ()
pc.get_skill_group ()
pc.getsp ()
pc.getweapon ()
pc.getx ()
pc.gety ()
pc.give_exp ()
pc.give_exp2 ()
pc.give_exp_perc ()
pc.give_gold ()
pc.give_item ()
pc.give_item2 ()
pc.give_item_from_special_item_group ()
pc.give_lotto ()
pc.has_guild ()
pc.has_master_skill ()
pc.hasguild ()
pc.have_map_scroll ()
pc.have_pos_scroll ()
pc.in_dungeon ()
pc.is_guild_master ()
pc.is_horse_alive ()
pc.is_married ()
pc.is_mount ()
pc.is_polymorphed ()
pc.isguildmaster ()
pc.mount ()
pc.pc_attract_ranger ()
pc.polymorph ()
pc.refine_equip ()
pc.remove_from_guild ()
pc.remove_item ()
pc.remove_polymorph ()
pc.removeitem ()
pc.reset_point ()
pc.revive_horse ()
pc.select ()
pc.set_part ()
pc.set_warp_location ()
pc.set_warp_location_local ()
pc.setf ()
pc.setqf ()
pc.set_skill_group ()
pc.set_skill_level ()
pc.unmount ()
pc.warp ()
pc.warp_exit ()
pc.warp_local ()
pc.warp_to_guild_war_observer_position ()
pc.is_clear_skill_group ()
pc_find_skill_teacher_vid ()
pc_find_square_guard_vid ()
pc_get_exp_bonus ()
pc_get_village_map_index ()
pc_is_novice ()
q.done ()
q.getcurrentquestindex ()
q.no_send ()
q.set_clock ()
q.set_clock_name ()
q.set_clock_value ()
q.set_counter ()
q.set_counter_name ()
q.set_counter_value ()
q.set_icon ()
q.set_quest_state ()
q.set_state ()
q.set_title ()
q.set_title2 ()
q.setstate ()
q.start ()
q.yield ()
raw_script ()
restart_quest ()
say ()
say_npc_name ()
say_pc_name ()
say_reward ()
say_title ()
say_item ()
say_item_vnum ()
select ()
select_table ()
clear_letter ()
send_letter ()
send_letter_ex ()
server_loop_timer ()
server_timer ()
set_quest_state ()
set_state ()
setbgimage ()
setcolor ()
setleftimage ()
setmapcenterposition ()
setSkin ()
setstate ()
show_horse_menu ()
skill_group_dialog ()
syschat ()
table.insert ()
table.foreach ()
table.foreachi ()
table.getn ()
table_get_random_item ()
target.clear ()
target.delete ()
target.id ()
target.npc ()
target.pc ()
target.pos ()
target.vid ()
test_chat ()
time_hour_to_sec ()
time_min_to_sec ()
timer ()
tonumber ()
tostring ()
type ()
wait ()
pc.is_engaged ()
time_to_str ()
string.format ()
Math.ceil ()
pc.is_gm ()
pc.get_gm_level ()
pc.get_alignment ()
pc.get_real_alignment ()
pc.learn_grand_master_skill ()
pc.is_skill_book_no_delay ()
pc.remove_skill_book_no_delay ()
__get_empire_priv_string ()
__give_empire_priv ()
npc.get_guild ()
pc.mining ()
d.notice ()
pc.ore_refine ()
under_han ()
d.kill_all ()
d.setqf ()
__get_guild_priv_string ()
__give_guild_priv ()
__get_guildid_byname ()
item.get_id ()
item.select ()
select_item ()
item.select_cell ()
pc.diamond_refine ()
__fish_real_refine_rod ()
__refine_pick ()
item.get_cell ()
building.reconstruct ()
arena.start_duel ()
arena.get_duel_list ()
arena.add_observer ()
arena.is_in_arena ()
BuildSkillList ()
notice_all ()
warp_all_to_village ()
say_in_map ()
goldbar.quest ()
warp_all_in_map ()
regen_in_map ()
kill_all_in_map ()
notice_in_map ()
forked.decdeadcount ()
forked.cleardeadcount ()
forked.setdeadcount ()
forked.initkillcount ()
forked.inckillcount ()
forked.initmobkillcount ()
forked.incmobkillcount ()
forked.getmobkillcount ()
warp_all_except_my_empire_in_map ()
warp_all_my_empire_in_map ()
forked.initforked ()
warp_to_village ()
forked.getdeadcount ()
forked.incbosskillcount ()
forked.getbosskillcount ()
forked.getsungziposx ()
forked.getsungziposy ()
forked.getpassstartposx ()
forked.getpassstartposy ()
forked.getsungzimapindex ()
forked.getpassmapindex ()
forked.getpassmapindexbyempire ()
get_start_mapindex ()
get_start_pos_X ()
get_start_pos_Y ()
forked.getsungzipath ()
forked.getpasspath ()
forked.getpasspathbyempire ()
forked.isforkedmapindex ()
forked.issungzimapindex ()
warp_all_to_village_except_my_empire ()
is_allow_map ()
oh.candidacy_list ()
oh.election ()
oh.candidacy_name ()
oh.candidacy ()
oh.takemonarchmoney ()
pc.teleport ()
oh.isguildmaster ()
oh.candidacycount ()
affect.remove_hair ()
affect.add_hair ()
affect.add_collect ()
affect.add_collect_point ()
pc.get_premium_remain_sec ()
oh.ismonarch ()
oh.spawnmob ()
oh.monarchbless ()
oh.monarchpowerup ()
oh.monarchdefenseup ()
pc.send_block_mode ()
command ( "command gm)
oxevent.get_status ()
oxevent.open ()
oxevent.close ()
oxevent.quiz ()
oxevent.end_event ()
oxevent.get_attender ()
oxevent.give_item ()
oxevent.end_event_force ()
forked.getlevellimit ()
mgmt.monarch_state ()
mgmt.monarch_change_lord ()
oh.frog_to_empire_money ()
oh.spawnguard ()
oh.info ()
oh.transfer ()
oh.warp ()
pc.change_sex ()
pc.change_empire ()
pc.get_change_empire_count ()
get_quest_state ()

Fonti : Inforge
 
Ultima modifica: