Quest [RELEASE]Caccia al tesoro

Stato
Discussione chiusa ad ulteriori risposte.

Th3~J0k3r

Utente Emerald
18 Agosto 2011
1,435
59
148
423
Salve ragazzi, sono qua per postarvi una quest che ho realizzato un paio di settimane fa e ho deciso ora di renderla pubblica.

Funzionamento: Attivate l'evento, fate riloggare i player, quando i player riloggheranno, apparirà la quest "Caccia al Tesoro - Inizio". Quando apriranno la quest ci sarà l'indovinello che dovrete scrivere voi (purtroppo di fantasia non ne ho scusate :asd:) e qui teoricamente ci dovrebbe essere l'indizio per arrivare nel luogo dove dovranno killare il primo mob (boss(?)), killando questo mob verrà droppato il primo indizio. In questo indizio saranno presenti le indicazioni per arrivare al secondo boss(?), sempre tramite indovinello che dovrete scrivere voi e di nuovo stessa cosa di prima, verrà droppato un altro indizio ecc. Stessa cosa ancora per un un terzo e ultimo boss/mob da cui dropperete il terzo e ultimo indizio per arrivare all'npc "nascosto".
Portando tutti gli indizi a questo npc verrà data in cambio una mappa dove se ci cliccherete vi rivelerà le coordinate dove trovare il tesoro.
Il tesoro è sottoforma di rana dorata, quindi trascinando questa mappa sopra la rana verrà consegnato il tesoro solo al leader del gruppo (bisogna essere in gruppo). :sisi:

Tesoro: comprende yang e un item (sceglietevelo voi nella configurazione sopra dello script). Questo tesoro come quantità, verrà dato in base al gruppo, mi spiego meglio, se nel gruppo siete in 3, verranno dati 3kk di yang e 3 ammalia oggetto (esempio), quindi spetterà al capo gruppo essere onesto e dividere il tesoro in parti uguali.

Quest Pt. 1
Codice:
--** Modificare tutti i value che troverete con quelli che si vuole
--** mettere il numero 18 nella colonna type degli item che s'intende utilizzare
quest caccia_al_tesoro begin
 state start begin
  function GetScriptData(data)
   local settings = {['mob'] = {101, 102, 103},
      ['indizi'] = {30120, 30121, 30122, 27988}, 
      ['tesoro'] = {71051},
      ['yang'] = {1000000},      
      ['coord_mappa'] = {819, 315}}
   return rawget(settings, data)
  end       
  function TitleCacciaTesoro()
   say_title("Caccia al Tesoro")
   say("")
  end
  when letter with game.get_event_flag("EventoCacciaTesoro") == 1 begin
   send_letter("Caccia al Tesoro - Inizio")
  end 
--** SCRIVETE L'INDOVINELLO INIZIALE, SARA' QUELLO CHE I PLAYER LEGGERANNO QUANDO APRIRANNO LA QUEST
  when button or info begin
   caccia_al_tesoro.TitleCacciaTesoro()
   say("Scrivete l'indovinello e cambiate")
   say("i value dei mob e degli item.")
   say("dovete essere in gruppo!")
  end
--** MOB CHE DROPPA IL PRIMO INDIZIO E SUCCESSIVO UTILIZZO DEL PRIMO INDIZIO ITEM
--** DEVE COMPRENDERE UNA SECONDA PARTE DI INDOVINELLO PER ARRIVARE AL SECONDO INDIZIO
  when 101.kill begin
   if game.get_event_flag("EventoCacciaTesoro") == 1 and party.is_party() then
    game.drop_item_with_ownership(caccia_al_tesoro.GetScriptData('indizi')[1])
    notice_all("Il primo indizio e' stato trovato!")
   end
  end
  when 30120.use begin
   if game.get_event_flag("EventoCacciaTesoro") == 1 and party.is_party() then
    caccia_al_tesoro.TitleCacciaTesoro()
    say("Seconda parte dell'indovinello con relativo")
    say("indizio per trovare il terzo[ENTER]")   
   end
  end
