- Try to get rid of all implicit casts from string to name, color or class. - Use FindClass where needed. - Used a map in a case where a dictionary was unneeded. - Use new bounce flags where needed. - Replace Legacy of Rust weapons/ammo.
88 lines
3 KiB
Text
88 lines
3 KiB
Text
// achievement helpers
|
|
|
|
extend class SWWMUtility
|
|
{
|
|
static void MarkAchievement( String mvar, PlayerInfo p = null )
|
|
{
|
|
if ( !p || (p != players[consoleplayer]) ) return;
|
|
let hnd = SWWMStaticHandler(StaticEventHandler.Find('SWWMStaticHandler'));
|
|
if ( !hnd ) return;
|
|
String val = hnd.achievementstate.At(mvar);
|
|
if ( val == "" )
|
|
{
|
|
if ( developer >= 2 ) Console.Printf("MarkAchievement: achievement '"..mvar.."' not found");
|
|
return;
|
|
}
|
|
if ( val == "2" ) return;
|
|
hnd.achievementstate.Insert(mvar,"1");
|
|
}
|
|
static int GetAchievementProgress( String pvar, PlayerInfo p = null )
|
|
{
|
|
if ( !p || (p != players[consoleplayer]) ) return 0;
|
|
let hnd = SWWMStaticHandler(StaticEventHandler.Find('SWWMStaticHandler'));
|
|
if ( !hnd ) return 0;
|
|
String pval = hnd.achievementprogress.At(pvar);
|
|
if ( pval == "" )
|
|
{
|
|
if ( developer >= 2 ) Console.Printf("GetAchievementProgress: achievement '"..pvar.."' not found");
|
|
return 0;
|
|
}
|
|
return pval.ToInt();
|
|
}
|
|
static void AchievementProgress( String pvar, int val, PlayerInfo p = null )
|
|
{
|
|
if ( !p || (p != players[consoleplayer]) ) return;
|
|
let hnd = SWWMStaticHandler(StaticEventHandler.Find('SWWMStaticHandler'));
|
|
if ( !hnd ) return;
|
|
String pval = hnd.achievementprogress.At(pvar);
|
|
if ( pval == "" )
|
|
{
|
|
if ( developer >= 2 ) Console.Printf("AchievementProgress: achievement '"..pvar.."' not found");
|
|
return;
|
|
}
|
|
if ( val <= pval.ToInt() ) return;
|
|
hnd.achievementprogress.Insert(pvar,String.Format("%d",val));
|
|
}
|
|
static void AchievementProgressInc( String pvar, int inc, PlayerInfo p = null )
|
|
{
|
|
if ( !p || (p != players[consoleplayer]) ) return;
|
|
let hnd = SWWMStaticHandler(StaticEventHandler.Find('SWWMStaticHandler'));
|
|
if ( !hnd ) return;
|
|
String pval = hnd.achievementprogress.At(pvar);
|
|
if ( pval == "" )
|
|
{
|
|
if ( developer >= 2 ) Console.Printf("AchievementProgressInc: achievement '"..pvar.."' not found");
|
|
return;
|
|
}
|
|
hnd.achievementprogress.Insert(pvar,String.Format("%d",pval.ToInt()+inc));
|
|
}
|
|
static void AchievementProgressIncDouble( String pvar, double inc, PlayerInfo p = null )
|
|
{
|
|
if ( !p || (p != players[consoleplayer]) ) return;
|
|
let hnd = SWWMStaticHandler(StaticEventHandler.Find('SWWMStaticHandler'));
|
|
if ( !hnd ) return;
|
|
String pval = hnd.achievementprogress.At(pvar);
|
|
if ( pval == "" )
|
|
{
|
|
if ( developer >= 2 ) Console.Printf("AchievementProgressIncDOuble: achievement '"..pvar.."' not found");
|
|
return;
|
|
}
|
|
if ( pval ~== "NaN" ) // this can happen, yup
|
|
pval = "0";
|
|
hnd.achievementprogress.Insert(pvar,String.Format("%g",pval.ToDouble()+inc));
|
|
}
|
|
// for bitfields
|
|
static void AchievementProgressOr( String pvar, int val, PlayerInfo p = null )
|
|
{
|
|
if ( !p || (p != players[consoleplayer]) ) return;
|
|
let hnd = SWWMStaticHandler(StaticEventHandler.Find('SWWMStaticHandler'));
|
|
if ( !hnd ) return;
|
|
String pval = hnd.achievementprogress.At(pvar);
|
|
if ( pval == "" )
|
|
{
|
|
if ( developer >= 2 ) Console.Printf("AchievementProgressOr: achievement '"..pvar.."' not found");
|
|
return;
|
|
}
|
|
hnd.achievementprogress.Insert(pvar,String.Format("%d",pval.ToInt()|val));
|
|
}
|
|
}
|