Mod Обработка эвентов map в скриптовом классе.

Автор темы #1
Дата рег
19 Фев 2011
Сообщения
197
Симпатии
72
Аналогично этому моду: http://fonline.ru/forum/threads/4645/ но для класса Map

Код:
EXPORT void ExpansionMapInit( Map& map, bool first, ScriptString& className, bool autoEvent = true );
EXPORT void ExpansionMapFinish(Map& map, bool deleted);
// MAP_EVENT_LOOP_X, где X от 0 до 4
EXPORT void ExpansionMapLoop0( Map& map );
EXPORT void ExpansionMapLoop1( Map& map );
EXPORT void ExpansionMapLoop2( Map& map );
EXPORT void ExpansionMapLoop3( Map& map );
EXPORT void ExpansionMapLoop4( Map& map );
// MAP_EVENT_IN_CRITTER
EXPORT void ExpansionMapInCritter( Map& map, Critter& cr );
// MAP_EVENT_OUT_CRITTER
EXPORT void ExpansionMapOutCritter( Map& map, Critter& cr );
// MAP_EVENT_CRITTER_DEAD
EXPORT void ExpansionMapCritterDead( Map& map, Critter& cr, Critter* killer );
// MAP_EVENT_TURN_BASED_BEGIN
EXPORT void ExpansionMapTurnBasedBegin( Map& map );
// MAP_EVENT_TURN_BASED_END
EXPORT void ExpansionMapTurnBasedEnd( Map& map );
// MAP_EVENT_TURN_BASED_PROCESS
EXPORT void ExpansionMapTurnBasedProccess( Map& map, Critter& cr, bool beginTurn);
 
EXPORT int ExpansionMapRunScript( Map& map, ScriptString& funcName, int& p0, int& p1, int& p2 );
EXPORT int ExpansionMapRunScriptArray( Map& map, ScriptString& funcName, ScriptArray& p0 );

Код:
#pragma bindfunc "void Map::ExpansionInit( bool first, string&in className ) -> expasion_map.dll ExpansionMapInit"
#pragma bindfunc "int Map::ExpansionRunScript( string& funcName, int& p0, int& p1, int& p2 ) -> expasion_map.dll ExpansionMapRunScript"
#pragma bindfunc "int Map::ExpansionRunScript( string& funcName, array& arr ) -> expasion_map.dll ExpansionMapRunScriptArray"
void TestExpasionMapInit( Map& map, bool first )
{
map.ExpansionInit( first, "ExampleRainMap" );
}
void TestExpasionMap( Critter& cr, int, int, int )
{
cr.GetMap().SetScript( "TestExpasionMapInit" );
}
// TestChangeMapParam
void TestChangeRainParam( Critter& cr, int p0, int p1, int p2 )
{
cr.GetMap().ExpansionRunScript( "bool ChangeRainParam( Map& map, int&, int&, int& )", p0, p1, p2 );
}
class ExampleRainMap
{
void Init( Map& map, bool )
{
RainTime= 60;
map.SetLoopTime ( 0, 1000 );
@_map = map;
Rain = 255;
}
 
void Loop0( Map& map )
{
Log( "Loop"+RainTime );
if( --RainTime == 0 )
{
map.SetRain( 0 );
map.SetEvent( MAP_EVENT_LOOP_0, "" );
}
}
 
bool ChangeRainParam( Map& map, int& newTime, int& newLoop, int& newRain )
{
if( newTime > 0 )
{
if( RainTime == 0 )
{
map.SetEvent( MAP_EVENT_LOOP_0, "expasion_map.dll@ExpansionMapLoop0");
map.SetRain( Rain );
}
RainTime = newTime;
}
if( newLoop > 0 )
map.SetLoopTime( 0, newLoop );
if( newRain > 0 )
Rain = newRain;
 
return true;
}
 
uint8 Rain
{
get
{
return _Rain;
}
 
set
{
_Rain = value;
_map.SetRain( _Rain );
}
}
 
private uint8 _Rain;
Map@ _map;
uint RainTime;
}
 

Вложения

Последнее редактирование: