//Le Livre d'Ymir http://www.bookofymir.net/ //traduit par Myllena //===== eAthena Script ======================================= //= Simple Adoption Script //===== By =================================================== //= Fredzilla with help from Kamari,Acky //===== Version ============================================== //= 1.7 Moved warps to the southern exit of the main chappel. [L0ne_W0lf] //= 1.6a Fixed wrong label name [KarLaeda] //= 1.6 Removed call to function Is_Taekwon_Class in favor of baseClass == Job_Taekwon [Silentdragon] //= 1.5 Added GM menu to reset current adoption [Lupus] //= 1.4 Got rid of useless "event_adoptXXX" variables [Lupus] //= 1.3c - Slightly rewrote the anti-taekwon protection to //= detect problems more easily [DracoRPG] //= 1.3a - Added anti Taekwon Classes protection (they can't //= be adopted) [Lupus] //= 1.3 - Now it can teach parents/baby their missing skills. //= Your old families should talk to these NPCs to get //= their family skills [Lupus] //= 1.2b - More fixes + Added Acky's teacher to the end //= (stoped it from saying a particular word I thought //= was inapropriate for a kids game) //= 1.1 - Minor correction, replaced missing close; and mes :D //= 1.0 - First Release, most likely going to have some bugs //= Is using @adopt instead of proper NPC script command //===== Compatible With ====================================== //= eAthena Final (SVN), any version that contained the GM command @adopt //= This is any version released after 03/29/05, don't know the number //===== Description ========================================== //= A simple adoption script that lets couples adopt a //= lvl 1/1 novice without the help of a GM there //===== Comments ============================================= //= List or Variables used //= $@AdoptionActive = Stops other people trying to use //= the adoption NPC's intill the currant one is over. //= @AdoptionReady = Marks person that talks to first NPC, //= this person will end up being ParentOne. //= $@ParentOne$ = Explains itself. //= $@ParentTwo$ = "" "" //= $@Baby$ = "" "" //= $@GenderBaby$ = Set so it can state boy or girl. //= $@FinalQuestion = Lets the parents take one last chance //= to cancel the adoption before it is perminant. //= $@CheckAll = Follow on from the last one, when this = 3, //= the adoption will take place and will be perminant. //= @regged = Stops the same person being counted twice //= before the adoption is completed. //= Lupus removed: //= *event_adopt = Put on the parents so they cannot adopt again. //= *event_adopted = Put on baby so it can't be adopted again. //= Use "getchildid()>0" insread of event_adopt //= Use "Upper==2" insread of event_adopted //============================================================ prt_church,83,122,0 warp prtch03 1,2,prt_church,164,171 prt_church,162,171,0 warp prtch01-3 1,2,prt_church,86,122 prt_church,166,176,3 script Adoption#1 61,{ //If u're a GM you can always reset current Adoption process if(getgmlevel()>=90) { mes "[Menu GM]"; mes "Voulez-vous remettre à zéro l'adoption en train de se dérouler?"; next; menu "Oui",-,"Non",L_SKIP; callfunc "AdoptReset","un GM en a décidé ainsi..."; close; } L_SKIP: if($@AdoptionActive == 1) goto A_Cannot; set @AdoptionReady,0; // Bugfix: sans ça le script foire après une adoption qui a échoué [No Healing] mes "[Oliver]"; if (Upper==2) goto A_YouBaby; if (getchildid()>0 && getskilllv(410)<=0) goto A_GetSkill; if (getchildid()>0) goto A_Already; mes "Voulez-vous adopter un enfant?"; next; menu "Oui",A_Yes,"Non",-; A_No: mes "[Oliver]"; mes "Je suis désolé de l'entendre. Revenez quand vous pensez être prêt à adopter."; close; A_Cannot: mes "[Oliver]"; mes "Une procédure d'adoption est en cours, revenez quand elle sera terminée."; close; A_Yes: mes "[Oliver]"; mes "Ravi de l'entendre!"; mes "Mais est-ce que vous remplissez bien toutes les conditions pour devenir parent?"; next; mes "[Oliver]"; mes "Nous ne pouvons pas simplement donner des enfants comme ça à qui veut."; mes "Avant de commencer la procédure d'adoption, nous devons vérifier que vous avez bien la carrure pour vous occuper correctement de votre enfant."; next; mes "[Oliver]"; mes "Vous devez également être marié. Nous refusons l'adoption par une personne célibataire."; next; mes "[Oliver]"; mes "Pensez-vous remplir tous ces critères?"; next; menu "Oui, lancez la procédure d'adoption.",-,"Non, je ne pense pas en être capable.",A_No; mes "[Oliver]"; mes "Très bien, vous semblez déterminé."; next; deltimer "timeadopt::OnAdopt"; addtimer 300000,"timeadopt::OnAdopt"; if ($@AdoptionActive == 1) goto A_Cannot; set $@AdoptionActive,1; set @AdoptionReady,1; mes "[Oliver]"; mes "Je transmets votre dossier à mon collègue."; close; A_GetSkill: mes "Vous venez d'adopter un enfant? Je vais vous apprendre une compétence très utile afin de pouvoir toujours garder un oeil sur votre enfant chéri...!"; next; emotion 46; skill 410,1,0; mes "[Oliver]"; mes "Et voilà! Dites à votre partenaire de venir me voir également."; mes "Les enfants, c'est l'avenir!"; close; A_Already: emotion 1; mes "Comment se porte votre enfant aujourd'hui?"; close; A_YouBaby: emotion 2; mes "Dis " + ( isday() ? "BONJOUR" : "BONSOIR" ) + " à tes parents!"; if (getskilllv(408)<=0 || getskilllv(409)<=0) mes "Au fait, le Professeur veut te voir."; close; } prt_church,172,177,3 script Adoption#2 103,{ if (Upper==2) goto A_YouBaby; if (getchildid()>0 && getskilllv(410)<=0) goto A_GetSkill; if (getchildid()>0) goto A_Already; if ($@FinalQuestion==1 && $@ParentOne$==strcharinfo(0)) goto A_ParentOneEnd; if ($@FinalQuestion==1 && $@ParentTwo$==strcharinfo(0)) goto A_ParentTwoEnd; if ($@FinalQuestion==1 && $@Baby$==strcharinfo(0)) goto A_BabyEnd; if (strcharinfo(0)==$@Baby$) goto A_FinalTest; if (strcharinfo(0)==$@ParentTwo$) goto A_SecondReg; if (@AdoptionReady==0 || $@AdoptionActive==0) goto A_SeeFriend; mes "[Inanna]"; deltimer "timeadopt::OnAdopt"; addtimer 300000,"timeadopt::OnAdopt"; mes "Alors, pensez-vous remplir tous les critères pour adopter un enfant?"; mes "Voyons-voir... Tout d'abord, avez-vous un Niveau de Base égal ou supérieur à 70?"; next; menu "Oui.",A_lvl,"Non.",-; mes "[Inanna]"; mes "Oh, je suis désolée de l'apprendre... Revenez quand vous serez prêt."; callfunc "AdoptReset","le premier parent n'a pas le niveau requis."; close; A_SeeFriend: mes "[Inanna]"; mes "On dirait que vous n'avez pas encore parlé à mon collègue."; mes "C'est lui qui ouvre les dossiers permettant de lancer une procédure d'adoption."; close; A_lvl: if(BaseLevel >= 70) goto A_lvlpassed; mes "[Inanna]"; mes "Non seulement vous n'avez pas le niveau requis, mais en plus vous m'avez menti..."; next; mes "[Inanna]"; mes "Je ne peux pas vous confier d'enfant."; callfunc "AdoptReset","le premier parent n'a pas le niveau requis."; close; A_lvlpassed: mes "[Inanna]"; mes "Très bien, vous êtes relativement expérimenté, ça joue en votre faveur!"; next; mes "[Inanna]"; mes "Pour pouvoir adopter, vous devez être en couple, et marié!"; mes "Avez-vous une alliance de mariage?"; next; menu "Oui.",A_Wedring,"Non.",A_Noring,"Je ne suis pas marié.",-; mes "[Inanna]"; mes "Eh bien, comme mon collègue a déjà dû vous le dire, nous ne confions pas d'enfants aux célibataires."; callfunc "AdoptReset","les parents ne sont pas mariés."; close; A_Noring: mes "[Inanna]"; mes "Je ne peux pas croire que vous avez fait un mariage heureux et que vous ne portez pas votre alliance toujours sur vous!"; next; mes "[Inanna]"; mes "Vous ne méritez pas de pouvoir adopter un enfant."; callfunc "AdoptReset","le premier parent ne porte pas son alliance."; close; A_Wedring: if ( isequipped(2634) || isequipped(2635) ) goto A_Wedringpassed; // Bugfix: il faut que le ring soit équippé [No Healing] goto A_Noring; A_Wedringpassed: mes "[Inanna]"; mes "Ah, quelle jolie alliance! Vous devez beaucoup aimer votre partenaire."; next; if (getchildid()>0) goto A_AlreadyHaveBaby; mes "[Inanna]"; mes "D'ailleurs à ce propos, quel est le nom de votre partenaire?"; next; input $@ParentTwo$; set $@ParentOne$, strcharinfo(0); set $@parentRID1,getcharid(3); // Bugfix, cf plus bas [No Healing] mes "[Inanna]"; mes "Votre partenaire a cinq minutes pour se présenter devant moi avant que la procédure d'adoption ne soit annulée."; next; deltimer "timeadopt::OnAdopt"; addtimer 300000,"timeadopt::OnAdopt"; areaannounce "prt_church",0,0,350,350,"Puis-je voir "+$@ParentTwo$+" s'il vous plaît?",0; mes "[Inanna]"; mes "Attendez que je vous appelle, merci."; close; A_AlreadyHaveBaby: mes "Voyons-voir... Oh, mais je vois dans nos dossiers que vous avez déjà adopté un enfant!"; next; mes "[Inanna]"; mes "Je suis désolée, mais vous ne pouvez adopter qu'un seul enfant."; mes "Prenez bien soin de lui."; callfunc "AdoptReset","les parents ont déjà adopté un enfant."; close; A_SecondReg: deltimer "timeadopt::OnAdopt"; addtimer 300000,"timeadopt::OnAdopt"; mes "[Inanna]"; mes "Vous devez être "+$@ParentTwo$+", j'ai parlé à votre partenaire "+$@ParentOne$+", il y a quelques instants... Apparemment vous voulez adopter un enfant?"; next; mes "[Inanna]"; mes "Êtes-vous d'accord avec "+$@ParentOne$+", vous souhaitez adopter un enfant?"; next; menu "Oui.",A_agree,"Non.",-; mes "[Inanna]"; mes "Je suis désolée d'entendre cette mauvaise nouvelle."; callfunc "AdoptReset","le deuxième parent ne veut pas adopter."; close; A_agree: mes "[Inanna]"; mes "Je vais maintenant vous faire passer le même test que votre partenaire."; next; if(BaseLevel >= 70) goto A_lvltwo; mes "[Inanna]"; mes "Désolé, mais vous n'avez pas atteint le Niveau de Base 70."; callfunc "AdoptReset","le deuxième parent n'a pas le niveau requis."; close; A_lvltwo: if ( isequipped(2634)>0 || isequipped(2635)>0 ) goto A_Wedringtwo; // Bugfix: il faut que le ring soit équippé [No Healing] mes "[Inanna]"; mes "Désolée, mais vous n'avez pas l'alliance, preuve de votre mariage."; callfunc "AdoptReset","le deuxième parent n'a pas son alliance."; close; A_Wedringtwo: if (getchildid()>0) goto A_AlreadyHaveBaby; mes "[Inanna]"; mes "Vous remplissez toutes les conditions pour pouvoir lancer la procédure d'adoption!"; mes "Avez-vous un Novice à adopter?"; next; menu "Oui.",A_YesBaby,"Non.",-; mes "[Inanna]"; mes "Je vous suggère d'en trouver un..."; callfunc "AdoptReset","les parents n'ont pas choisi de novice à adopter."; close; A_YesBaby: mes "[Inanna]"; mes "Quel est le nom de l'enfant que vous souhaitez adopter?"; next; input $@Baby$; mes "[Inanna]"; mes "Le Novice a cinq minutes pour se présenter devant moi, avant que la procédure d'adoption ne soit annulée."; next; deltimer "timeadopt::OnAdopt"; addtimer 300000,"timeadopt::OnAdopt"; mes "[Inanna]"; mes "Merci, attendez maintenant aux côtés de votre partenaire, que je vous appelle."; areaannounce "prt_church",0,0,350,350,"Puis-je voir "+$@Baby$+", s'il vous plaît?",0; close; A_FinalTest: deltimer "timeadopt::OnAdopt"; addtimer 300000,"timeadopt::OnAdopt"; if(Upper==2) goto A_AlreadyAdopted; if(baseClass == Job_Taekwon) goto A_CantBeAdopted; mes "[Inanna]"; mes "Tu dois être "+$@Baby$+", ravie de te rencontrer."; mes "Des gens adorables, "+$@ParentOne$+" et "+$@ParentTwo$+", ont demandé à t'adopter."; next; if(sex!=0) set $@GenderBaby$,"un gentil garçon"; if(sex==0) set $@GenderBaby$,"une gentille fille"; mes "[Inanna]"; mes "Maintenant, veux-tu être "+$@GenderBaby$+" et aller vivre avec ces personnes?"; next; menu "Oh voui j'adorerais!",A_BabyYes,"NOOOOONN!!!",-; mes "[Inanna]"; mes "Calme toi!"; mes "Je vais essayer de te trouver de meilleurs parents pour la prochaine fois."; callfunc "AdoptReset","le novice ne souhaite pas être adopté."; close; A_BabyYes: mes "[Inanna]"; mes "Ah! Je suis ravie de l'entendre!"; mes "Maintenant voyons voir..."; next; mes "[Inanna]"; mes "Je dois simplement vérifier si tu es vraiment un Novice de Niveau 1/1. Ne bouge pas s'il te plaît."; next; if (BaseLevel == 1 && JobLevel == 1) goto A_Ready; mes "[Inanna]"; mes "Désolée, mais tu as un Niveau trop élevé... tu n'es pas un véritable Novice."; callfunc "AdoptReset","le novice a un niveau supérieur à 1."; close; A_Ready: mes "[Inanna]"; mes "Tu es un Novice tout à fait innocent..."; next; mes "[Inanna]"; mes "Je n'ai aucune objection à ton adoption."; mes "Je dois encore voir une dernière fois tes parents, puis te revoir à nouveau. Après, la procédure sera terminée."; set $@FinalQuestion,1; areaannounce "prt_church",0,0,350,350,"Puis-je voir toutes les personnes engagées dans la procédure d'adoption?",0; deltimer "timeadopt::OnAdopt"; addtimer 300000,"timeadopt::OnAdopt"; close; A_AlreadyAdopted: mes "[Inanna]"; mes "Oh vous avez déjà trouvé de merveilleux parents!"; callfunc "AdoptReset","le novice a déjà des parents."; close; A_CantBeAdopted: mes "[Inanna]"; mes "Désolée, mais votre métier ne vous permet pas d'être adopté."; callfunc "AdoptReset","le novice a un métier..."; close; A_ParentOneEnd: if (@regged>1) goto A_AlreadyReged; if ($@ParentOne$==$@ParentTwo$) goto A_SameFail; mes "[Inanna]"; mes "Ravie de vous reparler, "+$@ParentOne$; mes "Nous entrons dans la procédure finale d'adoption."; next; mes "[Inanna]"; mes "Vous savez que vous ne pourrez adopter qu'un seul enfant, donc si vous adoptez "+$@Baby$+", vous ne pourrez plus jamais adopter d'autres enfants."; next; mes "[Inanna]"; mes "Êtes-vous sûr de vouloir l'adopter?"; next; menu "Oui",A_FinalYesP,"Non",-; mes "[Inanna]"; mes "Je n'en crois pas mes oreilles! Après tout ce temps, le dossier d'adoption rempli... Vous désister, maintenant!"; mes "Êtes-vous certain de vouloir arrêter la procédure?"; next; menu "Oui, je ne veux pas adopter.",-,"Non, je me suis trompé.",A_ParentOneEnd; A_Failend: mes "[Inanna]"; mes "Si vous en êtes certain..."; callfunc "AdoptReset","l'un des membres s'est désisté."; close; A_FinalYesP: mes "[Inanna]"; mes "Très bien, tout est fin prêt, il ne reste plus que quelques étapes!"; set @regged,1; set $@checkall,$@checkall+1; if ($@checkall==3) goto THEEND; close; A_ParentTwoEnd: if (@regged>1) goto A_AlreadyReged; set $@parentRID2,getcharid(3); // Bugfix, cf plus bas [No Healing] mes "[Inanna]"; mes "Ravie de vous reparler, "+$@ParentTwo$; mes "Nous entrons dans la procédure finale d'adoption."; next; mes "[Inanna]"; mes "Vous savez que vous ne pourrez adopter qu'un seul enfant, donc si vous adoptez "+$@Baby$+", vous ne pourrez plus jamais adopter d'autres enfants."; next; mes "[Inanna]"; mes "Êtes-vous sûr de vouloir l'adopter?"; next; menu "Oui",A_FinalYesP,"Non",-; mes "[Inanna]"; mes "Je n'en crois pas mes oreilles! Après tout ce temps, le dossier d'adoption rempli... Vous désister, maintenant!"; mes "Êtes-vous certain de vouloir arrêter la procédure?"; next; menu "Oui, je ne veux pas adopter.",A_Failend,"Non, je me suis trompé.",A_ParentTwoEnd; A_AlreadyReged: mes "[Inanna]"; mes "Veuillez attendre que les autres personnes engagées dans la procédure d'adoption se présentent à moi."; close; A_BabyEnd: if (@regged>1) goto A_AlreadyReged; set $@parentRID3,getcharid(3); // Bugfix, cf plus bas [No Healing] mes "[Inanna]"; mes "Ravie de te reparler, "+$@Baby$; mes "Nous entrons dans la procédure finale d'adoption."; next; mes "[Inanna]"; mes "Tu sais que tu ne peux être adopté qu'une seule fois, donc si tu es adopté par "+$@ParentOne$+" et "+$@ParentTwo$+", tu ne pourras plus jamais être adopté."; next; mes "[Inanna]"; mes "Es-tu sûr de vouloir être adopté?"; next; menu "Oui",A_FinalYesB,"Non",-; mes "[Inanna]"; mes "Je n'en crois pas mes oreilles! Après tout ce temps, le dossier d'adoption rempli... Te désister, maintenant!"; mes "Es-tu certain de vouloir arrêter la procédure?"; next; menu "Oui, je ne veux pas être adopté.",A_Failend,"Non, je me suis trompé.",A_BabyEnd; A_FinalYesB: mes "[Inanna]"; mes "Très bien, tout est fin prêt, il ne reste plus que quelques étapes!"; set @regged,1; set $@checkall,$@checkall+1; if ($@checkall==3) goto THEEND; close; A_SameFail: mes "[Inanna]"; mes "Désolée, mais vous vous êtes déjà enregistré en tant que parent, ce n'est pas permis."; callfunc "AdoptReset","les deux parents sont la même personne."; close; A_GetSkill: emotion 20; mes "[Inanna]"; mes "Depuis que vous avez adopté votre enfant, vous ne le voyez plus souvent à vos côtés? Je vais vous enseigner une compétence très pratique pour pouvoir toujours garder un oeil sur votre progéniture..."; next; mes "[Oliver]"; mes "Hé, Inanna! C'est mon boulot, ça! Envoie-les moi!"; close; A_Already: mes "[Inanna]"; emotion 21; mes "Comment se porte votre enfant aujourd'hui?"; close; A_YouBaby: mes "[Inanna]"; emotion 30; mes "Dis à ton père que c'est un bon papa!"; if (getskilllv(408)<=0 || getskilllv(409)<=0) mes "Tu devrais parler à notre Professeur."; close; THEEND: // Gros bugfix sur tout ce label: tout d'abord la commande NPC "adopt" n'existe plus, contrairement à ce qui est dit dans doc/script_commands.txt, j'ai // donc remplacé celle-ci par un atcommand "@adopt". Ensuite, cette commande ne marche que si les parents ont un niveau supérieur à 70. D'autre part, // selon pc_can_Adopt (map/pc.c), les parents doivent être dans la même équipe et porter leur alliance. [No Healing] if ( getcharid(1,$@ParentOne$) != getcharid(1,$@ParentTwo$) || getcharid(1,$@ParentOne$) != getcharid(1,$@Baby$) ){ next; mes "[Inanna]"; mes "Oh, je suis désolée mais vous devez tous être dans la même équipe pour pouvoir adopter un enfant. Je ne vous l'avais pas dit? Quelle étourdie je fais!"; } if ( rid2name($@parentRID1) == $@ParentOne$ && rid2name($@parentRID2) == $@ParentTwo$ && rid2name($@parentRID3) == $@Baby$ ) { logmes "Adoption: "+$@Baby$+" a été adopté par "+$@ParentOne$+" et "+$@ParentTwo$+"."; atcommand "@adopt "+$@ParentOne$+","+$@ParentTwo$+","+$@Baby$; announce $@ParentOne$+" et "+$@ParentTwo$+" viennent d'adopter "+$@Baby$,5; } else { next; mes "[Inanna]"; mes "Oh, je suis désolée mais il y a quelque chose qui ne va pas. Avez-vous enlevé votre anneau de mariage? Ou alors est-ce que l'un des membres de la future famille n'est pas ici avec nous? Voyons voir..."; } deltimer "timeadopt::OnAdopt"; set $@AdoptionActive, 0; set $@ParentOne$, null; set $@ParentTwo$, null; set $@Baby$, null; set $@GenderBaby$, null; set $@FinalQuestion, 0; set $@CheckAll, 0; close; end; } prt_church,165,175,0 script timeadopt -1,{ OnAdopt: callfunc "AdoptReset","trop de temps s'est écoulé."; end; } function script AdoptReset { deltimer "timeadopt::OnAdopt"; set $@AdoptionActive, 0; set $@ParentOne$, null; set $@ParentTwo$, null; set $@Baby$, null; set $@GenderBaby$, null; set $@FinalQuestion, 0; set $@CheckAll, 0; areaannounce "prt_church",0,0,350,350,"L'adoption a été annulée car "+getarg(0),0; return; } prt_church,165,166,6 script Professeur 97,{ mes "[Mario]"; if (Upper==2 && (getskilllv(408)<=0 || getskilllv(409)<=0)) goto L_Teach; if (Upper==2) mes ( isday() ? "Bonjour" : "Bonsoir" ) + ", jeune enfant! Comment vas-tu?"; if (Upper!=2) mes "Comment allez-vous?"; next; menu "Super!",-,"Bien.",-,"Moyen...",-,"Vous avez une corde?",-; mes "[Mario]"; mes "Hahaha!"; emotion rand(19,21); close; L_Teach: skill 408,1,0; skill 409,1,0; mes "Ta-da! Et voilà, vous avez appris deux compétences très utiles!"; mes "1. Appeler vos Parents (si vous êtes en danger)."; mes "2. Partager l'expérience de vos Parents (avec amouuur)!"; emotion 41; next; mes "[Mario]"; mes "Si vous voyez un Novice orphelin, dites-lui de venir nous voir."; next; L_Cancel: mes "[Mario]"; mes "Au revoir!"; close; }