Risolto Come modifico i source lato server?

Stato
Discussione chiusa ad ulteriori risposte.

ScrikersTV

Utente Electrum
5 Gennaio 2018
274
23
43
104
Salve a tutti, ho i file 40k e ho un server startato in dedicato. Purtroppo ho un problema, derivato dal fatto che ho ripreso in mano un progetto di metin2 dopo anni di fermo totale (sono fermo dal 2010 :\)..
Il server è startato e viaggia alla grande (senza player ovviamente), ho imparato in poco tempo come modificare l'item_proto e il mob_proto ma....il problema mi sorge con altre questioni...
Vorrei modificare degli npc, dandogli le funzioni di crafter e di negozio, ma non trovo il modo di modificare o creare gli npc. Questo errore mi viene dato anche creando o modificando degli oggetti con funzioni, esempio pietra arcobaleno.
Qualcuno potrebbe spiegarmi come modificare i source e come ricompilarli per queste cose? grazie.
 
Salve a tutti, ho i file 40k e ho un server startato in dedicato. Purtroppo ho un problema, derivato dal fatto che ho ripreso in mano un progetto di metin2 dopo anni di fermo totale (sono fermo dal 2010 :\)..
Il server è startato e viaggia alla grande (senza player ovviamente), ho imparato in poco tempo come modificare l'item_proto e il mob_proto ma....il problema mi sorge con altre questioni...
Vorrei modificare degli npc, dandogli le funzioni di crafter e di negozio, ma non trovo il modo di modificare o creare gli npc. Questo errore mi viene dato anche creando o modificando degli oggetti con funzioni, esempio pietra arcobaleno.
Qualcuno potrebbe spiegarmi come modificare i source e come ricompilarli per queste cose? grazie.

E' presente confusione nel titolo-contenuto
Provo a fare un riassunto nel limite delle mie capacità..

I source servono a :

-creare game,db (source server)
-creare launcher (source client)

Li utilizzi prevalentemente per modifiche systems o creare nuovi system (ed altre tantissime cose per il quale 1 singolo commento non è sufficiente a rispondere)

In ogni caso, per modificare o creare npc, la risposta dipende da cosa intendi esattamente

Quando scrivi:

"Vorrei modificare degli npc, dandogli le funzioni di crafter e di negozio, ma non trovo il modo di modificare o creare gli npc. Questo errore mi viene dato anche creando o modificando degli oggetti con funzioni, esempio pietra arcobaleno."

Hai scritto diverse cose, ma ogni cosa è differente ed ha una risposta separata
Parti con una singola domanda, esempio:

1)modificare item dentro gli npc
2)creare un npc crafter
3)creare la pietra arcobaleno che serve a portare le skill a P

Per ognuna di queste domande trovi le risposte online, abbastanza facilmente
In ogni caso, parti con una, rispondi ad una, e poi passi alla successiva
Questo è il metodo che devi utilizzare per imparare a lavorare a metin2
 
E' presente confusione nel titolo-contenuto
Provo a fare un riassunto nel limite delle mie capacità..

I source servono a :

-creare game,db (source server)
-creare launcher (source client)

Li utilizzi prevalentemente per modifiche systems o creare nuovi system (ed altre tantissime cose per il quale 1 singolo commento non è sufficiente a rispondere)

In ogni caso, per modificare o creare npc, la risposta dipende da cosa intendi esattamente

Quando scrivi:

"Vorrei modificare degli npc, dandogli le funzioni di crafter e di negozio, ma non trovo il modo di modificare o creare gli npc. Questo errore mi viene dato anche creando o modificando degli oggetti con funzioni, esempio pietra arcobaleno."

Hai scritto diverse cose, ma ogni cosa è differente ed ha una risposta separata
Parti con una singola domanda, esempio:

1)modificare item dentro gli npc
2)creare un npc crafter
3)creare la pietra arcobaleno che serve a portare le skill a P

Per ognuna di queste domande trovi le risposte online, abbastanza facilmente
In ogni caso, parti con una, rispondi ad una, e poi passi alla successiva
Questo è il metodo che devi utilizzare per imparare a lavorare a metin2
si scusa ho fatto una miriade di domande e ho fatto un po di confusione.
Tornando alle domande, intendevo fare queste cose:
1) creare un npc (tipo il 20092 che è vuoto) e inserirci delle scelte tipo "se mi dai 10 papiri ti do metallo magico", purtroppo questo npc non mi parla e lo script sembra settato bene
2) creare un npc (prendo sempre il 20092 come esempio) e inserirci un negozio tipo la bottegaia, mercante armi ecc) ma al riavvio del serverle impostazioni su navicat spariscono
3) creare tipo un oggetto che cliccandoci sopra te lo faccia utilizzare (esempio pietra arcobaleno che hai citato).

Purtroppo queste operazioni, che nel 2010 le facevo tranquillamente, ora sembrano essere bloccate dai file source, che io non so dove metterci mani.
Messaggio unito automaticamente:

Non chiedo che qualcuno mi dica "te lo faccio io", ma vorrei sapere almeno che file dei souce devo andare a modificare e come ricompilarli quando finito
 
Ultima modifica:
si scusa ho fatto una miriade di domande e ho fatto un po di confusione.
Tornando alle domande, intendevo fare queste cose:
1) creare un npc (tipo il 20092 che è vuoto) e inserirci delle scelte tipo "se mi dai 10 papiri ti do metallo magico", purtroppo questo npc non mi parla e lo script sembra settato bene
2) creare un npc (prendo sempre il 20092 come esempio) e inserirci un negozio tipo la bottegaia, mercante armi ecc) ma al riavvio del serverle impostazioni su navicat spariscono
3) creare tipo un oggetto che cliccandoci sopra te lo faccia utilizzare (esempio pietra arcobaleno che hai citato).

