mirror of
https://github.com/1dot13/source.git
synced 2026-08-12 14:10:23 +02:00
- New Quest: if Kingpin is unaware Maria escaped with the player's help, he enlists the player to kill the DaSilvas
- Moved civ factions for mod compatibility (UC) Does not break savegame compatibility. Requires GameDir >= r2252. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7889 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -46,6 +46,7 @@
|
||||
#include "PostalService.h"
|
||||
#include "MilitiaSquads.h"
|
||||
#include "PMC.h" // added by Flugente
|
||||
#include "finances.h" // added by Flugente
|
||||
#endif
|
||||
|
||||
#include "connect.h"
|
||||
@@ -524,12 +525,53 @@ BOOLEAN ExecuteStrategicEvent( STRATEGICEVENT *pEvent )
|
||||
case EVENT_PMC_REINFORCEMENT_ARRIVAL:
|
||||
HandlePMCArrival( (UINT8)pEvent->uiParam );
|
||||
break;
|
||||
|
||||
case EVENT_KINGPIN_BOUNTY_INITIAL:
|
||||
if ( gMercProfiles[KINGPIN].bMercStatus != MERC_IS_DEAD && !CheckFact( FACT_KINGPIN_DEAD, NO_PROFILE ) && !CheckFact( FACT_KINGPIN_IS_ENEMY, NO_PROFILE ) )
|
||||
{
|
||||
AddEmail( KINGPIN_BOUNTY_INITIAL, KINGPIN_BOUNTY_INITIAL_LENGTH, KING_PIN, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT );
|
||||
}
|
||||
break;
|
||||
|
||||
case EVENT_KINGPIN_BOUNTY_END_KILLEDTHEM:
|
||||
if ( gMercProfiles[KINGPIN].bMercStatus != MERC_IS_DEAD && !CheckFact( FACT_KINGPIN_DEAD, NO_PROFILE ) && !CheckFact( FACT_KINGPIN_IS_ENEMY, NO_PROFILE ) )
|
||||
{
|
||||
AddEmail( KINGPIN_BOUNTY_KINGPIN_REWARD, KINGPIN_BOUNTY_KINGPIN_REWARD_LENGTH, KING_PIN, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT );
|
||||
|
||||
// also authorise payment from kingpin to the player
|
||||
AddTransactionToPlayersBook( ANONYMOUS_DEPOSIT, 0, GetWorldTotalMin( ), 10000 );
|
||||
}
|
||||
|
||||
// in any case, this quest is now over
|
||||
EndQuest( QUEST_KINGPIN_ANGEL_MARIA, gWorldSectorX, gWorldSectorY );
|
||||
|
||||
break;
|
||||
|
||||
case EVENT_KINGPIN_BOUNTY_END_TIME_PASSED:
|
||||
|
||||
// if we eliminated all bounty hunters and Angel & Maria are still alive, they send us an email
|
||||
if ( gMercProfiles[MARIA].bMercStatus != MERC_IS_DEAD && gMercProfiles[ANGEL].bMercStatus != MERC_IS_DEAD
|
||||
&& CheckFact( FACT_BOUNTYHUNTER_KILLED_1, NO_PROFILE ) && CheckFact( FACT_BOUNTYHUNTER_KILLED_2, NO_PROFILE ) )
|
||||
{
|
||||
AddEmail( KINGPIN_BOUNTY_ANGEL_THANKS, KINGPIN_BOUNTY_ANGEL_THANKS_LENGTH, ANGEL_DASILVA, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT );
|
||||
|
||||
AddEmail( KINGPIN_BOUNTY_TARGET_GOTAWAY, KINGPIN_BOUNTY_TARGET_GOTAWAY_LENGTH, KING_PIN, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT );
|
||||
}
|
||||
// we can assume that the bounty hunters for to them first - Kingpin sends an email and states that someone else finished the job
|
||||
else if ( gMercProfiles[KINGPIN].bMercStatus != MERC_IS_DEAD && !CheckFact( FACT_KINGPIN_DEAD, NO_PROFILE ) && !CheckFact( FACT_KINGPIN_IS_ENEMY, NO_PROFILE ) )
|
||||
{
|
||||
AddEmail( KINGPIN_BOUNTY_BH_GOTTARGET, KINGPIN_BOUNTY_BH_GOTTARGET_LENGTH, KING_PIN, GetWorldTotalMin( ), -1, -1, TYPE_EMAIL_EMAIL_EDT );
|
||||
}
|
||||
|
||||
// in any case, this quest is now over
|
||||
EndQuest( QUEST_KINGPIN_ANGEL_MARIA, gWorldSectorX, gWorldSectorY );
|
||||
|
||||
break;
|
||||
}
|
||||
gfPreventDeletionOfAnyEvent = fOrigPreventFlag;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
#ifdef CRIPPLED_VERSION
|
||||
void CrippledVersionEndGameCheck()
|
||||
{
|
||||
|
||||
@@ -116,6 +116,10 @@ enum
|
||||
EVENT_PMC_EMAIL, // Flugente: pmc will send us an introduction email
|
||||
EVENT_PMC_REINFORCEMENT_ARRIVAL, // Flugente: pmc hired militia arrives
|
||||
|
||||
EVENT_KINGPIN_BOUNTY_INITIAL, // Flugente: a new quest by Kingpin: kill the DaSilvas while fighting off the competition
|
||||
EVENT_KINGPIN_BOUNTY_END_KILLEDTHEM,
|
||||
EVENT_KINGPIN_BOUNTY_END_TIME_PASSED,
|
||||
|
||||
NUMBER_OF_EVENT_TYPES_PLUS_ONE,
|
||||
NUMBER_OF_EVENT_TYPES = NUMBER_OF_EVENT_TYPES_PLUS_ONE - 1
|
||||
};
|
||||
|
||||
@@ -110,7 +110,11 @@ CHAR16 gEventName[NUMBER_OF_EVENT_TYPES_PLUS_ONE][40]={
|
||||
L"HelicopterHoverForAMinute",
|
||||
L"HelicopterRefuelForAMinute",
|
||||
L"MilitiaMovementOrder",
|
||||
L"PMCEmail",
|
||||
L"PMCReinforcementArrival",
|
||||
L"KingpinBounty1",
|
||||
L"KingpinBounty2",
|
||||
L"KingpinBounty3",
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+151
-21
@@ -735,6 +735,9 @@ static int l_GetTimeQuestWasStarted (lua_State *L);
|
||||
static int l_RepairmanIsFixingItemsButNoneAreDoneYet(lua_State *L);
|
||||
|
||||
static int l_SECTOR(lua_State *L);
|
||||
static int l_SECTORX( lua_State *L );
|
||||
static int l_SECTORY( lua_State *L );
|
||||
|
||||
static int l_SectorInfoBloodCats(lua_State *L);
|
||||
|
||||
static int l_SpokenToHeadMiner(lua_State *L);
|
||||
@@ -841,6 +844,11 @@ static int l_ResetBoxers( lua_State *L );
|
||||
|
||||
static int l_AddVolunteers( lua_State *L );
|
||||
|
||||
static int l_CreateArmedCivilain( lua_State *L );
|
||||
|
||||
static int l_GetFact( lua_State *L );
|
||||
static int l_SetFact( lua_State *L );
|
||||
|
||||
using namespace std;
|
||||
|
||||
UINT16 idProfil;
|
||||
@@ -1477,6 +1485,9 @@ void IniFunction(lua_State *L, BOOLEAN bQuests )
|
||||
lua_register(L, "RepairmanIsFixingItemsButNoneAreDoneYet", l_RepairmanIsFixingItemsButNoneAreDoneYet);
|
||||
|
||||
lua_register(L, "SECTOR", l_SECTOR);
|
||||
lua_register(L, "SECTORX", l_SECTORX );
|
||||
lua_register(L, "SECTORY", l_SECTORY );
|
||||
|
||||
lua_register(L, "GetSectorInfoBloodCats", l_SectorInfoBloodCats);
|
||||
|
||||
lua_register(L, "SpokenToHeadMiner", l_SpokenToHeadMiner);
|
||||
@@ -1690,6 +1701,11 @@ void IniFunction(lua_State *L, BOOLEAN bQuests )
|
||||
lua_register(L,"EnvEndRainStorm", l_EnvEndRainStorm);
|
||||
|
||||
lua_register( L, "AddVolunteers", l_AddVolunteers );
|
||||
|
||||
lua_register(L, "CreateArmedCivilain", l_CreateArmedCivilain );
|
||||
|
||||
lua_register(L, "GetFact", l_GetFact );
|
||||
lua_register(L, "SetFact", l_SetFact );
|
||||
}
|
||||
#ifdef NEWMUSIC
|
||||
BOOLEAN LetLuaMusicControl(UINT8 Init)
|
||||
@@ -2578,6 +2594,7 @@ BOOLEAN LuaHandleQuestCodeOnSector( INT16 sSectorX, INT16 sSectorY, INT8 bSector
|
||||
lua_register(_LS.L(), "CheckForMissingHospitalSupplies", l_CheckForMissingHospitalSupplies);
|
||||
lua_register(_LS.L(), "CheckForKingpinsMoneyMissing", l_FunctionCheckForKingpinsMoneyMissing);
|
||||
lua_register(_LS.L(), "SetProfileStrategicInsertionData", l_ProfilesStrategicInsertionData );
|
||||
lua_register(_LS.L(), "CreateArmedCivilain", l_CreateArmedCivilain );
|
||||
IniFunction( _LS.L(), TRUE );
|
||||
IniGlobalGameSetting( _LS.L() );
|
||||
|
||||
@@ -2628,6 +2645,26 @@ void LuaRecruitRPCAdditionalHandling( UINT8 usProfile )
|
||||
LuaFunction( _LS.L, "RecruitRPCAdditionalHandling" ).Param<int>( usProfile ).Call( 1 );
|
||||
}
|
||||
|
||||
void LuaHandleSectorTacticalEntry( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
|
||||
{
|
||||
const char* filename = "scripts\\strategicmap.lua";
|
||||
|
||||
LuaScopeState _LS( true );
|
||||
|
||||
lua_register( _LS.L( ), "CheckFact", l_CheckFact );
|
||||
lua_register( _LS.L( ), "SECTORX", l_SECTORX );
|
||||
lua_register( _LS.L( ), "SECTORY", l_SECTORY );
|
||||
lua_register( _LS.L( ), "SECTOR", l_SECTOR );
|
||||
lua_register( _LS.L( ), "GetFact", l_GetFact );
|
||||
lua_register( _LS.L( ), "SetFact", l_SetFact );
|
||||
IniFunction( _LS.L( ), TRUE );
|
||||
IniGlobalGameSetting( _LS.L( ) );
|
||||
|
||||
SGP_THROW_IFFALSE( _LS.L.EvalFile( filename ), _BS( "Cannot open file: " ) << filename << _BS::cget );
|
||||
|
||||
LuaFunction( _LS.L, "HandleSectorTacticalEntry" ).Param<int>( sSectorX ).Param<int>( sSectorY ).Param<int>( bSectorZ ).Call( 3 );
|
||||
}
|
||||
|
||||
BOOLEAN LetLuaGameInit(UINT8 Init)
|
||||
{
|
||||
const char* filename = "scripts\\GameInit.lua";
|
||||
@@ -2729,6 +2766,7 @@ BOOLEAN LuaInternalQuest( UINT8 ubQuest, INT16 sSectorX, INT16 sSectorY, BOOLEAN
|
||||
|
||||
LuaScopeState _LS(true);
|
||||
|
||||
lua_register( _LS.L( ), "CreateArmedCivilain", l_CreateArmedCivilain );
|
||||
IniFunction( _LS.L(), FALSE );
|
||||
IniGlobalGameSetting( _LS.L() );
|
||||
|
||||
@@ -4416,42 +4454,68 @@ UINT8 TANKS_ILOSC = 0;
|
||||
|
||||
static int l_SECTOR(lua_State *L)
|
||||
{
|
||||
UINT8 n = lua_gettop(L);
|
||||
int i;
|
||||
UINT16 x,y;
|
||||
UINT8 val;
|
||||
UINT8 val = 0;
|
||||
|
||||
for (i= 1; i<=n; i++ )
|
||||
if ( lua_gettop( L ) )
|
||||
{
|
||||
if (i == 1 ) x = lua_tointeger(L,i);
|
||||
if (i == 2 ) y = lua_tointeger(L,i);
|
||||
UINT16 x = lua_tointeger( L, 1 );
|
||||
UINT16 y = lua_tointeger( L, 2 );
|
||||
|
||||
val = SECTOR( x, y );
|
||||
}
|
||||
|
||||
val = SECTOR( x, y );
|
||||
|
||||
|
||||
lua_pushinteger(L, val);
|
||||
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_SECTORX( lua_State *L )
|
||||
{
|
||||
UINT8 val = 0;
|
||||
|
||||
if ( lua_gettop( L ) )
|
||||
{
|
||||
UINT8 sector = lua_tointeger( L, 1 );
|
||||
|
||||
val = SECTORX( sector );
|
||||
}
|
||||
|
||||
lua_pushinteger( L, val );
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_SECTORY( lua_State *L )
|
||||
{
|
||||
UINT8 val = 0;
|
||||
|
||||
if ( lua_gettop( L ) )
|
||||
{
|
||||
UINT8 sector = lua_tointeger( L, 1 );
|
||||
|
||||
val = SECTORY( sector );
|
||||
}
|
||||
|
||||
lua_pushinteger( L, val );
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_CALCULATE_STRATEGIC_INDEX(lua_State *L)
|
||||
{
|
||||
UINT8 n = lua_gettop(L);
|
||||
int i;
|
||||
UINT16 x,y;
|
||||
UINT8 val;
|
||||
UINT8 val = 0;
|
||||
|
||||
for (i= 1; i<=n; i++ )
|
||||
if ( lua_gettop( L ) )
|
||||
{
|
||||
if (i == 1 ) x = lua_tointeger(L,i);
|
||||
if (i == 2 ) y = lua_tointeger(L,i);
|
||||
UINT16 x = lua_tointeger( L, 1 );
|
||||
UINT16 y = lua_tointeger( L, 2 );
|
||||
|
||||
val = CALCULATE_STRATEGIC_INDEX( x, y );
|
||||
}
|
||||
|
||||
val = CALCULATE_STRATEGIC_INDEX( x, y );
|
||||
|
||||
lua_pushinteger(L, val);
|
||||
|
||||
return 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_SectorInfoBloodCats(lua_State *L)
|
||||
@@ -12964,3 +13028,69 @@ static int l_AddVolunteers( lua_State *L )
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_CreateArmedCivilain( lua_State *L )
|
||||
{
|
||||
if ( lua_gettop( L ) )
|
||||
{
|
||||
UINT8 usCivilianGroup = lua_tointeger( L, 1 );
|
||||
UINT8 usSoldierClass = lua_tointeger( L, 2 );
|
||||
INT32 sGridNo = lua_tointeger( L, 3 );
|
||||
BOOLEAN fHostile = lua_tointeger( L, 4 );
|
||||
|
||||
SOLDIERTYPE* pSoldier = TacticalCreateArmedCivilian( usSoldierClass );
|
||||
|
||||
if ( pSoldier )
|
||||
{
|
||||
if ( sGridNo != NOWHERE )
|
||||
{
|
||||
pSoldier->ubStrategicInsertionCode = INSERTION_CODE_GRIDNO;
|
||||
pSoldier->sInsertionGridNo = sGridNo;
|
||||
}
|
||||
|
||||
AddSoldierToSector( pSoldier->ubID );
|
||||
|
||||
// So we can see them!
|
||||
AllTeamsLookForAll( NO_INTERRUPTS );
|
||||
|
||||
// set correct civ group
|
||||
if ( usCivilianGroup )
|
||||
{
|
||||
pSoldier->ubCivilianGroup = usCivilianGroup;
|
||||
|
||||
if ( fHostile )
|
||||
gTacticalStatus.fCivGroupHostile[pSoldier->ubCivilianGroup] = CIV_GROUP_WILL_BECOME_HOSTILE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_GetFact( lua_State *L )
|
||||
{
|
||||
UINT8 val = 0;
|
||||
|
||||
if ( lua_gettop( L ) )
|
||||
{
|
||||
UINT16 fact = lua_tointeger( L, 1 );
|
||||
|
||||
val = GetFact( fact );
|
||||
}
|
||||
|
||||
lua_pushinteger( L, val );
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_SetFact( lua_State *L )
|
||||
{
|
||||
if ( lua_gettop( L ) )
|
||||
{
|
||||
UINT16 fact = lua_tointeger( L, 1 );
|
||||
UINT8 val = lua_tointeger( L, 2 );
|
||||
|
||||
SetFact( fact, val );
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -61,6 +61,7 @@ extern BOOLEAN LuaHandleQuestCodeOnSector( INT16 sSectorX, INT16 sSectorY, INT8
|
||||
|
||||
void LuaHandleSectorLiberation( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, BOOLEAN fFirstTime );
|
||||
void LuaRecruitRPCAdditionalHandling( UINT8 usProfile );
|
||||
void LuaHandleSectorTacticalEntry( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ );
|
||||
|
||||
extern BOOLEAN LuaHandleDelayedItemsArrival( UINT32 uiReason, UINT8 Init);
|
||||
extern BOOLEAN LetLuaHandleNPCSystemEvent( UINT32 uiEvent, UINT8 Init);
|
||||
|
||||
@@ -1366,6 +1366,17 @@ BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID )
|
||||
return( gubFact[usFact] );
|
||||
}
|
||||
|
||||
void SetFact( UINT16 usFact, UINT8 aVal )
|
||||
{
|
||||
if ( usFact < NUM_FACTS )
|
||||
gubFact[usFact] = aVal;
|
||||
}
|
||||
|
||||
UINT8 GetFact( UINT16 usFact )
|
||||
{
|
||||
return gubFact[usFact];
|
||||
}
|
||||
|
||||
void StartQuest( UINT8 ubQuest, INT16 sSectorX, INT16 sSectorY )
|
||||
{
|
||||
InternalStartQuest( ubQuest, sSectorX, sSectorY, TRUE );
|
||||
|
||||
+13
-3
@@ -78,6 +78,8 @@ enum Quests
|
||||
QUEST_23 = 23,
|
||||
QUEST_24 = 24,
|
||||
QUEST_KILL_DEIDRANNA = 25,
|
||||
|
||||
QUEST_KINGPIN_ANGEL_MARIA, // Flugente: new quest: if the palyer rescued Maria without implicating himself, Kingpin hires bounty hunters to kill them
|
||||
#endif
|
||||
} ;
|
||||
/*
|
||||
@@ -559,6 +561,11 @@ enum Facts
|
||||
FACT_DISEASE_WHODATA_SUBSCRIBED, // if we are currently subscripted, we will pay x$ per day
|
||||
FACT_DISEASE_WHODATA_ACCESS, // do we currently have access to the data
|
||||
|
||||
// Flugente: Kingpin bounty hunter quest
|
||||
FACT_BOUNTYHUNTER_SECTOR_1,
|
||||
FACT_BOUNTYHUNTER_SECTOR_2,
|
||||
FACT_BOUNTYHUNTER_KILLED_1,
|
||||
FACT_BOUNTYHUNTER_KILLED_2,
|
||||
|
||||
#ifdef JA2UB
|
||||
//Ja25 UB
|
||||
@@ -617,9 +624,12 @@ enum Facts
|
||||
extern UINT8 gubQuest[MAX_QUESTS];
|
||||
extern UINT8 gubFact[NUM_FACTS];
|
||||
|
||||
extern void SetFactTrue( UINT16 usFact );
|
||||
extern void SetFactFalse( UINT16 usFact );
|
||||
extern BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID );
|
||||
void SetFactTrue( UINT16 usFact );
|
||||
void SetFactFalse( UINT16 usFact );
|
||||
BOOLEAN CheckFact( UINT16 usFact, UINT8 ubProfileID );
|
||||
|
||||
void SetFact( UINT16 usFact, UINT8 aVal );
|
||||
UINT8 GetFact( UINT16 usFact );
|
||||
|
||||
extern void StartQuest( UINT8 ubQuest, INT16 sSectorX, INT16 sSectorY );
|
||||
extern void EndQuest( UINT8 ubQuest, INT16 sSectorX, INT16 sSectorY );
|
||||
|
||||
Reference in New Issue
Block a user