--** MOB CHE DROPPA IL SECONDO INDIZIO E SUCCESSIVO UTILIZZO DEL SECONDO INDIZIO ITEM
--** DEVE COMPRENDERE UNA TERZA PARTE DI INDOVINELLO PER ARRIVARE AL TERZO INDIZIO
  when 102.kill with game.get_event_flag("EventoCacciaTesoro") == 1 and party.is_party() begin
   game.drop_item_with_ownership(caccia_al_tesoro.GetScriptData('indizi')[2])
   notice_all("Il secondo indizio e' stato trovato!")
  end
  when 30121.use with game.get_event_flag("EventoCacciaTesoro") == 1 and party.is_party() begin
   caccia_al_tesoro.TitleCacciaTesoro()
   say("Terza parte dell'indovinello con relativo")
   say("indizio per trovare il quarto[ENTER]")
  end
--** MOB CHE DROPPA IL TERZO INDIZIO E SUCCESSIVO UTILIZZO DEL TERZO INDIZIO ITEM
--** DEVE COMPRENDERE UNA QUARTA PARTE DI INDOVINELLO PER ARRIVARE AL QUARTO E ULTIMO INDIZIO
  when 103.kill with game.get_event_flag("EventoCacciaTesoro") == 1 and party.is_party() begin
   game.drop_item_with_ownership(caccia_al_tesoro.GetScriptData('indizi')[3])
   notice_all("Il terzo indizio e' stato trovato!")
  end
  when 30122.use with game.get_event_flag("EventoCacciaTesoro") == 1 and party.is_party() begin
   caccia_al_tesoro.TitleCacciaTesoro()
   say("Quarta parte dell'indovinello con relativo")
   say("indizio per trovare l'NPC [ENTER]")   
  end
  when 20095.chat."Caccia al Tesoro" with game.get_event_flag("EventoCacciaTesoro") == 1 and party.is_party() begin
   caccia_al_tesoro.TitleCacciaTesoro()
   say("Sei pronto per scoprire dove si trova il tesoro ?")
   say("Devi possedere tutti gli indizi, li hai ?[ENTER]")
   local siono = select ("Si", "No")
   if siono == 1 then
    if pc.count_item(caccia_al_tesoro.GetScriptData('indizi')[1]) < 1 and 
     pc.count_item(caccia_al_tesoro.GetScriptData('indizi')[2]) < 1 and 
     pc.count_item(caccia_al_tesoro.GetScriptData('indizi')[3]) < 1 then
     caccia_al_tesoro.TitleCacciaTesoro()
     say_red("Mi dispiace ma non possiedi tutti gli indizi!")
     say_red("Torna quando li avrai.[ENTER]")
    elseif not party.is_party() then
     caccia_al_tesoro.TitleCacciaTesoro()
     say_red("Devi essere in gruppo per ottenere la mappa.")
     say_red("Ritorna con un gruppo[ENTER]")     
    elseif not party.is_leader() then
     say_red("Solo il capo gruppo puo' richiedere la mappa[ENTER]")
    else
     caccia_al_tesoro.TitleCacciaTesoro()
     say("Bene, dato che possiedi tutti gli indizi ti daro'")
     say("la mappa per arrivare al tesoro![ENTER]")
     pc.remove_item(caccia_al_tesoro.GetScriptData('indizi')[1], pc.count_item(caccia_al_tesoro.GetScriptData('indizi')[1]))
     pc.remove_item(caccia_al_tesoro.GetScriptData('indizi')[2], pc.count_item(caccia_al_tesoro.GetScriptData('indizi')[2]))
     pc.remove_item(caccia_al_tesoro.GetScriptData('indizi')[3], pc.count_item(caccia_al_tesoro.GetScriptData('indizi')[3]))
     pc.give_item2(caccia_al_tesoro.GetScriptData('indizi')[4], 1)    
    end
   end
  end
  when 27988.use with game.get_event_flag("EventoCacciaTesoro") == 1 and party.is_party() begin
   if not party.is_leader() then
    caccia_al_tesoro.TitleCacciaTesoro()
    say("Mi dispiace ma solo il capogruppo")
    say("puo' leggere la mappa!")
    return   
   end
   caccia_al_tesoro.TitleCacciaTesoro()
   say("Questa mappa ti rivelera' la posizione")
   say("del tesoro, sei sicuro di volerla sapere ?[ENTER]")
   local siono = select ("Si", "No")
   if siono == 1 then
    caccia_al_tesoro.TitleCacciaTesoro()
    --** Settare nelle impostazioni le coordinate della minimappa
    say("Coordinate tesoro: 819, 315[ENTER]")       
   end      
  end
  when 11505.take with item.get_vnum() == caccia_al_tesoro.GetScriptData('indizi')[4] and party.is_leader() begin
   nome_leader = pc.get_name()
   notice_all("Il gruppo di "..nome_leader.." ha scovato il tesoro!")
   notice_all("L'evento Caccia al Tesoro e' terminato.")
   game.set_event_flag("EventoCacciaTesoro", 0)
   pc.change_money(caccia_al_tesoro.GetScriptData('yang')[1] * party.get_near_count())
   pc.give_item2(caccia_al_tesoro.GetScriptData('tesoro')[1], party.get_near_count())
   party.chat("Il capo gruppo possiede il tesoro!")
   party.chat("Dividetevelo in parti uguali tra tutti i membri del gruppo.")
   npc.purge()
   item.remove() 
  end
 end