Purtroppo queste operazioni, che nel 2010 le facevo tranquillamente, ora sembrano essere bloccate dai file source, che io non so dove metterci mani.

Provo a risponderti in maniera grossolana(linguaggio tecnico e dettagli richiederebbero tempo che non ho), ma fornendoti comunque le informazioni che ti permetteranno di farlo

Punto 1

La funzione che richiedi necessita di una quest, le quest richiedono competenze in lua, o comunque, quanto meno devi avere un pacchetto quest che puoi facilmente trovare su internet, ad esempio qua: https://gherusioweb.altervista.org/download-free/

Quando hai la quest, la carichi in Winscp -> germany/quest (Ad esempio 10papiripermetallomagico.lua)
Poi la devi compilare, apri putty cd /xx/germany/quest && ./qc 10papiripermetallomagico.lua
Chiaramente il file "10papiripermetallomagico.lua" deve contenere il codice che adempie alla funzione che hai richiesto

Che nel tuo caso sarebbe :

Codice:
quest papiri begin
    state start begin
        when 20092.chat."Hai dei Papiri Antichi?" with pc.count_item(25040) >= 10 begin
            pc.remove_item(25040, 10) -- 12345 è l'ID degli oggetti dei papiri antichi
            pc.give_item2(25041) -- 67890 è l'ID dell'oggetto Metallo Magico
        end
    end
end

Come vedi nel codice di sopra uso la funzione pc.remove_item per rimuovere 25040 e la funzione pc.give_item2 per assegnare l'item, trovi la lista delle funzioni in un file che si chiama quest_functions

Punto 2:

Credo per come hai scritto che lo sai già fare
Faccio un riassunto veloce anche qua..
Devi aprire navicat, player, shop & shop item
In shop identifichi l'npc con un numero esempio:
vnum name npc_vnum
3 Bottegaia 9003

In shop_item metti l'item dentro la bottegaia, usando l'id assegnato prima, ad esempio:

shop_vnum item_vnum count
3 27003 10

Se lo hai fatto già, e riscontri problemi, spiegami meglio il tipo di problema e vediamo di capire perchè

Punto 3:

La risposta è uguale al punto 1, ovvero devi avere la quest, la quest richiede il codice..
Nel tuo caso parliamo di una quest semplice, che puoi trovare comunque nel link che ti avevo dato sopra
La quest dovrebbe chiamarsi qualcosa come training grand master ecc..
Se usi la ricerca di notepad, fai ctrl+f e cerchi 50512 nella cartella quest che scarichi sopra, puoi trovare più velocemente funzioni che magari ti interessano
 
Provo a risponderti in maniera grossolana(linguaggio tecnico e dettagli richiederebbero tempo che non ho), ma fornendoti comunque le informazioni che ti permetteranno di farlo

Punto 1

La funzione che richiedi necessita di una quest, le quest richiedono competenze in lua, o comunque, quanto meno devi avere un pacchetto quest che puoi facilmente trovare su internet, ad esempio qua: https://gherusioweb.altervista.org/download-free/

Quando hai la quest, la carichi in Winscp -> germany/quest (Ad esempio 10papiripermetallomagico.lua)
Poi la devi compilare, apri putty cd /xx/germany/quest && ./qc 10papiripermetallomagico.lua
Chiaramente il file "10papiripermetallomagico.lua" deve contenere il codice che adempie alla funzione che hai richiesto

Che nel tuo caso sarebbe :

Codice:
quest papiri begin
    state start begin
        when 20092.chat."Hai dei Papiri Antichi?" with pc.count_item(25040) >= 10 begin
            pc.remove_item(25040, 10) -- 12345 è l'ID degli oggetti dei papiri antichi
            pc.give_item2(25041) -- 67890 è l'ID dell'oggetto Metallo Magico
        end
    end
end

Come vedi nel codice di sopra uso la funzione pc.remove_item per rimuovere 25040 e la funzione pc.give_item2 per assegnare l'item, trovi la lista delle funzioni in un file che si chiama quest_functions

Punto 2:

Credo per come hai scritto che lo sai già fare
Faccio un riassunto veloce anche qua..
Devi aprire navicat, player, shop & shop item
In shop identifichi l'npc con un numero esempio:
vnum name npc_vnum
3 Bottegaia 9003

In shop_item metti l'item dentro la bottegaia, usando l'id assegnato prima, ad esempio:

shop_vnum item_vnum count
3 27003 10

Se lo hai fatto già, e riscontri problemi, spiegami meglio il tipo di problema e vediamo di capire perchè

Punto 3:

La risposta è uguale al punto 1, ovvero devi avere la quest, la quest richiede il codice..
Nel tuo caso parliamo di una quest semplice, che puoi trovare comunque nel link che ti avevo dato sopra
La quest dovrebbe chiamarsi qualcosa come training grand master ecc..
Se usi la ricerca di notepad, fai ctrl+f e cerchi 50512 nella cartella quest che scarichi sopra, puoi trovare più velocemente funzioni che magari ti interessano
Punto 1:
Quella quest, è uguale per qualsiasi quest? Cambierebbe solo il tipo di oggetti che si richiede e l'npc che richiama la quest giusto?

Punto 2:
Ho provato a creare l'npc 20092 in shop e shop_item e rimangono anche col riavvio, purtroppo però se spawno l'npc /m 20092 e provo a parlarci non mi fa interagire, come se fosse un npc vuoto
 
Punto 1:
Quella quest, è uguale per qualsiasi quest? Cambierebbe solo il tipo di oggetti che si richiede e l'npc che richiama la quest giusto?

Punto 2:
Ho provato a creare l'npc 20092 in shop e shop_item e rimangono anche col riavvio, purtroppo però se spawno l'npc /m 20092 e provo a parlarci non mi fa interagire, come se fosse un npc vuoto

