U
Utente cancellato 236678
non serve l`else e` come se fosse sottointeso, se entra in quella condizione ritorna get_small_bonus altrimenti get_big_bonus (questo si applica coi return ovviamente)
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
Non ti sei dimenticato un'else?
function get_small_bonus(killer_level , victim_level)
local difference = killer_level - victim_level -- numero sempre non negativo (0+)
if difference < 10 then -- se difference è minore di 10
return 50 -- ritorno 50 e mi fermo
elseif difference < 20 then -- se arrivo fin qui allora difference non è sicuramente minore di 10
return 40 -- quindi se è compreso tra 10 e 19 , ritorno 40
elseif difference < 30 then -- idem come sopra ma tra 20 e 29
return 30
elseif difference < 40 then -- idem come sopra ma tra 30 e 39
return 20
else -- se la differenza è superiore a 39 ( quindi non è minore di 40) allora ritorno 10
return 10
end
function get_big_bonus(killer_level , victim_level)
local difference = victim_level - killer_level -- numero sempre non negativo ( 0+)
if difference < 10 then -- se difference è minore di 10 ritorno 50 e mi fermo
return 50
elseif difference < 20 then -- se arrivo fin qui difference non è minore di 10
return 60 -- se quindi è compreso tra 10 e 19 ritorno 60 e mi fermo
elseif difference < 30 then -- se arrivo fin qui difference non è minore di 10 e nemmeno di 20
return 70 -- se quindi è compreso tra 20 e 29 ritorno 70
elseif difference < 40 then --idem come sopra
return 80
else -- se la differenza è maggiore di 39 (ovvero non è minore di 40)
return 100 -- allora ritorno 100
end
function get_bonus_score(killer_level , victim_level)
if killer_level > victim_level then
return get_small_bonus(killer_level , victim_level) --- se il livello del killer è superiore al livello della vittima
--- eseguo get_small_bonus , dopo di chè ne restituisco il valore
--- che quest'ultima mi ha restituito
return get_big_bonus(killer_level , victim_level) -- altrimenti eseguo get_big_bonus
-- restituendo lo stesso valore che essa ha restituito
end
quest kill_sbuggato begin
state start begin
when login or levelup with pc.get_level() > 1 begin
set_state("pannello")
end
end
state punti_kill begin
when letter begin
send_letter("Contatore Punti")
end
local livelli[liv] = {
[100] = 10,
[125] = 20,
[150] = 30,
[175] = 40,
[200] = 50,
[250] = 60
}
when kill with npc.is_pc() begin
for i = 1, table.getn(livelli) do
if pc.get_level() >= livelli then
pc.setqf("punti", pc.getqf("punti")+livelli[liv])
else
pc.setqf("punti", pc.getqf("punti")+livelli[liv]/2)
end
end
when button or info begin
say_title("Contatore Punti")
say(pc.get_name().." Hai totalizzato: "..pc.getqf("punti").." punti")
end
end
end
function get_small_bonus(killer_level , victim_level)
local difference = killer_level - victim_level
if difference < 10 then
return 50
elseif difference < 20 then
return 40
elseif difference < 30 then
return 30
elseif difference < 40 then
return 20
else
return 10
end
function get_big_bonus(killer_level , victim_level)
local difference = victim_level - killer_level
if difference < 10 then
return 50
elseif difference < 20 then
return 60
elseif difference < 30 then
return 70
elseif difference < 40 then
return 80
else
return 100
end
function get_bonus_score(killer_level , victim_level)
if killer_level > victim_level then
return get_small_bonus(killer_level , victim_level)
return get_big_bonus(killer_level , victim_level)
end
get_bonus_score
get_small_bonus
get_big_bonus
local bonus = get_bonus_score(pc.get_level() , npc.get_level())
Innanzitutto ti ringrazio tantissimo per la risposta, sei sempre il primo che mi risponde hahaha, detto ciò, la funzione che mi hai scritto penso di averla capita e anche dove mettere le varie cose. Provo a rispiegare quello che vorrei fare. Io vorrei fare che se un livello 100 uccide un player livello 100 o superiore gli vengono conferiti 20 punti. Mentre se il player di livello 100 fà il bulletto con player inferiori al livello 100 gli vengano assegnati solo 5 punti. Lo stesso discorso vale per un livello 150 ovvero se è di livello 150 e uccide un player con livello > al 150 +20 punti altrimenti +5 punti. Spero di essermi spiegato, nel mentre mi studio quello che hai scritto tu che mi interessa. Ma allo stesso tempo non ci capisco na mazza.La tua richiesta non è troppo chiara , ma penso che ti posso accontentare facendo di testa mia.
Ho pensato che volessi qualcosa che tenesse conto della differenza tra i livelli dei player , e che in base a ciò calcolasse il punteggio da assegnare , penalizzando chi killa player con un livello inferiore al proprio e premiando chi invece riesce a killare player di livello superiore.
Ti ho costruito delle function da mettere in questlib , i cui nomi dovrai metterli in questfunctions.
In questlib dovrai mettere il corpo della funzione , mentre in quest function solo il nome (è un pò come la dichiarazione e la definizione in c++).
questo va messo in questlib , dove ti pare basta solo che non lo metti nel bel mezzo di altre funzioni (meglio ancora se lo metti alla fine del file )
Codice:function get_small_bonus(killer_level , victim_level) local difference = killer_level - victim_level if difference < 10 then return 50 elseif difference < 20 then return 40 elseif difference < 30 then return 30 elseif difference < 40 then return 20 else return 10 end function get_big_bonus(killer_level , victim_level) local difference = victim_level - killer_level if difference < 10 then return 50 elseif difference < 20 then return 60 elseif difference < 30 then return 70 elseif difference < 40 then return 80 else return 100 end function get_bonus_score(killer_level , victim_level) if killer_level > victim_level then return get_small_bonus(killer_level , victim_level) return get_big_bonus(killer_level , victim_level) end
La funzione che dovrai poi richiamare nella tua quest per ricevere il valore del bonus è ovviamente get_bonus_score( liv , liv )
Non è il miglior codice che io abbia mai visto ma per quel che serve a te direi che è funzionale.
Grazie al mio solito standard che utilizzo nella scelta dei nomi di variabili/funzioni dovresti capire benissimo ciò che fa ma se avessi dei dubbi , dimmi pure.
nel caso non ti fosse chiaro , in questfunctions devi aggiungere :
Codice:get_bonus_score get_small_bonus get_big_bonus
spero vivamente che non ti dia errore di compilazione (non le ho testate) , per quanto possano essere semplicissime , sono giorni che programmo in c++ e python e quindi potrei benissimamente aver fatto errori di sintassi ahah.
esempio di utilizzo della nuova funzione :
Codice:local bonus = get_bonus_score(pc.get_level() , npc.get_level())
Saluti
function get_bonus_score(killer_level , victim_level)
if killer_level > victim_level then
return get_small_bonus(killer_level , victim_level)
return get_big_bonus(killer_level , victim_level)
end
No in quanto il return chiude l'esecuzione della funzione (restituendo il valore)
Quindi se non avviene il primo if , avviene il secondo return (spero di essermi spiegato).
L'else è necessario solo se dopo le if /else condition ci vuoi mettere altro codice.
Comunque se vuoi fare in modo soltanto di differire tra chi killa un player di livello superiore al proprio, e chi invece killa player di livello inferiore , al posto di return get_small_bonus ci va return 5 , e return 20 al posto di get_big_bonus
Ovviamente le function get_small_bonus e get_bug_bonus puoi deletarle
function get_small_bonus(killer_level , victim_level) -- killer_level ipotizzo 100 e victim_level ipotizzo 90
local difference = killer_level - victim_level --- difference quindi diventerà 10 e se difference è minore di 10 mi da 50 punti?
if difference < 10 then
return 50
elseif difference < 20 then ----- qui difference è sempre 10 ma rimane minore di 20 quindi mi da 40 punti?
return 40
elseif difference < 30 then
return 30
elseif difference < 40 then
return 20
else
return 10
end
function get_big_bonus(killer_level , victim_level)
local difference = victim_level - killer_level ----- victim_level 90 e killer_level 100
if difference < 10 then ------difference sarà -10 ed è minore di 10 quindi mi darà 50 punti.
return 50
elseif difference < 20 then ----- qua sempre minore di 20 e mi darà 60 punti
return 60
elseif difference < 30 then
return 70
elseif difference < 40 then
return 80
else -----qua se il livello di differenza è esagerato mi darà 100 punti?
return 100
end
function get_bonus_score(killer_level , victim_level)
if killer_level > victim_level then ---se il killer_level(es. 150) è maggiore del victim_level (es.100) torna alla funzione di prima
return get_small_bonus(killer_level , victim_level)
return get_big_bonus(killer_level , victim_level) ---se non funge quella sopra ritorna alla funzione di prima
end