//===== 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( "- Return", "- Map Broadcasts ("+getarg(0)+"/"+getmapusers(getarg(0))+" "+$@ked_users$+")", "- Global Broadcasts ("+getusers(1)+" "+$@ked_users$+")" ); } else { set @kmenu, select( "- Return", "- Map Broadcasts ("+getarg(0)+")", "- Global Broadcasts" ); } 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("Global"); break; } return; //Sub Function SF_broadcasts: Handles main broadcast menu. function SF_broadcasts { do { switch (select ( "- Cancel "+getarg(0)+" Broadcast", "- Party request Broadcast ("+@partycost+"z)", "- PvP challenge Broadcast ("+@pvpcost+"z)", "- General Broadcast ("+@cost+"z)", "- General Anonymous Broadcast ("+@anoncost+"z)" )) { case 2: //Party SF_doBroadcast $@kebc_partyCost,@map$,"The "+jobname(class)+" "+strcharinfo(0)+" (levels "+baselevel+"/"+joblevel+") is looking for a party to join.",0; break; case 3: //Pvp if ($@kewp_advanced == 0) SF_bcPvp $@kebc_pvpCost,@map$,0,0; else { do { set @kmenu, select ( "- Cancel", "- advertise all levels rooms", "- advertise levels "+($@kewp_baseLv1-$@kewp_range)+"-"+($@kewp_baseLv1+$@kewp_range)+" rooms", "- advertise levels "+($@kewp_baseLv2-$@kewp_range)+"-"+($@kewp_baseLv2+$@kewp_range)+" rooms", "- advertise levels "+($@kewp_baseLv3-$@kewp_range)+"-"+($@kewp_baseLv3+$@kewp_range)+" rooms", "- advertise levels "+($@kewp_baseLv4-$@kewp_range)+"-"+($@kewp_baseLv4+$@kewp_range)+" rooms", "- advertise levels "+($@kewp_baseLv5-$@kewp_range)+"-"+($@kewp_baseLv5+$@kewp_range)+" rooms", "- advertise levels "+($@kewp_baseLv6-$@kewp_range)+"-"+($@kewp_baseLv6+$@kewp_range)+" rooms", "- advertise levels "+($@kewp_baseLv7-$@kewp_range)+"-"+($@kewp_baseLv7+$@kewp_range)+" rooms" ); 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$,"(From "+strcharinfo(0)+") ",1; break; case 5: //Anonymous SF_doBroadcast $@kebc_anonCost,@map$,"(Anonymous) ",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 "Broadcast '"+@msg$+"'?"; switch (select( "- Cancel Broadcast", "- Broadcast Message" )) { case 2: if (!(callfunc("F_keCharge",@cost,$@kebc_discount,1))) { callfunc "F_keIntro", e_pif, "You don't have enough Zeny..."; return; } callfunc "F_keIntro", e_what, "Broadcasting..."; 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$, "advertising"; set @lvls$, ""; if (getarg(3)) { if (BaseLevel < getarg(2) || BaseLevel > getarg(3)) { callfunc "F_keIntro", e_bzz, "You can only broadcast requests for PvP rooms you can enter!"; return; } set @msg$,"levels "+getarg(2)+"-"+getarg(3); set @lvls$,"(levels "+getarg(2)+"-"+getarg(3)+") "; } set @pvpcost,getarg(0); switch(select( "- Cancel (PvP Rooms "+@msg$+")", "- advertise 'Room Sandwich'", "- advertise 'Room Rock On'", "- advertise 'Four Room'", "- advertise 'Room Undercross'", "- advertise 'Room Compass'" )) { case 2: //Sandwich SF_doBroadcast @pvpcost,@map$,"The "+jobname(class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Sandwich'!",0; break; case 3: //Rockon SF_doBroadcast @pvpcost,@map$,"The "+jobname(class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Rock On'!",0; break; case 4: //Room Four SF_doBroadcast @pvpcost,@map$,"The "+jobname(class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Four Room'!",0; break; case 5: //Undercross SF_doBroadcast @pvpcost,@map$,"The "+jobname(class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Undercross'!",0; break; case 6: //Compass SF_doBroadcast @pvpcost,@map$,"The "+jobname(class)+" "+strcharinfo(0)+" is looking for PvP challengers "+@lvls$+"in the 'Room Compass'!",0; break; } } //SF_ end }