Per il p.1 se ho capito la domanda si
La puoi gestire come vuoi ovviamente, dipende dalle esigenze

Per il p.2 fai gli screen di shop e shop item
 
1697914061074.png
1697914086331.png

questi sono gli screen delle tabelle shop, ma non mi vengono aperti.
Non mi funziona nemmeno la compilazione della quest. l'npc non mi apre nulla
 
Visualizza allegato 72043Visualizza allegato 72044
questi sono gli screen delle tabelle shop, ma non mi vengono aperti.
Non mi funziona nemmeno la compilazione della quest. l'npc non mi apre nulla

Apri player->mob_proto
ctrl+f , e cerchi 20092
Ci sarà una colonna di nome one_click e metti 1 per l'npc 20092 (dovrebbe essere 2)

Riavvia il server e fammi sapere
Se non ti funziona, fammi uno screen di quello che vedi in gioco

Per la quest, usa un npc differente prima di tutto, altrimenti nascono altre domande attualmente
Poi hai fatto la procedura con qc? Hai 25040 maggiore di 10?
 
1697915660418.png

ora funziona :) era settato "2" su one_click

Per la quest funziona solo che devo avere i 10 papiri all'interno dell'inventario, altrimenti non mi parla nemmeno...in tal caso, la stesura di un elseif è la stessa dei file 2007/2011? (ovviamente poi credo di dover rilanciare il qc su putty
 
Visualizza allegato 72045
ora funziona :) era settato "2" su one_click

Per la quest funziona solo che devo avere i 10 papiri all'interno dell'inventario, altrimenti non mi parla nemmeno...in tal caso, la stesura di un elseif è la stessa dei file 2007/2011? (ovviamente poi credo di dover rilanciare il qc su putty

Devi modificare la quest di sopra come segue, per aprire senza i papiri

Codice:
quest papiri begin
    state start begin

when 20092.chat."Hai dei Papiri Antichi?"  begin
    if pc.count_item(25040) >= 10 then
        pc.remove_item(25040, 10)
        pc.give_item2(25041)
    else
        say("Non hai abbastanza Papiri Antichi.")
    end
end


    end
end

Come puoi vedere ho semplicemente inserito la condizione dopo il dialogo
Poi puoi mettere un menu che permette di selezionare le opzioni ecc..
Ti consiglio di osservare quest già esistenti e "simili" alle tue richieste
 
Devi modificare la quest di sopra come segue, per aprire senza i papiri

Codice:
quest papiri begin
    state start begin

when 20092.chat."Hai dei Papiri Antichi?"  begin
    if pc.count_item(25040) >= 10 then
        pc.remove_item(25040, 10)
        pc.give_item2(25041)
    else
        say("Non hai abbastanza Papiri Antichi.")
    end
end


    end
end

Come puoi vedere ho semplicemente inserito la condizione dopo il dialogo
Poi puoi mettere un menu che permette di selezionare le opzioni ecc..
Ti consiglio di osservare quest già esistenti e "simili" alle tue richieste
ok, ma nella quest posso inserire il dialogo tipo:
say ( "Io scambio papiri antichi per metallo" )
local item_select = select ( "10 papiri" , "20 papiri" , "Esci" )
if item == 3 then
return
end
if item == 1 then
if pc.count_item (25040) >= 10 then
pc.remove_item (25040, 10)
pc.give_item2 (25041)
else
say ( "Non hai 10 papiri antichi" )
end
if item == 2 then
if pc.count_item (25040) >= 20 then
pc.remove_item (25040, 20)
pc.give_item2 (25041 , 2 )
else
say ( "Non hai 20 papiri antichi" )
end
end

potrei inserirlo?
 
Salve a tutti, ho i file 40k e ho un server startato in dedicato. Purtroppo ho un problema, derivato dal fatto che ho ripreso in mano un progetto di metin2 dopo anni di fermo totale (sono fermo dal 2010 :\)..
Il server è startato e viaggia alla grande (senza player ovviamente), ho imparato in poco tempo come modificare l'item_proto e il mob_proto ma....il problema mi sorge con altre questioni...
Vorrei modificare degli npc, dandogli le funzioni di crafter e di negozio, ma non trovo il modo di modificare o creare gli npc. Questo errore mi viene dato anche creando o modificando degli oggetti con funzioni, esempio pietra arcobaleno.
Qualcuno potrebbe spiegarmi come modificare i source e come ricompilarli per queste cose? grazie.
Ci credo che viaggia alla grande, sei solo tu nel gioco e le uniche tue attività sono passeggiare per il villo e magari tirare 2 spadate :asd:
Scrivimi su discord: murai2412

Se posso aiutarti su qualcosa lo farò volentieri senza chiedere nulla!
 
Ultima modifica:
ok, ma nella quest posso inserire il dialogo tipo:
say ( "Io scambio papiri antichi per metallo" )
local item_select = select ( "10 papiri" , "20 papiri" , "Esci" )
if item == 3 then
return
end
if item == 1 then
if pc.count_item (25040) >= 10 then
pc.remove_item (25040, 10)
pc.give_item2 (25041)
else
say ( "Non hai 10 papiri antichi" )
end
if item == 2 then
if pc.count_item (25040) >= 20 then
pc.remove_item (25040, 20)
pc.give_item2 (25041 , 2 )
else
say ( "Non hai 20 papiri antichi" )
end
end

potrei inserirlo?

L'idea di menu è corretta
Gli if sono sbagliati, sia perchè non usi correttamente if/elseif, sia perchè il menu si chiama item_select

local item_select

Comunque fai sempre le prove, se non funziona in gioco c'è qualcosa di sbagliato nella quest
Ma grossolanamente l'idea è giusta
Messaggio unito automaticamente:

Ci credo che viaggia alla grande, sei solo tu nel gioco e le uniche tue attività sono passeggiare per il villo e magari tirare 2 spadate :asd:
Scrivimi su discord: murai2412

Se posso aiutarti su qualcosa lo farò volentieri senza chiedere nulla!

La funzionalità di inforge, dovrebbe essere offrire supporto qua stesso, in questo modo aiuti indirettamente altri :) (oggi e tra 2 anni)
 