end

Quest Pt. 2
Codice:
quest caccia_al_tesoro_evento begin
 state start begin
  when letter with pc.is_gm() begin
   send_letter("Evento Caccia al Tesoro")
  end 
  when button or info begin
   say_title("Caccia al Tesoro")
   say("")
   say("Stato evento:")
   if game.get_event_flag("EventoCacciaTesoro") == 0 then
    say_red("Disattivo")
   elseif game.get_event_flag("EventoCacciaTesoro") == 1 then
    say_green("Attivo")
   end
   local scelta = select ("Attiva", "Disattiva", "Chiudi")
   if scelta == 1 then
    say_title("Caccia al Tesoro")
    say("")
    say_green("Evento attivato!")
    notice_all("L'evento Caccia al Tesoro e' stato attivato.") 
    notice_all("Riloggate per visualizzare la quest iniziale!")
    game.set_event_flag("EventoCacciaTesoro", 1)
   elseif scelta == 2 then
    say_title("Caccia al Tesoro")
    say("")
    say_red("Evento disattivato!")
    notice_all("L'evento Caccia al Tesoro e' terminato.") 
    game.set_event_flag("EventoCacciaTesoro", 0)
   end
  end 
 end
end

P.S. Dovrete mettere il numero 18 nella colonna type dell'item proto per far funzionare gli item-indizio
P.S.2 Nel caso ci dovesse essere qualche bug scrivetemelo pure. :rulz:
 
  • Mi piace
Reazioni: Prometheus™
Salve , stavo implementando questa quest , mi dà quest'errore..

Calls undeclared function! :
rawget
Abort (core dumped)


che vorrebbe dire?
 
Grazie, e mi scuso per la data... cosa dovrei scrivere su quest_functions?
Il Quest_function è un file di testo all’interno della folder “quest”, serve ad inserire delle funzioni richiamate in game o in quest lib. Puoi inserire li il nome della funzione. Ma non è detto funzionerà, dovresti prima vedere se quella funzione è presente su quest lib o in game.

A presto :)
 
  • Mi piace
Reazioni: isPsycho
Spesso ci si incentra solo sull'implementazione di system e tante altre cose, tralasciando le quest che invece hanno il loro perchè e vederne alcune carine, che possano prendere il player e non annoiarlo, fa sempre piacere.
+1
 
Stato
Discussione chiusa ad ulteriori risposte.