void do_quest(CHAR_DATA *ch, char *argument) { CHAR_DATA *questman; OBJ_DATA *obj=NULL, *obj_next, *objtest; OBJ_INDEX_DATA *questinfoobj; MOB_INDEX_DATA *questinfo; char buf [MAX_STRING_LENGTH]; char bufvampire[500]; char bufspadaccino[500]; char arg1 [MAX_INPUT_LENGTH]; char arg2 [MAX_INPUT_LENGTH]; int sn,trouble_vnum=0,trouble_n,numobj; time_t tempo; struct tm *tottempo; argument = one_argument(argument, arg1); argument = one_argument(argument, arg2); if (IS_NPC(ch) ) return; if (!strcmp(arg1, "info")) { if (IS_SET(ch->act, PLR_QUESTOR)) { if (ch->pcdata->questmob == -1 ) { sprintf(buf, "La tua missione e'stata QUASI completata!\n\rTorna dal Questor prima che il tempo a tua disposizione finisca!\n\r"); send_to_char(buf, ch); } else if (ch->pcdata->questobj > 0) { questinfoobj = get_obj_index(ch->pcdata->questobj); if (questinfoobj != NULL) { sprintf(buf, "La tua missione e' recuperare il %s!\n\r",questinfoobj->name); send_to_char(buf, ch); } else send_to_char("Non ti e' stata assegnata nessuna missione.\n\r",ch); return; } else if (ch->pcdata->questmob > 0) { questinfo = get_mob_index(ch->pcdata->questmob); if (questinfo != NULL) { sprintf(buf, "Devi uccidere il terribile %s!\n\r",questinfo->short_descr); send_to_char(buf, ch); } else send_to_char("Non ti e' stata assegnata nessuna missione.\n\r",ch); return; } } else send_to_char("Non ti e' stata assegnata nessuna missione.\n\r",ch); return; } if (!strcmp(arg1, "points")) { sprintf(buf, "Hai %d Falchi Divini.\n\r",ch->pcdata->questpoints); send_to_char(buf, ch); return; } else if (!strcmp(arg1, "time")) { if (!IS_SET(ch->act, PLR_QUESTOR)) { send_to_char("Non ti e' stata assegnata nessuna missione.\n\r",ch); if (ch->pcdata->nextquest > 1) { sprintf(buf, "Ti rimangono %d minuti prima che tu possa richiedere un'altra missione.\n\r",ch->pcdata->nextquest); send_to_char(buf, ch); } else if (ch->pcdata->nextquest == 1) { sprintf(buf, "Manca meno di un minuto prima che tu possa richiedere un'altra missione.\n\r"); send_to_char(buf, ch); } } else if (ch->pcdata->countdown > 0) { sprintf(buf, "Mancano %d minuti allo scadere della missione!\n\r",ch->pcdata->countdown); send_to_char(buf, ch); } return; } /* Checks for a character in the room with spec_questmaster set. This special procedure must be defined in special.c. You could instead use an ACT_QUESTMASTER flag instead of a special procedure. Natauro: aggiunto il check che impedisce al questmaster di dare quest se sta dormendo. */ for ( questman = ch->in_room->people; questman != NULL; questman = questman->next_in_room ) { if (!IS_NPC(questman)) continue; if (questman->spec_fun == spec_lookup( "spec_questmaster" )) break; } if (questman == NULL || questman->spec_fun != spec_lookup( "spec_questmaster" )) { send_to_char("Non ci sono Questor qui.\n\r",ch); return; } // Natauro if (questman->position == POS_SLEEPING) { send_to_char("Il Questor non e' sveglio.\n\r",ch); return; } if ( questman->fighting != NULL) { send_to_char("Aspetta che il combattimento finisca.\n\r",ch); return; } ch->pcdata->questgiver = questman->pIndexData->vnum; /* And, of course, you will need to change the following lines for YOUR quest item information. Quest items on Moongate are unbalanced, very very nice items, and no one has one yet, because it takes awhile to build up quest points :> Make the item worth their while. */ if (!strcmp(arg1, "list")) { act( "$n chiede a $N la lista dei premi che si possono avere da lui con i Falchi Divini.", ch, NULL, questman, TO_ROOM); act ("Chiedi a $N la lista dei premi che si possono avere da lui con i Falchi Divini.",ch, NULL, questman, TO_CHAR); /* 1000qp.........The COMFY CHAIR!!!!!!\n\r\ 850qp..........Sword of Vassago\n\r\ 750qp..........Amulet of Vassago\n\r\ 750qp..........Shield of Vassago\n\r\ 550qp..........Decanter of Endless Water\n\r\ */ sprintf(buf, "\n\rLista dei Premi ottenibili con Falchi Divini:\n\r\n\r"); send_to_char(buf, ch); bufvampire[0] = '\0'; if ( ch->class == CLASS_VAMPIRE ) sprintf(bufvampire, " 50fd ............ l'abilita' Vampire\n\r"); bufspadaccino[0] = '\0'; if ( ch->class == 9 ) sprintf(bufspadaccino,"%s%s", " 500fd ............ Cala di 1 il numero di morti\n\r", " 100fd ............ Benedizione della Katana \n\r"); sprintf(buf, "%s%s%s%s%s%s%s%s", " 1000fd ............ La Cinta personale\n\r", " 1000fd ............ La Fede personale\n\r", " 1000fd ............ L'Arma esotica personale\n\r", " 1000fd ............ La Mazza personale\n\r", " 1000fd ............ L'Ascia personale\n\r", " 500fd ............ 60 Sessioni di pratica\n\r", " 200fd ............ Il tatuaggio della tua religione\n\r\n\r", "Per acquisire un premio scrivi: QUEST BUY \n\r"); send_to_char(bufvampire, ch); send_to_char(bufspadaccino, ch); send_to_char(buf, ch); return; } else if (!strcmp(arg1, "buy")) { if (arg2[0] == '\0') { send_to_char("Per acquisire un premio scrivi: QUEST BUY \n\r",ch); return; } else if (is_name(arg2, "cinta")) { if (ch->pcdata->questpoints >= 1000) { if (ch -> level <= 20) { if ( ch -> sex == 2) sprintf(buf, "Mi dispiace, %s, sei ancora troppo inesperta.",ch->name); else sprintf(buf, "Mi dispiace, %s, sei ancora troppo inesperto.",ch->name); do_tell_quest(ch,questman,buf); } else if (check_obj(ch,QUEST_ITEM1)) { sprintf(buf, "Mi dispiace, hai gia' quell' oggetto."); do_tell_quest(ch,questman,buf); } else { ch->pcdata->questpoints -= 1000; obj = create_object(get_obj_index(QUEST_ITEM1),ch->level); /* if (IS_SET(ch->quest,QUEST_GIRTH) || IS_SET(ch->quest,QUEST_GIRTH2) || IS_SET(ch->quest,QUEST_GIRTH3) ) do_tell_quest(ch,questman, "Questo oggetto ti e' stato gia' ridato tre volte!"); else SET_BIT(ch->quest,QUEST_GIRTH); */ REMOVE_BIT(ch->quest,QUEST_GIRTH); REMOVE_BIT(ch->quest,QUEST_GIRTH2); REMOVE_BIT(ch->quest,QUEST_GIRTH3); SET_BIT(ch->quest,QUEST_GIRTH); } } else { sprintf(buf, "Mi dispiace, %s, ma non hai abbastanza Falchi Divini.",ch->name); do_tell_quest(ch,questman,buf); return; } } else if (is_name(arg2, "fede")) { if (ch->pcdata->questpoints >= 1000) { if (ch -> level <= 20) { if ( ch -> sex == 2) sprintf(buf, "Mi dispiace, %s, sei ancora troppo inesperta.",ch->name); else sprintf(buf, "Mi dispiace, %s, sei ancora troppo inesperto.",ch->name); do_tell_quest(ch,questman,buf); } else if (check_obj(ch,QUEST_ITEM2)) { sprintf(buf, "Mi dispiace, hai gia' quell' oggetto."); do_tell_quest(ch,questman,buf); } else { ch->pcdata->questpoints -= 1000; obj = create_object(get_obj_index(QUEST_ITEM2),ch->level); /* if (IS_SET(ch->quest,QUEST_RING) || IS_SET(ch->quest,QUEST_RING2) || IS_SET(ch->quest,QUEST_RING3) ) do_tell_quest(ch,questman, "Questo oggetto ti e' stato gia' ridato tre volte!"); else SET_BIT(ch->quest,QUEST_RING); */ REMOVE_BIT(ch->quest,QUEST_RING); REMOVE_BIT(ch->quest,QUEST_RING2); REMOVE_BIT(ch->quest,QUEST_RING3); SET_BIT(ch->quest,QUEST_RING); } } else { sprintf(buf, "Mi dispiace, %s, ma non hai abbastanza Falchi Divini.",ch->name); do_tell_quest(ch,questman,buf); return; } } else if (is_name(arg2, "arma")) { if (ch->pcdata->questpoints >= 1000) { if (ch -> level <= 20) { if ( ch -> sex == 2) sprintf(buf, "Mi dispiace, %s, sei troppo piccola.",ch->name); else sprintf(buf, "Mi dispiace, %s, sei troppo piccolo.",ch->name); do_tell_quest(ch,questman,buf); } else if (check_obj(ch,QUEST_MAZZA)) { sprintf(buf, "Mi dispiace, hai gia' una mazza."); do_tell_quest(ch,questman,buf); } else if (check_obj(ch,QUEST_ASCIA)) { sprintf(buf, "Mi dispiace, hai gia' un'ascia."); do_tell_quest(ch,questman,buf); } else if (check_obj(ch,QUEST_ITEM3)) { sprintf(buf, "Mi dispiace, hai gia' la tua arma."); do_tell_quest(ch,questman,buf); } else { ch->pcdata->questpoints -= 1000; obj = create_object(get_obj_index(QUEST_ITEM3),ch->level); /* if (IS_SET(ch->quest,QUEST_WEAPON) || IS_SET(ch->quest,QUEST_WEAPON2) || IS_SET(ch->quest,QUEST_WEAPON3) ) do_tell_quest(ch,questman, "Questo oggetto ti e' stato gia' ridato tre volte!"); else SET_BIT(ch->quest,QUEST_WEAPON); */ REMOVE_BIT(ch->quest,QUEST_WEAPON); REMOVE_BIT(ch->quest,QUEST_WEAPON2); REMOVE_BIT(ch->quest,QUEST_WEAPON3); SET_BIT(ch->quest,QUEST_WEAPON); } } else { sprintf(buf, "Mi dispiace, %s, ma non hai abbastanza Falchi Divini.",ch->name); do_tell_quest(ch,questman,buf); return; } } /* aggiungo ascia e mazza - Marhis 14/6/2005 */ else if (is_name(arg2, "mazza")) { if (ch->pcdata->questpoints >= 1000) { if (ch -> level <= 20) { if ( ch -> sex == 2) sprintf(buf, "Mi dispiace, %s, sei troppo piccola.",ch->name); else sprintf(buf, "Mi dispiace, %s, sei troppo piccolo.",ch->name); do_tell_quest(ch,questman,buf); } else if (check_obj(ch,QUEST_MAZZA)) { sprintf(buf, "Mi dispiace, hai gia' la tua mazza."); do_tell_quest(ch,questman,buf); } else if (check_obj(ch,QUEST_ASCIA)) { sprintf(buf, "Mi dispiace, hai gia' un'ascia."); do_tell_quest(ch,questman,buf); } else if (check_obj(ch,QUEST_ITEM3)) { sprintf(buf, "Mi dispiace, hai gia' un'arma."); do_tell_quest(ch,questman,buf); } else { ch->pcdata->questpoints -= 1000; obj = create_object(get_obj_index(QUEST_MAZZA),ch->level); REMOVE_BIT(ch->quest,QUEST_WEAPON); REMOVE_BIT(ch->quest,QUEST_WEAPON2); REMOVE_BIT(ch->quest,QUEST_WEAPON3); SET_BIT(ch->quest,QUEST_WEAPON); } } else { sprintf(buf, "Mi dispiace, %s, ma non hai abbastanza Falchi Divini.", ch->name); do_tell_quest(ch, questman, buf); return; } } else if (is_name(arg2, "ascia")) { if (ch->pcdata->questpoints >= 1000) { if (ch -> level <= 20) { if ( ch -> sex == 2) sprintf(buf, "Mi dispiace, %s, sei troppo piccola.",ch->name); else sprintf(buf, "Mi dispiace, %s, sei troppo piccolo.",ch->name); do_tell_quest(ch,questman,buf); } else if (check_obj(ch,QUEST_MAZZA)) { sprintf(buf, "Mi dispiace, hai gia' una mazza."); do_tell_quest(ch,questman,buf); } else if (check_obj(ch,QUEST_ASCIA)) { sprintf(buf, "Mi dispiace, hai gia' la tua ascia."); do_tell_quest(ch,questman,buf); } else if (check_obj(ch,QUEST_ITEM3)) { sprintf(buf, "Mi dispiace, hai gia' un'arma."); do_tell_quest(ch,questman,buf); } else { ch->pcdata->questpoints -= 1000; obj = create_object(get_obj_index(QUEST_ASCIA),ch->level); REMOVE_BIT(ch->quest,QUEST_WEAPON); REMOVE_BIT(ch->quest,QUEST_WEAPON2); REMOVE_BIT(ch->quest,QUEST_WEAPON3); SET_BIT(ch->quest,QUEST_WEAPON); } } else { sprintf(buf, "Mi dispiace, %s, ma non hai abbastanza Falchi Divini.", ch->name); do_tell_quest(ch, questman, buf); return; } } else if (is_name(arg2, "pratiche prac prac practice session sessioni")) { if (ch->pcdata->questpoints >= 500) { ch->pcdata->questpoints -= 500; ch->practice += 60; act( "$N da' 60 sessioni di pratica a $n.", ch, NULL, questman, TO_ROOM ); act( "$N ti da' 60 sessioni di pratica.", ch, NULL, questman, TO_CHAR ); return; } else { sprintf(buf, "Mi dispiace, %s, ma non hai abbastanza Falchi Divini.",ch->name); do_tell_quest(ch,questman,buf); return; } } else if (is_name(arg2, "vampire")) { if (ch->class != CLASS_VAMPIRE) { sprintf(buf, "Solo chi e' nato vampiro puo' acquisire questa abilita', %s.",ch->name); do_tell_quest(ch,questman,buf); return; } if (ch->pcdata->questpoints >= 50) { ch->pcdata->questpoints -= 50; sn = skill_lookup("vampire"); ch->pcdata->learned[sn] = 100; act( "$N pone una mano sul capo di $n e per qualche istante la luce pare oscurarsi.", ch, NULL, questman, TO_ROOM ); act( "$N pone una mano sul tuo capo e per qualche istante la luce pare oscurarsi", ch, NULL, questman, TO_CHAR ); act_new( "{bUna fitta tenebra avvolge $n e poi si disperde.{x", ch, NULL, questman, TO_ALL,POS_SLEEPING ); return; } else { sprintf(buf, "Mi dispiace, %s, ma non hai abbastanza Falchi Divini.",ch->name); do_tell_quest(ch,questman,buf); return; } } else if (is_name(arg2, "morte morti")) { if (ch->class != 9) { sprintf(buf, "Mi dispiace, %s, ma non sei uno Spadaccino.",ch->name); do_tell_quest(ch,questman,buf); return; } if (ch->pcdata->death < 1) { sprintf(buf, "Mi spiace, %s, ma non hai ancora visto la morte!",ch->name); do_tell_quest(ch,questman,buf); return; } if (ch->pcdata->questpoints >= 500) {//Ary ch->pcdata->questpoints -= 500; ch->pcdata->death -= 1; sprintf(buf, "Ecco, %s, in questo modo hai stretto un audace patto con Tricksty!",ch->name); do_tell_quest(ch,questman,buf); } else { sprintf(buf, "Mi dispiace, %s, ma non hai abbastanza Falchi Divini.",ch->name); do_tell_quest(ch,questman,buf); return; } } else if (is_name(arg2, "katana")) { AFFECT_DATA af; OBJ_DATA *katana; if (ch->class != 9) { sprintf(buf, "Mi spiace, %s, ma non sei uno Spadaccino.",ch->name); do_tell_quest(ch,questman,buf); return; } if ( (katana = get_obj_list(ch,"katana",ch->carrying)) == NULL) { sprintf(buf, "Mi dispiace, %s, ma non hai la tua katana con te.",ch->name); do_tell_quest(ch,questman,buf); return; } if (ch->pcdata->questpoints >= 100) { ch->pcdata->questpoints -= 100; af.where = TO_WEAPON; af.type = gsn_katana; af.level = 100; af.duration = -1; af.modifier = 0; af.bitvector = WEAPON_KATANA; af.location = APPLY_NONE; affect_to_obj(katana,&af); sprintf(buf, "D'ora in poi, quando la userai, la sua potenza aumentera' sempre di piu'."); do_tell_quest(ch,questman,buf); } else { sprintf(buf, "Mi dispiace, %s, ma non hai abbastanza Falchi Divini.",ch->name); do_tell_quest(ch,questman,buf); return; } } else if (is_name(arg2, "tatuaggio religione")) { OBJ_DATA *tattoo; if (!(ch->religion) ) { if ( ch-> sex == 2) send_to_char("Se sei atea non puoi farti tatuare nulla da me.\n\r", ch); else send_to_char("Se sei ateo non puoi farti tatuare nulla da me.\n\r", ch); return; } tattoo = get_eq_char(ch, WEAR_TATTOO); if (tattoo != NULL) { send_to_char("Hai gia' il tuo tatuaggio!.\n\r",ch); return; } if (ch->pcdata->questpoints >= 200) { ch->pcdata->questpoints -= 200; tattoo = create_object(get_obj_index(religion_table[ch->religion].vnum),100); obj_to_char(tattoo,ch); equip_char(ch, tattoo, WEAR_TATTOO); act( "$N sta tatuando la pelle di $n!", ch, tattoo, questman, TO_ROOM ); act( "$N ti sta tatuando il simbolo della tua devozione!", ch, tattoo, questman, TO_CHAR ); return; } else { sprintf(buf, "Mi dispiace, %s, ma non hai abbastanza Falchi Divini.",ch->name); do_tell_quest(ch,questman,buf); return; } } else { sprintf(buf, "Non ho alcun premio da darti di questo tipo, %s.",ch->name); do_tell_quest(ch,questman,buf); } if (obj != NULL) { if ( obj->pIndexData->vnum == QUEST_ITEM1 || obj->pIndexData->vnum == QUEST_ITEM2 || obj->pIndexData->vnum == QUEST_ITEM3 || obj->pIndexData->vnum == QUEST_MAZZA || obj->pIndexData->vnum == QUEST_ASCIA) { sprintf( buf, obj->short_descr, IS_GOOD(ch) ? "sacra" : IS_NEUTRAL(ch) ? "verde-foglia" : "demoniaca", ch->name); free_string( obj->short_descr ); obj->short_descr = str_dup( buf ); } act( "$N da' $p a $n.", ch, obj, questman, TO_ROOM ); act( "$N ti da' $p.", ch, obj, questman, TO_CHAR ); obj_to_char(obj, ch); } return; } else if (!strcmp(arg1, "request")) { act( "$n chiede a $N una missione.", ch, NULL, questman, TO_ROOM); act ("Chiedi a $N una missione.",ch, NULL, questman, TO_CHAR); if (ch->pcdata->firstquest==0) { ch->pcdata->firstquest=current_time; log_string("firstquest valeva 0 ora vale current_time"); } if ((int)(current_time - ch->pcdata->firstquest) >= 86400) ch->pcdata->questday=15; if (ch->pcdata->questday==0) { sprintf(buf, "Hai completato abbastanza missioni in questo periodo. Torna piu' tardi."); do_tell_quest(ch,questman,buf); sprintf(buf,"%s ha finito le quest giornaliere",ch->name); log_string(buf); return; } numobj=0; for (objtest=ch->carrying; objtest != NULL; objtest=objtest->next_content) if (objtest->wear_loc != WEAR_NONE) numobj++; // Disattivato il check sugli oggetti quest indossati per poter richiedere la missione - Marhis 22/11/03 // else /* if ((objtest->pIndexData->vnum==QUEST_ITEM1)||(objtest->pIndexData->vnum==QUEST_ITEM2)||(objtest->pIndexData->vnum==QUEST_ITEM3)) { sprintf(buf, "Se indossassi gli oggetti che ti diedi forse ti ascoltero'!"); do_tell_quest(ch,questman,buf); return; } */ if ((ch->level>10)&&(numobj<10)) { sprintf(buf, "Con cosi' poco equipaggiamento non e' facile affrontare una missione!"); do_tell_quest(ch,questman,buf); return; } if (IS_SET(ch->act, PLR_QUESTOR)) { sprintf(buf, "Ti e' stata gia' affidata una missione da completare!"); do_tell_quest(ch,questman,buf); return; } if (ch->pcdata->nextquest > 0) { if (ch -> sex == 2) sprintf(buf, "Sei valorosa, %s, ma e' bene aspettare un po'.",ch->name); else sprintf(buf, "Sei valoroso, %s, ma e' bene aspettare un po'.",ch->name); do_tell_quest(ch,questman,buf); sprintf(buf, "Torna piu' tardi."); do_tell_quest(ch,questman,buf); return; } if (ch -> sex == 2) sprintf(buf, "Grazie, valorosa %s!",ch->name); else sprintf(buf, "Grazie, valoroso %s!",ch->name); do_tell_quest(ch,questman,buf); // Qui รจ la parte interessante generate_quest(ch, questman); if (ch->pcdata->questmob > 0 || ch->pcdata->questobj > 0) { ch->pcdata->countdown = number_range(15,30); SET_BIT(ch->act, PLR_QUESTOR); sprintf(buf, "Hai %d minuti di tempo per completare la missione.",ch->pcdata->countdown); do_tell_quest(ch,questman,buf); sprintf(buf, "Che gli Dei siano con te!"); do_tell_quest(ch,questman,buf); } return; } else if (!strcmp(arg1, "complete")) { act( "$n informa $N che ha concluso la missione.", ch, NULL, questman, TO_ROOM); act ("Informi $N di aver concluso la missione.",ch, NULL, questman, TO_CHAR); if (ch->pcdata->questgiver != questman->pIndexData->vnum) { sprintf(buf, "Non ti ho mai affidato una missione! Mi stai prendendo in giro?"); do_tell_quest(ch,questman,buf); return; } if (IS_SET(ch->act, PLR_QUESTOR)) { if (ch->pcdata->questmob == -1 && ch->pcdata->countdown > 0) { int reward=0, pointreward=0, pracreward=0,level; int carisma;// correzione massimale stat - Marhis carisma = ch->perm_stat[STAT_CHA]+ch->mod_stat[STAT_CHA]; if(carisma > 25) carisma = 25; level = ch->level; reward = dice( level, 30); reward = URANGE( 300 , reward , 20 * ch->level ); // correzione massimale stat - Marhis // pointreward = number_range(20,40)+ch->perm_stat[STAT_CHA]+ch->mod_stat[STAT_CHA]; pointreward = number_range(20,40) + carisma; sprintf(buf, "Missione conclusa!"); do_tell_quest(ch,questman,buf); sprintf(buf,"Come ricompensa, ti do' %d Falchi Divini e %d monete d'oro.",pointreward,reward); do_tell_quest(ch,questman,buf); //MOBIUS - 20150928 - EXP SU QUEST sprintf(buf, "Di certo quest'esperienza ha giovato alla tua crescita!"); do_tell_quest(ch,questman,buf); if (chance(2)) { pracreward = number_range(1,6); if (pracreward == 1) { sprintf(buf, "Inoltre ecco %d sessione di pratica!\n\r",pracreward); } else { sprintf(buf, "Inoltre ecco %d sessioni di pratica!\n\r",pracreward); } send_to_char(buf, ch); ch->practice += pracreward; } tempo = time(NULL); tottempo = localtime (&tempo); ch->timeultquest = tottempo->tm_year*356 + tottempo->tm_mon*30 + tottempo->tm_mday; REMOVE_BIT(ch->act, PLR_QUESTOR); ch->pcdata->questgiver = 0; ch->pcdata->countdown = 0; ch->pcdata->questmob = 0; ch->pcdata->questobj = 0; ch->pcdata->nextquest = number_range(10, 15); ch->gold += reward; ch->pcdata->questpoints += pointreward; //MOBIUS - 20150928 - EXP SU QUEST gain_exp(ch, 250); if (ch->pcdata->questday==15) ch->pcdata->firstquest=current_time; ch->pcdata->questday=ch->pcdata->questday-1; // Decremento questday return; } else if (ch->pcdata->questobj > 0 && ch->pcdata->countdown > 0) { bool obj_found = FALSE; for (obj = ch->carrying; obj != NULL; obj= obj_next) { obj_next = obj->next_content; if (obj != NULL && obj->pIndexData->vnum == ch->pcdata->questobj && strstr( obj->extra_descr->description, ch->name ) != NULL ) { obj_found = TRUE; break; } } if (obj_found == TRUE) { int reward, pointreward, pracreward; int carisma;// correzione massimale stat - Marhis carisma = ch->perm_stat[STAT_CHA]+ch->mod_stat[STAT_CHA]; if(carisma > 25) carisma = 25; reward = number_range(350, 20 * ch->level); // correzione massimale stat - Marhis // pointreward = number_range(15,40) + ch->perm_stat[STAT_CHA] + ch->mod_stat[STAT_CHA]; pointreward = number_range(15,40) + carisma; act("Dai $p a $N.",ch, obj, questman, TO_CHAR); act("$n da' $p a $N.",ch, obj, questman, TO_ROOM); sprintf(buf, "Missione conclusa!"); do_tell_quest(ch,questman,buf); sprintf(buf,"Come ricompensa, ti do' %d Falchi Divini e %d monete d'oro.",pointreward,reward); do_tell_quest(ch,questman,buf); //MOBIUS - 20150928 - EXP SU QUEST sprintf(buf, "Di certo quest'esperienza ha giovato alla tua crescita!"); do_tell_quest(ch,questman,buf); if (chance(15)) { pracreward = number_range(1,6); if (pracreward == 1) { sprintf(buf, "Inoltre ecco %d sessione di pratica!\n\r",pracreward); } else { sprintf(buf, "Inoltre ecco %d sessioni di pratica!\n\r",pracreward); } send_to_char(buf, ch); ch->practice += pracreward; } tempo = time(NULL); tottempo = localtime (&tempo); ch->timeultquest = tottempo->tm_year*356 + tottempo->tm_mon*30 + tottempo->tm_mday; REMOVE_BIT(ch->act, PLR_QUESTOR); ch->pcdata->questgiver = 0; ch->pcdata->countdown = 0; ch->pcdata->questmob = 0; ch->pcdata->questobj = 0; ch->pcdata->nextquest = number_range(10, 15); ch->gold += reward; ch->pcdata->questpoints += pointreward; //MOBIUS - 20150928 - EXP SU QUEST gain_exp(ch, 250); if (ch->pcdata->questday==15) ch->pcdata->firstquest=current_time; ch->pcdata->questday=ch->pcdata->questday-1; // Decremento questday extract_obj(obj); return; } else { sprintf(buf, "Non hai completato la tua missione, ma hai ancora tempo!"); do_tell_quest(ch,questman,buf); return; } return; } else if ((ch->pcdata->questmob > 0 || ch->pcdata->questobj > 0) && ch->pcdata->countdown > 0) { sprintf(buf, "Non hai completato la tua missione, ma hai ancora tempo!"); do_tell_quest(ch,questman,buf); return; } } if (ch->pcdata->nextquest > 0) sprintf(buf,"Non ti e' stata affidata nessuna missione!"); else sprintf(buf, "Devi richiedere una missione prima, %s.",ch->name); do_tell_quest(ch,questman,buf); return; } else if (!strcmp(arg1, "trouble")) { if (arg2[0] == '\0') { send_to_char("Per riottenere un premio gia' acquisito precedentemente scrivi: quest trouble .\n\r",ch); return; } trouble_n = 0; if (is_name(arg2, "cinta")) { if (IS_SET(ch->quest,QUEST_GIRTH)) { REMOVE_BIT(ch->quest,QUEST_GIRTH); SET_BIT(ch->quest,QUEST_GIRTH2); trouble_n = 1; } else if (IS_SET(ch->quest,QUEST_GIRTH2)) { REMOVE_BIT(ch->quest,QUEST_GIRTH2); SET_BIT(ch->quest,QUEST_GIRTH3); trouble_n = 2; } else if (IS_SET(ch->quest,QUEST_GIRTH3)) { REMOVE_BIT(ch->quest,QUEST_GIRTH3); trouble_n = 3; } if (trouble_n) trouble_vnum = QUEST_ITEM1; } else if (is_name(arg2, "arma")) { if (IS_SET(ch->quest,QUEST_WEAPON)) { REMOVE_BIT(ch->quest,QUEST_WEAPON); SET_BIT(ch->quest,QUEST_WEAPON2); trouble_n = 1; } else if (IS_SET(ch->quest,QUEST_WEAPON2)) { REMOVE_BIT(ch->quest,QUEST_WEAPON2); SET_BIT(ch->quest,QUEST_WEAPON3); trouble_n = 2; } else if (IS_SET(ch->quest,QUEST_WEAPON3)) { REMOVE_BIT(ch->quest,QUEST_WEAPON3); trouble_n = 3; } if (trouble_n) trouble_vnum = QUEST_ITEM3; } else if (is_name(arg2, "mazza")) // aggiunto per mazza - Marhis { if (IS_SET(ch->quest,QUEST_WEAPON)) { REMOVE_BIT(ch->quest,QUEST_WEAPON); SET_BIT(ch->quest,QUEST_WEAPON2); trouble_n = 1; } else if (IS_SET(ch->quest,QUEST_WEAPON2)) { REMOVE_BIT(ch->quest,QUEST_WEAPON2); SET_BIT(ch->quest,QUEST_WEAPON3); trouble_n = 2; } else if (IS_SET(ch->quest,QUEST_WEAPON3)) { REMOVE_BIT(ch->quest,QUEST_WEAPON3); trouble_n = 3; } if (trouble_n) trouble_vnum = QUEST_MAZZA; } else if (is_name(arg2, "ascia")) // aggiunto per ascia - Marhis { if (IS_SET(ch->quest,QUEST_WEAPON)) { REMOVE_BIT(ch->quest,QUEST_WEAPON); SET_BIT(ch->quest,QUEST_WEAPON2); trouble_n = 1; } else if (IS_SET(ch->quest,QUEST_WEAPON2)) { REMOVE_BIT(ch->quest,QUEST_WEAPON2); SET_BIT(ch->quest,QUEST_WEAPON3); trouble_n = 2; } else if (IS_SET(ch->quest,QUEST_WEAPON3)) { REMOVE_BIT(ch->quest,QUEST_WEAPON3); trouble_n = 3; } if (trouble_n) trouble_vnum = QUEST_ASCIA; } else if (is_name(arg2, "fede")) { if (IS_SET(ch->quest,QUEST_RING)) { REMOVE_BIT(ch->quest,QUEST_RING); SET_BIT(ch->quest,QUEST_RING2); trouble_n = 1; } else if (IS_SET(ch->quest,QUEST_RING2)) { REMOVE_BIT(ch->quest,QUEST_RING2); SET_BIT(ch->quest,QUEST_RING3); trouble_n = 2; } else if (IS_SET(ch->quest,QUEST_RING3)) { REMOVE_BIT(ch->quest,QUEST_RING3); trouble_n = 3; } if (trouble_n) trouble_vnum = QUEST_ITEM2; } if (!trouble_n) { sprintf(buf,"Mi dispiace %s, non puoi riavere questo premio.",ch->name); do_tell_quest(ch,questman,buf); return; } for(obj = object_list; obj != NULL; obj = obj_next) { obj_next = obj->next; if ( obj->pIndexData->vnum == trouble_vnum && strstr( obj->short_descr, ch->name)) { extract_obj( obj ); break; } } obj = create_object(get_obj_index(trouble_vnum),ch->level); sprintf( buf, obj->short_descr, IS_GOOD(ch) ? "sacra" : IS_NEUTRAL(ch) ? "verde-foglia" : "demoniaca", ch->name); free_string( obj->short_descr ); obj->short_descr = str_dup( buf ); act( "$N da' $p a $n.", ch, obj, questman, TO_ROOM ); act( "$N ti da' $p.", ch, obj, questman, TO_CHAR ); obj_to_char(obj, ch); sprintf(buf,"Questa e' la %i^ volta che ti concedo una copia di questo premio.", trouble_n,(trouble_n == 1) ? "st" : (trouble_n == 2) ? "nd" : "rd" ); do_tell_quest(ch,questman,buf); if (trouble_n == 3) { sprintf(buf,"Quindi e' l'ultima, e se lo perdi ancora resterai senza!!"); do_tell_quest(ch,questman,buf); } return; } send_to_char("COMANDI QUEST : points info time request complete list buy trouble.\n\r",ch); send_to_char("Per ulteriori informazioni: help quest.\n\r",ch); return; }