L'idea di menu è corretta
Gli if sono sbagliati, sia perchè non usi correttamente if/elseif, sia perchè il menu si chiama item_select



Comunque fai sempre le prove, se non funziona in gioco c'è qualcosa di sbagliato nella quest
Ma grossolanamente l'idea è giusta
Messaggio unito automaticamente:



La funzionalità di inforge, dovrebbe essere offrire supporto qua stesso, in questo modo aiuti indirettamente altri :) (oggi e tra 2 anni)
ok ti ringrazio, mi potresti dire la sintassi da mettere per l'utilizzo di item_select? Ero convinto che andasse if/elseif :confused:
Messaggio unito automaticamente:

Ci credo che viaggia alla grande, sei solo tu nel gioco e le uniche tue attività sono passeggiare per il villo e magari tirare 2 spadate :asd:
Scrivimi su discord: murai2412

Se posso aiutarti su qualcosa lo farò volentieri senza chiedere nulla!
"viaggia alla grande" intendendo dire che ho startato senza problemi e senza errori/lag/ecc che normalmente una persona che è stata lontana dai linguaggi di programmazione (anche basici) per oltre 10 anni riscontrerebbe.
Ti ringrazio dell'offerta di aiuto datami, ne terrò conto :)
 
ok ti ringrazio, mi potresti dire la sintassi da mettere per l'utilizzo di item_select? Ero convinto che andasse if/elseif :confused:
E' giusto quello che hai scritto, ma non fai esattamente questo
Non usi gli elseif e non richiami il menu con il nome giusto
Comunque quando compili la quest, se ci sono errori, ti avvisa

Codice:
            local s = select("ciao","ciao2","chiudi")
            if s == 1 then
                   say("ciao")
            elseif s == 2 then
                   say("ciao2")
            elseif s == 3 then
            end
 
E' giusto quello che hai scritto, ma non fai esattamente questo
Non usi gli elseif e non richiami il menu con il nome giusto
Comunque quando compili la quest, se ci sono errori, ti avvisa

Codice:
            local s = select("ciao","ciao2","chiudi")
            if s == 1 then
                   say("ciao")
            elseif s == 2 then
                   say("ciao2")
            elseif s == 3 then
            end
altro giorno, altro problema ahaha
Ho ricostruito uno script ma nel momento di compilarlo mi resta "bloccato" sulla compilazione

