[MOD METIN]Creare un npc

« Older   Newer »
 
  Share  
.
  1. Isbjørn
        +1   -1
     
    .

    User deleted


    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 blocco note
    come linguaggio selezionate lua

    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!" )

    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!" )
    elseif blabla == 2 then
    if pc . gold >= 10 then
    pc . changegold ( - 10 )
    pc . give_item2 ( "30028" , 1 )
    else
    say ( "Non hai abbastanza yang!" )
    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à"

    pc.polymorph (value,tempo) trasforma il pg nel value del mostro per il tempo inserito (in secondi)
    if pc.is_polymorphed () then se il pg è trasformato
    notice_all ("Messaggio") Da una notizia a tutti (tipo il comando /n )

    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
    SPOILER (click to view)
    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 ()
    affect.remove_collect ()
     
    Top
    .
  2. .:::The_Jocker:::.
        +1   -1
     
    .

    User deleted


    molto utile
     
    Top
    .
  3.     +1   -1
     
    .
    Avatar

    Nuovo del Forum

    Group
    Member
    Posts
    2
    Rep
    0

    Status
    Offline
    questi npc che si creano non vanno poi implementati in mob_proto (navicat) ?e npc.txt (winscp)?
     
    Top
    .
2 replies since 2/7/2010, 18:11   615 views
  Share  
.