// TMW2 Script. // Authors: // Jesusalva // Description: // Util functions // Returns Nard reputation for discounts // Currently ranges from 0 to 16. function script nard_reputation { .@nr=0; // Base reputation // Valon Quest (+1 rep) if (getq(CandorQuest_Trainer) >= 14) .@nr=.@nr+1; // Zegas Quest (+1 rep) if (getq(CandorQuest_Barrel) >= 4) .@nr=.@nr+1; // Hide And Seek Quest (+1 rep) if (getq(CandorQuest_HAS) >= 4) .@nr=.@nr+1; // Sailors Quest (+1 rep) if (getq(CandorQuest_Sailors) >= 3) .@nr=.@nr+1; // Sailors Quest, part 2 (+1 rep) if (getq(CandorQuest_SailorCure) >= 3) .@nr=.@nr+1; // Vincent Quest (+1 rep) if (getq(CandorQuest_Vincent) >= 2) .@nr=.@nr+1; // Tolchi Quest (+1 rep) if (getq(CandorQuest_Tolchi) >= 4) .@nr=.@nr+1; // Maya Quest (+1 rep) if (getq(CandorQuest_Maya) >= 4) .@nr=.@nr+1; // Rosen Quest (+1 rep) if (getq(CandorQuest_Rosen) >= 3) .@nr=.@nr+1; // Ship Crew Quests // Dan Quest (+1 rep) if (getq(ShipQuests_Dan) >= 3) .@nr=.@nr+1; // Chef Gado Quest (+1 rep) if (getq(ShipQuests_ChefGado) >= 2) .@nr=.@nr+1; // Peter Quest (+1 rep) if (getq(ShipQuests_Peter) == 3 || getq(ShipQuests_Peter) == 5) .@nr=.@nr+1; // Tulimshar Quests // Swezanne Quest (+1 rep) if (getq(TulimsharQuest_Swezanne) >= 1) .@nr=.@nr+1; // Sailors Quest (+1 rep) if (getq(TulimsharQuest_Sailors) >= 2) .@nr=.@nr+1; // Hasan Quest (+1 rep) if (getq(TulimsharQuest_Hasan) >= 5) .@nr=.@nr+1; // Dausen Quest (+1 rep) if (getq(TulimsharQuest_WaterForGuard) >= 3) .@nr=.@nr+1; //debugmes "Reputation: "+str(.@nr); return .@nr; } // Returns reputation with the La Marine for discounts // Takes one argument (PC_DEST$). Grep for "getarg". function script reputation { .@nr=0; // Base reputation // Tulimshar Quests (14 points) if (getarg(0) == "Tulim") { // Eugene Quest (+1 rep) if (getq(TulimsharQuests_Fishman) >= 2) .@nr=.@nr+1; // Sarah Quest (+1 rep) if (getq(TulimsharQuest_Sarah) >= 1) .@nr=.@nr+1; // Dausen Quest (+1 rep) if (getq(TulimsharQuest_WaterForGuard) >= 3) .@nr=.@nr+1; // Swezanne Quest (+1 rep) if (getq(TulimsharQuest_Swezanne) >= 1) .@nr=.@nr+1; // Silvia Quest (+1 rep) if (getq(TulimsharQuest_Lifestone) >= 2) .@nr=.@nr+1; /* // Eisten Quest (+1 rep) if (getq(TulimsharQuest_Eistein) >= 6) .@nr=.@nr+1; */ // Hasan Quest (+1 rep) if (getq(TulimsharQuest_Hasan) >= 5) .@nr=.@nr+1; // Devoir Quest (+1 rep) if (getq(TulimsharQuest_Devoir) >= 1) .@nr=.@nr+1; // Sailors Quest (+1 rep) if (getq(TulimsharQuest_Sailors) >= 2) .@nr=.@nr+1; // Zarkor Quest (+1 rep) if (getq(TulimsharQuest_DarkInvocator) >= 7) .@nr=.@nr+1; // Anwar Quest (+1 rep) if (getq(TulimsharQuest_AnwarField) >= 10) .@nr=.@nr+1; // Neko Quest (+1 rep) if (getq(TulimsharQuest_Neko) >= 2) .@nr=.@nr+1; // Tycoon Quest (+1 rep) if (getq(MineQuest_Tycoon) >= 15) .@nr=.@nr+1; // Dracoula Quest (+1 rep) if (getq(MineQuest_Dracoula) >= 1) .@nr=.@nr+1; // Caelum Quest (+1 rep) if (getq(MineQuest_Caelum) >= 2) .@nr=.@nr+1; // Hurnscald Quests (5 points) } else if (getarg(0) == "Hurns") { // Alan Quest (+1 rep) if (getq(HurnscaldQuest_ForestBow) >= 2) .@nr=.@nr+1; // Gwendolyn Quest (+1 rep) if (getq(HurnscaldQuest_HarkEye) >= 6) .@nr=.@nr+1; // Celestia Quest (+1 rep) if (getq(HurnscaldQuest_TeaParty) >= 2) .@nr=.@nr+1; // Farmers Quest (+1 rep) if (getq(HurnscaldQuest_Farmers) >= 5) .@nr=.@nr+1; // Helena Quest (+1 rep) if (getq(HurnscaldQuest_Bandits) >= 8) .@nr=.@nr+1; // Land Of Fire Quests (4 points) } else if (getarg(0) == "LoF") { // The EPISODE (+1 rep) if (getq(LoFQuest_EPISODE) >= 6) .@nr=.@nr+1; // George Quest (+1 rep) if (getq(LoFQuest_George) >= 3) .@nr=.@nr+1; // Fairy Quest (+1 rep) if (getq(LoFQuest_Fairy) >= 3) .@nr=.@nr+1; // Pet Detective Quest (+1 rep) if (getq(LoFQuest_Pets) >= 1) .@nr=.@nr+1; // Nivalis Quests (1 points) } else if (getarg(0) == "Nival") { // Nivalis Well Quest (+1 rep) if (getq(NivalisQuest_Well) >= 2) .@nr=.@nr+1; // Final } //debugmes "Reputation: "+str(.@nr); return .@nr; } // Returns time for ship travel. // Can be modified by a factor. function script nard_time { // Estimates time to move by ship from LOCATION$ to getarg(0) // From Candor if (LOCATION$ == "Candor") { if (getarg(0) == "Tulim") return 22000; } // From Tulimshar if (LOCATION$ == "Tulim") { if (getarg(0) == "Candor") return 22000; if (getarg(0) == "Hurns") return 24000; if (getarg(0) == "Nival") return 48000; } // From Hurnscald if (LOCATION$ == "Hurns") { if (getarg(0) == "Candor") return 22000; if (getarg(0) == "Tulim") return 24000; if (getarg(0) == "Nival") return 24000; } // From Nivalis if (LOCATION$ == "Nival") { if (getarg(0) == "Candor") return 46000; if (getarg(0) == "Tulim") return 48000; if (getarg(0) == "Hurns") return 24000; } // Error debugmes "ERROR, INVALID LOCATION AND DESTINATION"; debugmes l("@@ -> @@", LOCATION$, getarg(0)); dispbottom l("An error on your travel time happened. Please report."); return INT_MAX; } // Determines if player is still in range. // eg. // if (reachable(.x, .y, .distance)) { function script reachable { .@x=getarg(0); .@y=getarg(1); .@z=getarg(2); getmapxy(.@mp$, .@xp, .@yp, 0); if (distance(.@x, .@y, .@xp, .@yp) <= .@z) return 1; else return 0; } // Determines if party exp sharing is enabled // ( Party ID ) function script party_expon { .@nb = query_sql("SELECT exp FROM `party` WHERE party_id="+escape_sql(getarg(0))+" LIMIT 2", .@value); return .@value[0]; } // Prepare Mana Stone // mstone( lvl ) function script mstone { // Fill variable .@v=getarg(0); // Determine how much stats you need, this is based on players // and change based on $Global Variables .int=15; .lvl=20; .jlv=15; return ( MAGIC_LVL == .@v && readparam(bInt) >= $MANA_BINT+(.int*.@v) && BaseLevel >= $MANA_BLVL+(.lvl*.@v) && JobLevel >= $MANA_JLVL+(.jlv*.@v) && readparam(Sp) == readparam(MaxSp)); } // Gets how many subclasses were actually filled // total_subclass( ) function script total_subclass { .@i=0; if (MAGIC_SUBCLASS & CL_PALADIN) .@i+=1; if (MAGIC_SUBCLASS & CL_TANKER) .@i+=1; if (MAGIC_SUBCLASS & CL_BERSERKER) .@i+=1; if (MAGIC_SUBCLASS & CL_RANGER) .@i+=1; if (MAGIC_SUBCLASS & CL_SNIPER) .@i+=1; if (MAGIC_SUBCLASS & CL_WIZARD) .@i+=1; if (MAGIC_SUBCLASS & CL_SAGE) .@i+=1; if (MAGIC_SUBCLASS & CL_PRIEST) .@i+=1; return .@i; } // Gets how many subclasses were actually allowed // max_subclass() function script max_subclass { return (MAGIC_LVL/2); } // Gets subclass current degree // degree_subclass() function script degree_subclass { return (MAGIC_LVL/2)+(MAGIC_LVL%2); } // Returns true if a skill can be leveled up, based on degree_subclass(). // sk_canlvup( sk ) function script sk_canlvup { if (getskilllv(getarg(0)) <= degree_subclass()) return 1; return 0; } // Level up a skill in 1 level // sk_lvup( sk ) function script sk_lvup { .@lvl=getskilllv(getarg(0)); getexp 0, 50*(.@lvl+1); addtoskill(getarg(0),.@lvl+1,0); return; } // Returns the intelligence cost based on skill level // sk_intcost( sk ) function script sk_intcost { .@cost=(getskilllv(getarg(0))+1)*17; if (readparam(bInt) >= .@cost) return 1; return 0; } // Returns a value defining your current magic control (affects success ratio, higher is better) // A value of '5' means perfect control, and a value of '0' means overwhelm. // abizit() function script abizit { .@base=(MAGIC_LVL**3); return min(MAGIC_EXP/.@base, 5); } // Returns, based on a 1-5 range, the title for both thief and merc ranks // thiefrank() / mercrank() function script thiefrank { switch (THIEF_RANK) { case 5: return l("Bandit Lord"); case 4: return l("Assassin"); case 3: return l("Rogue"); case 2: return l("Bandit"); case 1: return l("Thief"); default: return l("Error"); } } function script mercrank { switch (MERC_RANK) { case 5: return l("Constable"); case 4: return l("Guardian"); case 3: return l("Merchant"); case 2: return l("Trader"); case 1: return l("Fair Person"); default: return l("Error"); } } // Randomizer functions by gumi ///////////////////////////////////////////// // returns one argument randomly // any( {, ...} ) function script any { return getarg(rand(getargcount())); } // returns any member of the array // any_of( ) function script any_of { return getelementofarray(getarg(0), getarrayindex(getarg(0)) + rand(getarraysize(getarg(0)) - getarrayindex(getarg(0)))); }