Codice:
quest arcobaleno begin
    state start begin
        when 50512.use begin
        say_title("Pietra Arcobaleno")
        if pc.get_skill_group() == 0 then
        say("Scegli la dottrina prima di usare la pietra")
        return
        end
        if pc . gold < 5000000 then
        say("Non hai abbastanza Yang per usare la Pietra")
        say("Per usarla ti serviranno:")
        say_reward("5kk Yang")
        return
        end
        if pc.level < 35 then
        say("Non hai il livello neccessario per usare la Pietra")
        say("Per Usarla devi essere livello 35")
        return
        end
        say("Con questa pietra puoi portare le tue skill a P")
        say("Proseguire?")
        local opzioni =select ("Si","No")
        if opzioni == 1 then
        if pc.job ==0 then
                say("Scegli la tua Dottrina:")
               
                local s=select("Corporale","Mentale")
               
                if s==1 then
                --corporale
                    local corpo=select ("Taglio a Tre Vie","Vortice della Spada","Estasi","Aura della Spada","Sibilare")
                    if corpo ==1 then
                    pc.set_skill_level(1 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==2 then
                    pc.set_skill_level(2 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==3 then
                    pc.set_skill_level(3 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==4 then
                    pc.set_skill_level(4 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==5 then
                    pc.set_skill_level(5 ,59)
                    pc.change_money(-5000000)
                    end
                   
                    elseif s==2 then
                --mentale
                    local corpo=select ("Penetrazione","Colpire Duramente","Pestone","Corpo Forte","Colpo di Spada")
                    if corpo ==1 then
                    pc.set_skill_level(16 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==2 then
                    pc.set_skill_level(17 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==3 then
                    pc.set_skill_level(18 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==4 then
                    pc.set_skill_level(19 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==5 then
                    pc.set_skill_level(20 ,59)
                    pc.change_money(-5000000)
                    end
                   
                   
                elseif pc.job ==1 then
                say("Scegli la tua Dottrina:")
               
                local sa=select("Corpo a Corpo","Lotta a Distanza")
               
                if sa==1 then
                local cac=select ("Tranello","Attacco Veloce","Vortice del Pugnale","Camuffamento","Nuvola Velenosa")
                    if cac ==1 then
                    pc.set_skill_level(31 ,59)
                    pc.change_money(-5000000)
                    elseif cac ==2 then
                    pc.set_skill_level(32 ,59)
                    pc.change_money(-5000000)
                    elseif cac ==3 then
                    pc.set_skill_level(33 ,59)
                    pc.change_money(-5000000)
                    elseif cac ==4 then
                    pc.set_skill_level(34 ,59)
                    pc.change_money(-5000000)
                    elseif cac ==5 then
                    pc.set_skill_level(35 ,59)
                    pc.change_money(-5000000)
                    end
                   
                elseif sa==2 then
                local cac2=select ("Tiro Ripetuto","Pioggia di Frecce","Freccia di Fuoco","Passo di Piuma","Freccia Velenosa")
                    if cac2 ==1 then
                    pc.set_skill_level(46 ,59)
                    pc.change_money(-5000000)
                    elseif cac2 ==2 then
                    pc.set_skill_level(47 ,59)
                    pc.change_money(-5000000)
                    elseif cac2 ==3 then
                    pc.set_skill_level(48 ,59)
                    pc.change_money(-5000000)
                    elseif cac2 ==4 then
                    pc.set_skill_level(49 ,59)
                    pc.change_money(-5000000)
                    elseif cac2 ==5 then
                    pc.set_skill_level(50 ,59)
                    pc.change_money(-5000000)
                    end
                                   
                elseif pc.job ==2 then
                say("Scegli la tua Dottrina:")
               
                local saa=select("Magia Nera","Magia Bianca")
               
                if saa==1 then
                local mag=select ("Colpo Oscuro","Colpo di Fiamma","Spirito di Fuoco","Prottezione Oscura","Colpo dello Spirito","Pietra Oscura")
                    if mag ==1 then
                    pc.set_skill_level(76 ,59)
                    pc.change_money(-5000000)
                    elseif mag ==2 then
                    pc.set_skill_level(77 ,59)
                    pc.change_money(-5000000)
                    elseif mag ==3 then
                    pc.set_skill_level(78 ,59)
                    pc.change_money(-5000000)
                    elseif mag ==4 then
                    pc.set_skill_level(79 ,59)
                    pc.change_money(-5000000)
                    elseif mag ==5 then
                    pc.set_skill_level(80 ,59)
                    pc.change_money(-5000000)
                    elseif mag ==6 then
                    pc.set_skill_level(81 ,59)
                    pc.change_money(-5000000)
                    end
                   
                elseif saa==2 then
                local mag2=select ("Schiocco di Dita","Vortice del Drago","Lama Magica","Paura","Armatura Magica","Annulare della Magia")
                    if mag2 ==1 then
                    pc.set_skill_level(61 ,59)
                    pc.change_money(-5000000)
                    elseif mag2 ==2 then
                    pc.set_skill_level(62 ,59)
                    pc.change_money(-5000000)
                    elseif mag2 ==3 then
                    pc.set_skill_level(63 ,59)
                    pc.change_money(-5000000)
                    elseif mag2 ==4 then
                    pc.set_skill_level(64 ,59)
                    pc.change_money(-5000000)
                    elseif mag2 ==5 then
                    pc.set_skill_level(65 ,59)
                    pc.change_money(-5000000)
                    elseif mag2 ==6 then
                    pc.set_skill_level(66 ,59)
                    pc.change_money(-5000000)
                    end   
                                       
            elseif pc.job ==3 then
            say("Scegli la tua Dottrina:")
               
            local saaa=select("Shamana Drago","Shamana Curare")
               
            if saaa==1 then
                local as=select ("Talismano Volante","Tiro del Drago","Ruggito del Drago","Benedizione","Riflessione","Aiuto del Drago")
                    if as ==1 then
                    pc.set_skill_level(91 ,59)
                    pc.change_money(-5000000)
                    elseif as ==2 then
                    pc.set_skill_level(92 ,59)
                    pc.change_money(-5000000)
                    elseif as ==3 then
                    pc.set_skill_level(93 ,59)
                    pc.change_money(-5000000)
                    elseif as ==4 then
                    pc.set_skill_level(94 ,59)
                    pc.change_money(-5000000)
                    elseif as ==5 then
                    pc.set_skill_level(95 ,59)
                    pc.change_money(-5000000)
                    elseif as ==6 then
                    pc.set_skill_level(96 ,59)
                    pc.change_money(-5000000)
                    end
                   
                elseif saaa==2 then
                local asa=select ("Lancio dei Fulmini","Evoca Lampi","Artiglio Lampo","Curare","Velocita'","Attacco+")
                    if asa ==1 then
                    pc.set_skill_level(106 ,59)
                    pc.change_money(-5000000)
                    elseif asa ==2 then
                    pc.set_skill_level(107 ,59)
                    pc.change_money(-5000000)
                    elseif asa ==3 then
                    pc.set_skill_level(108 ,59)
                    pc.change_money(-5000000)
                    elseif asa ==4 then
                    pc.set_skill_level(109 ,59)
                    pc.change_money(-5000000)
                    elseif asa ==5 then
                    pc.set_skill_level(110 ,59)
                    pc.change_money(-5000000)
                    elseif asa ==6 then
                    pc.set_skill_level(111 ,59)
                    pc.change_money(-5000000)
                    return
                    end   
            end   
        end
    end

Script preso da un altro forum e modificato per le mie esigenze
 
altro giorno, altro problema ahaha
Ho ricostruito uno script ma nel momento di compilarlo mi resta "bloccato" sulla compilazione

Codice:
quest arcobaleno begin
    state start begin
        when 50512.use begin
        say_title("Pietra Arcobaleno")
        if pc.get_skill_group() == 0 then
        say("Scegli la dottrina prima di usare la pietra")
        return
        end
        if pc . gold < 5000000 then
        say("Non hai abbastanza Yang per usare la Pietra")
        say("Per usarla ti serviranno:")
        say_reward("5kk Yang")
        return
        end
        if pc.level < 35 then
        say("Non hai il livello neccessario per usare la Pietra")
        say("Per Usarla devi essere livello 35")
        return
        end
        say("Con questa pietra puoi portare le tue skill a P")
        say("Proseguire?")
        local opzioni =select ("Si","No")
        if opzioni == 1 then
        if pc.job ==0 then
                say("Scegli la tua Dottrina:")
              
                local s=select("Corporale","Mentale")
              
                if s==1 then
                --corporale
                    local corpo=select ("Taglio a Tre Vie","Vortice della Spada","Estasi","Aura della Spada","Sibilare")
                    if corpo ==1 then
                    pc.set_skill_level(1 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==2 then
                    pc.set_skill_level(2 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==3 then
                    pc.set_skill_level(3 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==4 then
                    pc.set_skill_level(4 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==5 then
                    pc.set_skill_level(5 ,59)
                    pc.change_money(-5000000)
                    end
                  
                    elseif s==2 then
                --mentale
                    local corpo=select ("Penetrazione","Colpire Duramente","Pestone","Corpo Forte","Colpo di Spada")
                    if corpo ==1 then
                    pc.set_skill_level(16 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==2 then
                    pc.set_skill_level(17 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==3 then
                    pc.set_skill_level(18 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==4 then
                    pc.set_skill_level(19 ,59)
                    pc.change_money(-5000000)
                    elseif corpo ==5 then
                    pc.set_skill_level(20 ,59)
                    pc.change_money(-5000000)
                    end
                  
                  
                elseif pc.job ==1 then
                say("Scegli la tua Dottrina:")
              
                local sa=select("Corpo a Corpo","Lotta a Distanza")
              
                if sa==1 then
                local cac=select ("Tranello","Attacco Veloce","Vortice del Pugnale","Camuffamento","Nuvola Velenosa")
                    if cac ==1 then
                    pc.set_skill_level(31 ,59)
                    pc.change_money(-5000000)
                    elseif cac ==2 then
                    pc.set_skill_level(32 ,59)
                    pc.change_money(-5000000)
                    elseif cac ==3 then
                    pc.set_skill_level(33 ,59)
                    pc.change_money(-5000000)
                    elseif cac ==4 then
                    pc.set_skill_level(34 ,59)
                    pc.change_money(-5000000)
                    elseif cac ==5 then
                    pc.set_skill_level(35 ,59)
                    pc.change_money(-5000000)
                    end
                  
                elseif sa==2 then
                local cac2=select ("Tiro Ripetuto","Pioggia di Frecce","Freccia di Fuoco","Passo di Piuma","Freccia Velenosa")
                    if cac2 ==1 then
                    pc.set_skill_level(46 ,59)
                    pc.change_money(-5000000)
                    elseif cac2 ==2 then
                    pc.set_skill_level(47 ,59)
                    pc.change_money(-5000000)
                    elseif cac2 ==3 then
                    pc.set_skill_level(48 ,59)
                    pc.change_money(-5000000)
                    elseif cac2 ==4 then
                    pc.set_skill_level(49 ,59)
                    pc.change_money(-5000000)
                    elseif cac2 ==5 then
                    pc.set_skill_level(50 ,59)
                    pc.change_money(-5000000)
                    end
                                  
                elseif pc.job ==2 then
                say("Scegli la tua Dottrina:")
              
                local saa=select("Magia Nera","Magia Bianca")
              
                if saa==1 then
                local mag=select ("Colpo Oscuro","Colpo di Fiamma","Spirito di Fuoco","Prottezione Oscura","Colpo dello Spirito","Pietra Oscura")
                    if mag ==1 then
                    pc.set_skill_level(76 ,59)
                    pc.change_money(-5000000)
                    elseif mag ==2 then
                    pc.set_skill_level(77 ,59)
                    pc.change_money(-5000000)
                    elseif mag ==3 then
                    pc.set_skill_level(78 ,59)
                    pc.change_money(-5000000)
                    elseif mag ==4 then
                    pc.set_skill_level(79 ,59)
                    pc.change_money(-5000000)
                    elseif mag ==5 then
                    pc.set_skill_level(80 ,59)
                    pc.change_money(-5000000)
                    elseif mag ==6 then
                    pc.set_skill_level(81 ,59)
                    pc.change_money(-5000000)
                    end
                  
                elseif saa==2 then
                local mag2=select ("Schiocco di Dita","Vortice del Drago","Lama Magica","Paura","Armatura Magica","Annulare della Magia")
                    if mag2 ==1 then
                    pc.set_skill_level(61 ,59)
                    pc.change_money(-5000000)
                    elseif mag2 ==2 then
                    pc.set_skill_level(62 ,59)
                    pc.change_money(-5000000)
                    elseif mag2 ==3 then
                    pc.set_skill_level(63 ,59)
                    pc.change_money(-5000000)
                    elseif mag2 ==4 then
                    pc.set_skill_level(64 ,59)
                    pc.change_money(-5000000)
                    elseif mag2 ==5 then
                    pc.set_skill_level(65 ,59)
                    pc.change_money(-5000000)
                    elseif mag2 ==6 then
                    pc.set_skill_level(66 ,59)
                    pc.change_money(-5000000)
                    end  
                                      
            elseif pc.job ==3 then
            say("Scegli la tua Dottrina:")
              
            local saaa=select("Shamana Drago","Shamana Curare")
              
            if saaa==1 then
                local as=select ("Talismano Volante","Tiro del Drago","Ruggito del Drago","Benedizione","Riflessione","Aiuto del Drago")
                    if as ==1 then
                    pc.set_skill_level(91 ,59)
                    pc.change_money(-5000000)
                    elseif as ==2 then
                    pc.set_skill_level(92 ,59)
                    pc.change_money(-5000000)
                    elseif as ==3 then
                    pc.set_skill_level(93 ,59)
                    pc.change_money(-5000000)
                    elseif as ==4 then
                    pc.set_skill_level(94 ,59)
                    pc.change_money(-5000000)
                    elseif as ==5 then
                    pc.set_skill_level(95 ,59)
                    pc.change_money(-5000000)
                    elseif as ==6 then
                    pc.set_skill_level(96 ,59)
                    pc.change_money(-5000000)
                    end
                  
                elseif saaa==2 then
                local asa=select ("Lancio dei Fulmini","Evoca Lampi","Artiglio Lampo","Curare","Velocita'","Attacco+")
                    if asa ==1 then
                    pc.set_skill_level(106 ,59)
                    pc.change_money(-5000000)
                    elseif asa ==2 then
                    pc.set_skill_level(107 ,59)
                    pc.change_money(-5000000)
                    elseif asa ==3 then
                    pc.set_skill_level(108 ,59)
                    pc.change_money(-5000000)
                    elseif asa ==4 then
                    pc.set_skill_level(109 ,59)
                    pc.change_money(-5000000)
                    elseif asa ==5 then
                    pc.set_skill_level(110 ,59)
                    pc.change_money(-5000000)
                    elseif asa ==6 then
                    pc.set_skill_level(111 ,59)
                    pc.change_money(-5000000)
                    return
                    end  
            end  
        end
    end

Script preso da un altro forum e modificato per le mie esigenze

Devi fare riferimento all'errore che ti viene riportato quando compili con qc
 
Devi fare riferimento all'errore che ti viene riportato quando compili con qc
ho cercato un altra quest, ma mi da il problema su " pc.set_skill_level" come da foto
1697985597289.png


la quest è questa:

Codice:
quest arcobaleno begin
    state start begin
    
        when 50512.use begin
            say_title ("PDA Perfetta")     
            if pc.get_skill_group() == 0 then
                say("Non hai ancora preso la dottrina.[ENTER]")
                return
            end     
            
            say("Con questo oggetto potrai portare un'abilita'")
            say("di livello superiore o uguale a 1 direttamente")
            say("a maestro perfetto.[ENTER]")
            if table.getn(vnum_list) == 0 then
                say_reward ("Non hai abilita' da migliorare.[ENTER]")
                return
            end
            wait()
            say_title ("PDA Perfetta")
            say("Scegli l'abilita' da migliorare:[ENTER]")
            table.insert(name_list, "Annulla")
            local s = select_table(name_list)
            if s == table.getn(name_list) then
                return
            end     
            local skill_name = name_list[s]
            local skill_vnum = vnum_list[s]
            say_title ("PDA Perfetta")
            say("Hai scelto: "..skill_name)
            say("Sei sicuro di voler continuare?[ENTER]")
            local a = select("Si","No")
            if a == 2 then
                return
            end
            say_title ("PDA Perfetta")
            say (skill_name, " portata a maestro perfetto.[ENTER]")
            pc.set_skill_level (skill_vnum, 40)
            pc.remove_item(item.get_vnum(), 1)
        end     
      end
end
 
ho cercato un altra quest, ma mi da il problema su " pc.set_skill_level" come da foto
Visualizza allegato 72050

la quest è questa:

Codice:
quest arcobaleno begin
    state start begin
   
        when 50512.use begin
            say_title ("PDA Perfetta")    
            if pc.get_skill_group() == 0 then
                say("Non hai ancora preso la dottrina.[ENTER]")
                return
            end    
           
            say("Con questo oggetto potrai portare un'abilita'")
            say("di livello superiore o uguale a 1 direttamente")
            say("a maestro perfetto.[ENTER]")
            if table.getn(vnum_list) == 0 then
                say_reward ("Non hai abilita' da migliorare.[ENTER]")
                return
            end
            wait()
            say_title ("PDA Perfetta")
            say("Scegli l'abilita' da migliorare:[ENTER]")
            table.insert(name_list, "Annulla")
            local s = select_table(name_list)
            if s == table.getn(name_list) then
                return
            end    
            local skill_name = name_list[s]
            local skill_vnum = vnum_list[s]
            say_title ("PDA Perfetta")
            say("Hai scelto: "..skill_name)
            say("Sei sicuro di voler continuare?[ENTER]")
            local a = select("Si","No")
            if a == 2 then
                return
            end
            say_title ("PDA Perfetta")
            say (skill_name, " portata a maestro perfetto.[ENTER]")
            pc.set_skill_level (skill_vnum, 40)
            pc.remove_item(item.get_vnum(), 1)
        end    
      end
end

devi inserire questo pc.set_skill_level in quest_functions
 
ho fatto, ma mi da errore su GetSkillList (min_level)

1697989619176.png

Messaggio unito automaticamente:

GetSkillList (min_level) questa scritta la trovo solo nelle function dello script
Messaggio unito automaticamente:

ti ricopio il codice che ho tenuto intatto per la prova:

Codice:
quest pda_perf_quest begin
    state start begin

----------********** PDA perfetta (cambiare vnum eventualmente) **********----------
      
        when 50512.use begin
            say_title ("PDA Perfetta")     
            if pc.get_skill_group() == 0 then
                say("Non hai ancora preso la dottrina.[ENTER]")
                return
            end     
            local vnum_list, name_list = pda_perf_quest.GetSkillList(1)
            say("Con questo oggetto potrai portare un'abilita'")
            say("di livello superiore o uguale a 1 direttamente")
            say("a maestro perfetto.[ENTER]")
            if table.getn(vnum_list) == 0 then
                say_reward ("Non hai abilita' da migliorare.[ENTER]")
                return
            end
            wait()
            say_title ("PDA Perfetta")
            say("Scegli l'abilita' da migliorare:[ENTER]")
            table.insert(name_list, "Annulla")
            local s = select_table(name_list)
            if s == table.getn(name_list) then
                return
            end     
            local skill_name = name_list[s]
            local skill_vnum = vnum_list[s]
            say_title ("PDA Perfetta")
            say("Hai scelto: "..skill_name)
            say("Sei sicuro di voler continuare?[ENTER]")
            local a = select("Si","No")
            if a == 2 then
                return
            end
            say_title ("PDA Perfetta")
            say (skill_name, " portata a maestro perfetto.[ENTER]")
            pc.set_skill_level (skill_vnum, 40)
            pc.remove_item(item.get_vnum(), 1)
        end     
  
----------********** Funzione **********----------     
  
        function GetSkillList(min_level)
            local skill_list = special.active_skill_list[pc.get_job()+1][pc.get_skill_group()]
            local vnum_list = {}
            local name_list = {}
            for i = 1,table.getn(skill_list) do
                local skill_vnum = skill_list[i]
                local skill_level = pc.get_skill_level(skill_vnum)
                if skill_level >= min_level and skill_level < 40 then
                    table.insert(vnum_list, skill_list[i])
                    table.insert(name_list, locale.GM_SKILL_NAME_DICT[skill_vnum])
                end
            end
            return vnum_list, name_list
        end
    end
end
 
ho fatto, ma mi da errore su GetSkillList (min_level)

Visualizza allegato 72052
Messaggio unito automaticamente:

GetSkillList (min_level) questa scritta la trovo solo nelle function dello script

L'errore non è "getskilllist"

Come dice la frase "calls.. function : "
Una funzione non è dichiarata, ed è quella che vedi sotto, non sopra
Devi fare copia ed incolla di quella funzione, ed inserirla nel file "quest_functions" che si trova in italy/quest e poi ricompilare la quest
 
L'errore non è "getskilllist"

Come dice la frase "calls.. function : "
Una funzione non è dichiarata, ed è quella che vedi sotto, non sopra
Devi fare copia ed incolla di quella funzione, ed inserirla nel file "quest_functions" che si trova in italy/quest e poi ricompilare la quest
ho fatto, ma non me la da, da sempre errore

1697990095049.png


Codice:
quest pda_perf_quest begin
    state start begin

----------********** PDA perfetta (cambiare vnum eventualmente) **********----------
    
        when 50512.use begin
            say_title ("PDA Perfetta")   
            if pc.get_skill_group() == 0 then
                say("Non hai ancora preso la dottrina.[ENTER]")
                return
            end   
            local vnum_list, name_list = pda_perf_quest.GetSkillList(1)
            say("Con questo oggetto potrai portare un'abilita'")
            say("di livello superiore o uguale a 1 direttamente")
            say("a maestro perfetto.[ENTER]")
            if table.getn(vnum_list) == 0 then
                say_reward ("Non hai abilita' da migliorare.[ENTER]")
                return
            end
            wait()
            say_title ("PDA Perfetta")
            say("Scegli l'abilita' da migliorare:[ENTER]")
            table.insert(name_list, "Annulla")
            local s = select_table(name_list)
            if s == table.getn(name_list) then
                return
            end   
            local skill_name = name_list[s]
            local skill_vnum = vnum_list[s]
            say_title ("PDA Perfetta")
            say("Hai scelto: "..skill_name)
            say("Sei sicuro di voler continuare?[ENTER]")
            local a = select("Si","No")
            if a == 2 then
                return
            end
            say_title ("PDA Perfetta")
            say (skill_name, " portata a maestro perfetto.[ENTER]")
            pc.set_skill_level (skill_vnum, 40)
            pc.remove_item(item.get_vnum(), 1)
        end   
 
----------********** Funzione **********----------   
 
[HEADING=1]        function GetSkillList(min_level)  è questa che non riconosce[/HEADING]
            local skill_list = special.active_skill_list[pc.get_job()+1][pc.get_skill_group()]
            local vnum_list = {}
            local name_list = {}
            for i = 1,table.getn(skill_list) do
                local skill_vnum = skill_list[i]
                local skill_level = pc.get_skill_level(skill_vnum)
                if skill_level >= min_level and skill_level < 40 then
                    table.insert(vnum_list, skill_list[i])
                    table.insert(name_list, locale.GM_SKILL_NAME_DICT[skill_vnum])
                end
            end
            return vnum_list, name_list
        end
    end
end
 
ho fatto, ma non me la da, da sempre errore

Visualizza allegato 72053

Codice:
quest pda_perf_quest begin
    state start begin

----------********** PDA perfetta (cambiare vnum eventualmente) **********----------
    
        when 50512.use begin
            say_title ("PDA Perfetta")   
            if pc.get_skill_group() == 0 then
                say("Non hai ancora preso la dottrina.[ENTER]")
                return
            end   
            local vnum_list, name_list = pda_perf_quest.GetSkillList(1)
            say("Con questo oggetto potrai portare un'abilita'")
            say("di livello superiore o uguale a 1 direttamente")
            say("a maestro perfetto.[ENTER]")
            if table.getn(vnum_list) == 0 then
                say_reward ("Non hai abilita' da migliorare.[ENTER]")
                return
            end
            wait()
            say_title ("PDA Perfetta")
            say("Scegli l'abilita' da migliorare:[ENTER]")
            table.insert(name_list, "Annulla")
            local s = select_table(name_list)
            if s == table.getn(name_list) then
                return
            end   
            local skill_name = name_list[s]
            local skill_vnum = vnum_list[s]
            say_title ("PDA Perfetta")
            say("Hai scelto: "..skill_name)
            say("Sei sicuro di voler continuare?[ENTER]")
            local a = select("Si","No")
            if a == 2 then
                return
            end
            say_title ("PDA Perfetta")
            say (skill_name, " portata a maestro perfetto.[ENTER]")
            pc.set_skill_level (skill_vnum, 40)
            pc.remove_item(item.get_vnum(), 1)
        end   
 
----------********** Funzione **********----------   
 
        function GetSkillList(min_level)  è questa che non riconosce
            local skill_list = special.active_skill_list[pc.get_job()+1][pc.get_skill_group()]
            local vnum_list = {}
            local name_list = {}
            for i = 1,table.getn(skill_list) do
                local skill_vnum = skill_list[i]
                local skill_level = pc.get_skill_level(skill_vnum)
                if skill_level >= min_level and skill_level < 40 then
                    table.insert(vnum_list, skill_list[i])
                    table.insert(name_list, locale.GM_SKILL_NAME_DICT[skill_vnum])
                end
            end
            return vnum_list, name_list
        end
    end
end

Fa screen di quest functions e di come lo hai modificato
Quest functions è un file
 
Stato
Discussione chiusa ad ulteriori risposte.