392 lines
7.0 KiB
Objective-C
392 lines
7.0 KiB
Objective-C
#pragma once
|
|
|
|
#include "EqExpr.h"
|
|
#include <toolkit/nsl.h>
|
|
#include "SStringDB.h"
|
|
#include "StringDBHelper.h" /// 2011.03.22 - prodongi
|
|
|
|
namespace rp {
|
|
|
|
// template namespace
|
|
template< typename numeric_t >
|
|
struct expr_functions : public expr< numeric_t >
|
|
{
|
|
/**
|
|
@class Replace
|
|
@brief 사용: rep( A, '1', B, '2', C )
|
|
@warning 설명: 문자열 A 에서 1 -> B, 2 -> C 로 치환한다.
|
|
*/
|
|
class Replace : public Function
|
|
{
|
|
public:
|
|
virtual IExpressionPtr create()
|
|
{
|
|
return new Replace();
|
|
}
|
|
virtual void push_back( IExpressionPtr expr )
|
|
{
|
|
while( !expr->empty() )
|
|
{
|
|
IExpressionPtr arg = expr->back();
|
|
expr->pop_back();
|
|
mArgs.push_back( arg );
|
|
}
|
|
}
|
|
virtual numeric_t toNumber() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return 0.f;
|
|
|
|
return (float)::atof( toString().c_str() );
|
|
}
|
|
virtual std::string toString() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return "";
|
|
|
|
unsigned int argCount = (unsigned int)mArgs.size();
|
|
|
|
std::string buffer = mArgs[ 0 ]->toString();
|
|
|
|
if( argCount > 1 )
|
|
{
|
|
ArgContainer::const_iterator it = mArgs.begin() + 1, end = mArgs.end();
|
|
while( it != end )
|
|
{
|
|
std::string source( (*it)->toString() );
|
|
std::string dest;
|
|
++it;
|
|
if( it != end )
|
|
{
|
|
dest = (*it)->toString();
|
|
++it;
|
|
}
|
|
nsl::replace( buffer, source, dest );
|
|
}
|
|
}
|
|
|
|
return buffer;
|
|
}
|
|
};
|
|
|
|
/**
|
|
@class StringDb
|
|
@brief 사용: $1005 or $(1000+x) 등등
|
|
@warning 설명: 스트링 DB 에서 1005 번을 찾아 문자열로 치환한다.
|
|
*/
|
|
class StringDb : public Function
|
|
{
|
|
public:
|
|
virtual IExpressionPtr create()
|
|
{
|
|
return new StringDb();
|
|
}
|
|
virtual numeric_t toNumber() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return 0.f;
|
|
|
|
int id = mArgs[ 0 ]->toNumber();
|
|
|
|
return ::atof( GetStringDB().GetString( id ) );
|
|
}
|
|
virtual std::string toString() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return "";
|
|
|
|
int id = mArgs[ 0 ]->toNumber();
|
|
|
|
return GetStringDB().GetString( id );
|
|
}
|
|
};
|
|
|
|
/// TenacityDb_NameId
|
|
class TenacityDb_NameId : public Function
|
|
{
|
|
public:
|
|
virtual IExpressionPtr create()
|
|
{
|
|
return new TenacityDb_NameId();
|
|
}
|
|
virtual numeric_t toNumber() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return 0.f;
|
|
|
|
int id = mArgs[ 0 ]->toNumber();
|
|
return GetTenacityDB().GetNameID( id );
|
|
}
|
|
virtual std::string toString() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return "";
|
|
|
|
int id = mArgs[ 0 ]->toNumber();
|
|
|
|
std::string nameId;
|
|
ntos( (int)GetTenacityDB().GetNameID( id ), nameId );
|
|
|
|
return nameId;
|
|
}
|
|
};
|
|
|
|
/// 2011.04.27 SkillDb_NameId - prodongi
|
|
class SkillDb_NameId : public Function
|
|
{
|
|
public:
|
|
virtual IExpressionPtr create()
|
|
{
|
|
return new SkillDb_NameId();
|
|
}
|
|
virtual numeric_t toNumber() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return 0.f;
|
|
|
|
int id = mArgs[ 0 ]->toNumber();
|
|
return GetSkillDB().GetStringID(id);
|
|
}
|
|
virtual std::string toString() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return "";
|
|
|
|
int id = mArgs[ 0 ]->toNumber();
|
|
|
|
std::string nameId;
|
|
ntos( (int)GetSkillDB().GetStringID( id ), nameId );
|
|
|
|
return nameId;
|
|
}
|
|
};
|
|
|
|
/// ItemDb_Item
|
|
class ItemDb_Item : public Function
|
|
{
|
|
public:
|
|
virtual IExpressionPtr create()
|
|
{
|
|
return new ItemDb_Item();
|
|
}
|
|
virtual numeric_t toNumber() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return 0.f;
|
|
|
|
int id = (int)mArgs[ 0 ]->toNumber();
|
|
|
|
return (int)GetItemDB().GetItemData( id );
|
|
}
|
|
virtual std::string toString() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return "";
|
|
|
|
int id = (int)mArgs[ 0 ]->toNumber();
|
|
|
|
std::string itemInstance;
|
|
ntos( (int)GetItemDB().GetItemData( id ), itemInstance );
|
|
|
|
return itemInstance;
|
|
}
|
|
};
|
|
|
|
/// ItemDb_NameId
|
|
class ItemDb_NameId : public Function
|
|
{
|
|
public:
|
|
virtual IExpressionPtr create()
|
|
{
|
|
return new ItemDb_NameId();
|
|
}
|
|
virtual numeric_t toNumber() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return 0.f;
|
|
|
|
int id = (int)mArgs[ 0 ]->toNumber();
|
|
|
|
const ItemBaseEx_info* item = GetItemDB().GetItemData( id );
|
|
|
|
if( !item )
|
|
return 0.f;
|
|
|
|
return (int)item->nNameId;
|
|
}
|
|
virtual std::string toString() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return "";
|
|
|
|
int id = (int)mArgs[ 0 ]->toNumber();
|
|
|
|
const ItemBaseEx_info* item = GetItemDB().GetItemData( id );
|
|
|
|
if( !item )
|
|
return "";
|
|
|
|
std::string nameId;
|
|
ntos( (int)item->nNameId, nameId );
|
|
|
|
return nameId;
|
|
}
|
|
};
|
|
|
|
/// 2011.03.17 - prodongi
|
|
class RaceName : public Function
|
|
{
|
|
public:
|
|
virtual IExpressionPtr create()
|
|
{
|
|
return new RaceName();
|
|
}
|
|
virtual numeric_t toNumber() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return 0.f;
|
|
|
|
int id = (int)mArgs[ 0 ]->toNumber();
|
|
|
|
return id;
|
|
}
|
|
virtual std::string toString() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return "";
|
|
|
|
int id = (int)mArgs[ 0 ]->toNumber();
|
|
|
|
std::string name;
|
|
int stringId = 0;
|
|
if (8 == id)
|
|
{
|
|
name = GetStringDB().GetString(8034);
|
|
}
|
|
else
|
|
{
|
|
if (1 & id) name += GetStringDB().GetString(3);
|
|
if (2 & id) name += GetStringDB().GetString(2);
|
|
if (4 & id) name += GetStringDB().GetString(1);
|
|
}
|
|
|
|
return name;
|
|
}
|
|
};
|
|
|
|
/// 2011.03.17 - prodongi
|
|
class AttributeName : public Function
|
|
{
|
|
public:
|
|
virtual IExpressionPtr create()
|
|
{
|
|
return new AttributeName();
|
|
}
|
|
virtual numeric_t toNumber() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return 0.f;
|
|
|
|
int id = (int)mArgs[ 0 ]->toNumber();
|
|
|
|
return id;
|
|
}
|
|
virtual std::string toString() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return "";
|
|
|
|
int id = (int)mArgs[ 0 ]->toNumber();
|
|
return StringDBHelper::getDmgAttriName(id);
|
|
}
|
|
};
|
|
|
|
/// 2011.03.18 계열 이름 - prodongi
|
|
class DescentName : public Function
|
|
{
|
|
public:
|
|
virtual IExpressionPtr create()
|
|
{
|
|
return new DescentName();
|
|
}
|
|
virtual numeric_t toNumber() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return 0.f;
|
|
|
|
int id = (int)mArgs[ 0 ]->toNumber();
|
|
|
|
return id;
|
|
}
|
|
virtual std::string toString() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return "";
|
|
|
|
int id = (int)mArgs[ 0 ]->toNumber();
|
|
return StringDBHelper::getDescentName(id);
|
|
}
|
|
};
|
|
|
|
/// 2011.03.18 비트 셋 이름 - prodongi
|
|
class BitSetNameA : public Function
|
|
{
|
|
public:
|
|
virtual IExpressionPtr create()
|
|
{
|
|
return new BitSetNameA();
|
|
}
|
|
virtual numeric_t toNumber() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return 0.f;
|
|
|
|
int id = (int)mArgs[ 0 ]->toNumber();
|
|
|
|
return id;
|
|
}
|
|
virtual std::string toString() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return "";
|
|
|
|
unsigned int BitsetID = (int)mArgs[ 0 ]->toNumber();
|
|
std::string str;
|
|
StringDBHelper::getBitSetANameList(BitsetID, ", ", str);
|
|
|
|
return str;
|
|
}
|
|
};
|
|
|
|
/// 2011.04.12 비트 셋 이름 - prodongi
|
|
class BitSetNameB : public Function
|
|
{
|
|
public:
|
|
virtual IExpressionPtr create()
|
|
{
|
|
return new BitSetNameB();
|
|
}
|
|
virtual numeric_t toNumber() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return 0.f;
|
|
|
|
int id = (int)mArgs[ 0 ]->toNumber();
|
|
|
|
return id;
|
|
}
|
|
virtual std::string toString() const
|
|
{
|
|
if( mArgs.empty() )
|
|
return "";
|
|
|
|
unsigned int BitsetID = (int)mArgs[ 0 ]->toNumber();
|
|
std::string str;
|
|
StringDBHelper::getBitSetBNameList(BitsetID, ", ", str);
|
|
|
|
return str;
|
|
}
|
|
};
|
|
}; // expr_functions
|
|
|
|
} // rp |