//Le Livre d'Ymir http://www.bookofymir.net/ //traduit par Myllena //===== eAthena Script ======================================= //= Kafra Express - Broadcasting Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 3.1 //===== Compatible With: ===================================== //= eAthena SVN8637+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Offers broadcasting for party requests, pvp, general //= and anonymous. Broadcasts can be to the current map //= or server-wide //===== Additional Comments: ================================= //= See config.txt for configuration. //= For the PVP broadcasts, variables from the Pvp Warping //= Module are used. //============================================================ - script keInit_broadcast -1,{ OnInit: //Load Config donpcevent "keConfig::OnLoadBroadcast"; end; } //Function F_keBroadcast(String currentMapName) function script F_keBroadcast { function SF_calcPrice; function SF_broadcasts; function SF_bcPvp; function SF_doBroadcast; if ($@kebc_showOnline) { set @kmenu, select( "- Retour", "- Annonces sur la Map ("+getarg(0)+"/"+getmapusers(getarg(0))+" "+$@ked_users$+")", "- Annonces Globales ("+getusers(1)+" "+$@ked_users$+")" ); } else { set @kmenu, select( "- Retour", "- Annonces sur la Map ("+getarg(0)+")", "- Annonces Globales" ); } switch(@kmenu) { case 2: SF_calcPrice(0); set @map$,getarg(0); SF_broadcasts("Map ("+getarg(0)+")"); break; case 3: SF_calcPrice(1); set @map$,""; SF_broadcasts("Globale"); break; } return; //Sub Function SF_broadcasts: Handles main broadcast menu. function SF_broadcasts { do { switch (select ( "- Annuler votre Annonce ("+getarg(0)+") ", "- Recherche de Groupe ("+@partycost+"z)", "- Recherche d'un Adversaire en PvP ("+@pvpcost+"z)", "- Annonce Générale ("+@cost+"z)", "- Annonce Générale Anonyme ("+@anoncost+"z)" )) { case 2: //Party SF_doBroadcast $@kebc_partyCost,@map$,""+strcharinfo(0)+": "+jobname(class)+" (Niveaux "+baselevel+"/"+joblevel+") cherche un Groupe.",0; break; case 3: //Pvp if ($@kewp_advanced == 0) SF_bcPvp $@kebc_pvpCost,@map$,0,0; else { do { set @kmenu, select ( "- Annuler", "- Arènes Tous Niveaux", "- Arènes de Niveaux "+($@kewp_baseLv1-$@kewp_range)+" à "+($@kewp_baseLv1+$@kewp_range)+"", "- Arènes de Niveaux "+($@kewp_baseLv2-$@kewp_range)+" à "+($@kewp_baseLv2+$@kewp_range)+"", "- Arènes de Niveaux "+($@kewp_baseLv3-$@kewp_range)+" à "+($@kewp_baseLv3+$@kewp_range)+"", "- Arènes de Niveaux "+($@kewp_baseLv4-$@kewp_range)+" à "+($@kewp_baseLv4+$@kewp_range)+"", "- Arènes de Niveaux "+($@kewp_baseLv5-$@kewp_range)+" à "+($@kewp_baseLv5+$@kewp_range)+"", "- Arènes de Niveaux "+($@kewp_baseLv6-$@kewp_range)+" à "+($@kewp_baseLv6+$@kewp_range)+"", "- Arènes de Niveaux "+($@kewp_baseLv7-$@kewp_range)+" à "+($@kewp_baseLv7+$@kewp_range)+"" ); switch (@kmenu) { case 2: //All levels SF_bcPvp $@kebc_pvpCost,@map$,0,0; break; case 3: //Lv1 SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv1-$@kewp_range,$@kewp_baseLv1+$@kewp_range; break; case 4: //Lv2 SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv2-$@kewp_range,$@kewp_baseLv2+$@kewp_range; break; case 5: //Lv3 SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv3-$@kewp_range,$@kewp_baseLv3+$@kewp_range; break; case 6: //Lv4 SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv4-$@kewp_range,$@kewp_baseLv4+$@kewp_range; break; case 7: //Lv5 SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv5-$@kewp_range,$@kewp_baseLv5+$@kewp_range; break; case 8: //Lv6 SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv6-$@kewp_range,$@kewp_baseLv6+$@kewp_range; break; case 9: //Lv7 SF_bcPvp $@kebc_pvpCost,@map$,$@kewp_baseLv7-$@kewp_range,$@kewp_baseLv7+$@kewp_range; break; default: break; } } while (@kmenu > 1); } break; case 4: //General SF_doBroadcast $@kebc_cost,@map$,"(De "+strcharinfo(0)+") ",1; break; case 5: //Anonymous SF_doBroadcast $@kebc_anonCost,@map$,"(Anonyme) ",1; break; default: return; } } while (1); } //SF_ end //SubFunction: Calculates prices for Broadcast services (argument 0 == 1 for global bc, 0 for map bc function SF_calcPrice { set @partycost,callfunc("F_keCost",$@kebc_partyCost,$@kebc_discount); set @pvpcost,callfunc("F_keCost",$@kebc_pvpCost,$@kebc_discount); set @cost,callfunc("F_keCost",$@kebc_cost,$@kebc_discount); set @anoncost,callfunc("F_keCost",$@kebc_anonCost,$@kebc_discount); if (getarg(0)) { //Global fix set @partycost,@partycost*$@kebc_globalFactor/100; set @pvpcost,@pvpcost*$@kebc_globalFactor/100; set @cost,@cost*$@kebc_globalFactor/100; set @anoncost,@anoncost*$@kebc_globalFactor/100; } } //SF_ end //SubFunction SF_doBroadcast(int cost, String map, String message, int input) //If map is "", do a global broadcast //If input is 1, concat a user string to message. function SF_doBroadcast { set @cost, getarg(0); if (getarg(1)=="") set @cost, @cost*$@kebc_globalFactor/100; if (getarg(3)) { //Input message input @msg$; set @msg$,getarg(2)+@msg$; } else set @msg$,getarg(2); mes "Diffuser '"+@msg$+"'?"; switch (select( "- Annuler l'Annonce", "- Diffuser l'Annonce" )) { case 2: if (!(callfunc("F_keCharge",@cost,$@kebc_discount,1))) { callfunc "F_keIntro", e_pif, "Vous n'avez pas assez d'argent..."; return; } callfunc "F_keIntro", e_what, "Annonce en cours de diffusion..."; if (getarg(1)=="") announce @msg$,bc_blue; else mapannounce getarg(1),@msg$,bc_blue; break; default: callfunc "F_keIntro", -1, "Ok..."; } } //SF_ end //SubFunction SF_bcPvp (int cost, String map, int min level, int max level) //Does the second part of PvP Room Advertising. Level is the level group to //advertise (1->8 where 8 is free for all) function SF_bcPvp { set @msg$, "tous niveaux"; set @lvls$, ""; if (getarg(3)) { if (BaseLevel < getarg(2) || BaseLevel > getarg(3)) { callfunc "F_keIntro", e_bzz, "Vous pouvez passer des Annonces uniquement pour les salles PvP que vous pouvez vous-même rejoindre!"; return; } set @msg$,"de Niveaux "+getarg(2)+" à "+getarg(3); set @lvls$,"(de Niveaux "+getarg(2)+" à "+getarg(3)+") "; } set @pvpcost,getarg(0); switch(select( "- Annuler (PvP Rooms "+@msg$+")", "- Arène Sandwich", "- Arène Rock On", "- Arène Four", "- Arène Undercross", "- Arène Compass" )) { case 2: //Sandwich SF_doBroadcast @pvpcost,@map$,""+strcharinfo(0)+": "+jobname(class)+" cherche des adversaires "+@lvls$+" dans l'Arène Sandwich!",0; break; case 3: //Rockon SF_doBroadcast @pvpcost,@map$,""+strcharinfo(0)+": "+jobname(class)+" cherche des adversaires "+@lvls$+" dans l'Arène Rock On!",0; break; case 4: //Room Four SF_doBroadcast @pvpcost,@map$,""+strcharinfo(0)+": "+jobname(class)+" cherche des adversaires "+@lvls$+" dans l'Arène Four!",0; break; case 5: //Undercross SF_doBroadcast @pvpcost,@map$,""+strcharinfo(0)+": "+jobname(class)+" cherche des adversaires "+@lvls$+" dans l'Arène Undercross!",0; break; case 6: //Compass SF_doBroadcast @pvpcost,@map$,""+strcharinfo(0)+": "+jobname(class)+" cherche des adversaires "+@lvls$+" dans l'Arène Compass!",0; break; } } //SF_ end }