mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +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) git-svn-id: https://ja2svn.mooo.com/source/ja2_v1.13_data@2252 4f8fa57e-7814-0410-bad4-adc449f26b7c
This commit is contained in:
@@ -33,6 +33,7 @@ nQuests =
|
||||
QUEST_23 = 23, -- Start quest 46, End quest 47
|
||||
QUEST_24 = 24, -- Start quest 48, End quest 49
|
||||
QUEST_KILL_DEIDRANNA = 25, -- Start quest 50, End quest 51
|
||||
QUEST_KINGPIN_ANGEL_MARIA = 26,
|
||||
|
||||
-- max Quests 254
|
||||
}
|
||||
@@ -47,6 +48,9 @@ Profiles =
|
||||
{
|
||||
DYNAMO = 66,
|
||||
CARMEN = 78,
|
||||
KINGPIN = 86,
|
||||
MARIA = 88,
|
||||
ANGEL = 89,
|
||||
MADAME = 107,
|
||||
}
|
||||
|
||||
@@ -55,23 +59,37 @@ nHistory = {
|
||||
HISTORY_QUEST_FINISHED = 16,
|
||||
}
|
||||
|
||||
nFacts = {
|
||||
Facts = {
|
||||
|
||||
FACT_MARIA_ESCAPE_NOTICED = 119,
|
||||
FACT_ESTONI_REFUELLING_POSSIBLE = 277,
|
||||
FACT_KINGPIN_DEAD = 308,
|
||||
FACT_KINGPIN_IS_ENEMY = 359,
|
||||
FACT_BOUNTYHUNTER_SECTOR_1 = 380,
|
||||
FACT_BOUNTYHUNTER_SECTOR_2 = 381,
|
||||
FACT_BOUNTYHUNTER_KILLED_1 = 382,
|
||||
FACT_BOUNTYHUNTER_KILLED_2 = 383,
|
||||
}
|
||||
|
||||
nEvents = {
|
||||
EVENT_KINGPIN_BOUNTY_INITIAL = 85,
|
||||
EVENT_KINGPIN_BOUNTY_END_KILLEDTHEM = 86,
|
||||
EVENT_KINGPIN_BOUNTY_END_TIME_PASSED = 87,
|
||||
}
|
||||
|
||||
local NO_PROFILE = 200
|
||||
|
||||
function InternalStartQuest( ubQuest, sSectorX, sSectorY, fUpdateHistory )
|
||||
|
||||
if ( CheckQuest(ubQuest) == qStatus.QUESTNOTSTARTED ) then
|
||||
if ( CheckQuest(ubQuest) == qStatus.QUESTNOTSTARTED ) then
|
||||
|
||||
SetQuest( ubQuest, qStatus.QUESTINPROGRESS )
|
||||
if ( fUpdateHistory == true) then
|
||||
if ( is_networked == 0 ) then
|
||||
SetHistoryFact( nHistory.HISTORY_QUEST_STARTED, ubQuest, GetWorldTotalMin(), sSectorX, sSectorY )
|
||||
end
|
||||
end
|
||||
|
||||
if ( fUpdateHistory == true) then
|
||||
if ( is_networked == 0 ) then
|
||||
SetHistoryFact( nHistory.HISTORY_QUEST_STARTED, ubQuest, GetWorldTotalMin(), sSectorX, sSectorY )
|
||||
end
|
||||
end
|
||||
else
|
||||
SetQuest( ubQuest, qStatus.QUESTINPROGRESS )
|
||||
end
|
||||
@@ -167,7 +185,131 @@ function InternalEndQuest( ubQuest, sSectorX, sSectorY, fUpdateHistory )
|
||||
-- still in the brothel with Maria...
|
||||
SetNPCData1(Profiles.MADAME, 0)
|
||||
SetNPCData2(Profiles.MADAME, 0)
|
||||
|
||||
-- if the escape was not noticed, initiate 'bounty hunter' quest. Set a timer, at some point in the future, if we aren't hostile to him etc.,
|
||||
if ( (CheckFact( Facts.FACT_MARIA_ESCAPE_NOTICED, 0 ) == false) and (CheckFact( Facts.FACT_KINGPIN_DEAD, 0 ) == false) and
|
||||
(CheckFact( Facts.FACT_KINGPIN_IS_ENEMY, 0 ) == false) and (CheckMercIsDead ( Profiles.KINGPIN ) == false) ) then
|
||||
|
||||
-- start the quest
|
||||
StartQuest( nQuests.QUEST_KINGPIN_ANGEL_MARIA, sSectorX, sSectorY )
|
||||
|
||||
-- set email from kingpin with a small delay
|
||||
-- also set up the end of the quest in 7 days
|
||||
AddFutureDayStrategicEvent(nEvents.EVENT_KINGPIN_BOUNTY_INITIAL, 120, 0, 0)
|
||||
AddFutureDayStrategicEvent(nEvents.EVENT_KINGPIN_BOUNTY_END_TIME_PASSED, 120, 0, 7)
|
||||
|
||||
-- the silva siblings are placed in one of several sectors and hide there for a week
|
||||
-- possible sectors: a11, b5, b6, b8, b12, b14, c3, d7
|
||||
-- two groups of bounty hunters are hunting them and will be placed in those sectors (but not in the sector the DaSilvas are in)
|
||||
-- if the player kills off all bounty hunters, the Silvas can escape after one week
|
||||
|
||||
-- select location randomly
|
||||
local sector_silva = math.random(1, 8)
|
||||
local sector_hunter1 = math.random(1, 8)
|
||||
local sector_hunter2 = math.random(1, 8)
|
||||
|
||||
-- we have to make sure no sector is picked twice
|
||||
while (sector_silva == sector_hunter1) do
|
||||
sector_hunter1 = math.random(1, 8)
|
||||
end
|
||||
|
||||
while (sector_silva == sector_hunter2 or sector_hunter1 == sector_hunter2) do
|
||||
sector_hunter2 = math.random(1, 8)
|
||||
end
|
||||
|
||||
if sector_silva == 1 then
|
||||
-- A11
|
||||
AddNPCtoSector (Profiles.MARIA,11,1,0)
|
||||
AddNPCtoSector (Profiles.ANGEL,11,1,0)
|
||||
SetProfileStrategicInsertionData(Profiles.MARIA, 11245)
|
||||
SetProfileStrategicInsertionData(Profiles.ANGEL, 10765)
|
||||
elseif sector_silva == 2 then
|
||||
-- B5
|
||||
AddNPCtoSector (Profiles.MARIA,5,2,0)
|
||||
AddNPCtoSector (Profiles.ANGEL,5,2,0)
|
||||
SetProfileStrategicInsertionData(Profiles.MARIA, 9050)
|
||||
SetProfileStrategicInsertionData(Profiles.ANGEL, 8088)
|
||||
elseif sector_silva == 3 then
|
||||
-- B6
|
||||
AddNPCtoSector (Profiles.MARIA,6,2,0)
|
||||
AddNPCtoSector (Profiles.ANGEL,6,2,0)
|
||||
SetProfileStrategicInsertionData(Profiles.MARIA, 15585)
|
||||
SetProfileStrategicInsertionData(Profiles.ANGEL, 15906)
|
||||
elseif sector_silva == 4 then
|
||||
-- B8
|
||||
AddNPCtoSector (Profiles.MARIA,8,2,0)
|
||||
AddNPCtoSector (Profiles.ANGEL,8,2,0)
|
||||
SetProfileStrategicInsertionData(Profiles.MARIA, 7092)
|
||||
SetProfileStrategicInsertionData(Profiles.ANGEL, 7089)
|
||||
elseif sector_silva == 5 then
|
||||
-- B12
|
||||
AddNPCtoSector (Profiles.MARIA,12,2,0)
|
||||
AddNPCtoSector (Profiles.ANGEL,12,2,0)
|
||||
SetProfileStrategicInsertionData(Profiles.MARIA, 4870)
|
||||
SetProfileStrategicInsertionData(Profiles.ANGEL, 4557)
|
||||
elseif sector_silva == 6 then
|
||||
-- B14
|
||||
AddNPCtoSector (Profiles.MARIA,14,2,0)
|
||||
AddNPCtoSector (Profiles.ANGEL,14,2,0)
|
||||
SetProfileStrategicInsertionData(Profiles.MARIA, 16685)
|
||||
SetProfileStrategicInsertionData(Profiles.ANGEL, 16045)
|
||||
elseif sector_silva == 7 then
|
||||
-- C3
|
||||
AddNPCtoSector (Profiles.MARIA,3,3,0)
|
||||
AddNPCtoSector (Profiles.ANGEL,3,3,0)
|
||||
SetProfileStrategicInsertionData(Profiles.MARIA, 12345)
|
||||
SetProfileStrategicInsertionData(Profiles.ANGEL, 12338)
|
||||
elseif sector_silva == 8 then
|
||||
-- D7
|
||||
AddNPCtoSector (Profiles.MARIA,7,4,0)
|
||||
AddNPCtoSector (Profiles.ANGEL,7,4,0)
|
||||
SetProfileStrategicInsertionData(Profiles.MARIA, 19133)
|
||||
SetProfileStrategicInsertionData(Profiles.ANGEL, 19766)
|
||||
end
|
||||
|
||||
if sector_hunter1 == 1 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_1, SECTOR(11, 1) )
|
||||
elseif sector_hunter1 == 2 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_1, SECTOR(5, 2) )
|
||||
elseif sector_hunter1 == 3 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_1, SECTOR(6, 2) )
|
||||
elseif sector_hunter1 == 4 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_1, SECTOR(8, 2) )
|
||||
elseif sector_hunter1 == 5 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_1, SECTOR(12, 2) )
|
||||
elseif sector_hunter1 == 6 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_1, SECTOR(14, 2) )
|
||||
elseif sector_hunter1 == 7 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_1, SECTOR(3, 3) )
|
||||
elseif sector_hunter1 == 8 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_1, SECTOR(7, 4) )
|
||||
end
|
||||
|
||||
if sector_hunter2 == 1 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_2, SECTOR(11, 1) )
|
||||
elseif sector_hunter2 == 2 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_2, SECTOR(5, 2) )
|
||||
elseif sector_hunter2 == 3 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_2, SECTOR(6, 2) )
|
||||
elseif sector_hunter2 == 4 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_2, SECTOR(8, 2) )
|
||||
elseif sector_hunter2 == 5 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_2, SECTOR(12, 2) )
|
||||
elseif sector_hunter2 == 6 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_2, SECTOR(14, 2) )
|
||||
elseif sector_hunter2 == 7 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_2, SECTOR(3, 3) )
|
||||
elseif sector_hunter2 == 8 then
|
||||
SetFact(Facts.FACT_BOUNTYHUNTER_SECTOR_2, SECTOR(7, 4) )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
if ( ubQuest == nQuests.QUEST_KINGPIN_ANGEL_MARIA ) then
|
||||
-- once this quest is over, make sure Maria and Angel are gone
|
||||
SetCharacterSectorX(Profiles.MARIA, 0)
|
||||
SetCharacterSectorY(Profiles.MARIA, 0)
|
||||
SetCharacterSectorX(Profiles.ANGEL, 0)
|
||||
SetCharacterSectorY(Profiles.ANGEL, 0)
|
||||
end
|
||||
end
|
||||
@@ -68,6 +68,7 @@ Quests =
|
||||
QUEST_23 = 23, -- Start quest 46, End quest 47 - No 23 Yet
|
||||
QUEST_24 = 24, -- Start quest 48, End quest 49 - No 24 Yet
|
||||
QUEST_KILL_DEIDRANNA = 25, -- Start quest 50, End quest 51 - Kill Deidranna
|
||||
QUEST_KINGPIN_ANGEL_MARIA = 26,
|
||||
|
||||
-- max Quests 254
|
||||
}
|
||||
@@ -77,6 +78,10 @@ Facts = {
|
||||
FACT_KINGPIN_KNOWS_MONEY_GONE = 103,
|
||||
FACT_KINGPIN_DEAD = 308,
|
||||
FACT_ALL_TERRORISTS_KILLED = 156,
|
||||
FACT_BOUNTYHUNTER_SECTOR_1 = 380,
|
||||
FACT_BOUNTYHUNTER_SECTOR_2 = 381,
|
||||
FACT_BOUNTYHUNTER_KILLED_1 = 382,
|
||||
FACT_BOUNTYHUNTER_KILLED_2 = 383,
|
||||
}
|
||||
|
||||
History = {
|
||||
@@ -172,11 +177,26 @@ Profil =
|
||||
MIGUEL = 57,
|
||||
KYLE = 95,
|
||||
}
|
||||
|
||||
SoldierClass =
|
||||
{
|
||||
SOLDIER_CLASS_NONE = 0,
|
||||
SOLDIER_CLASS_ADMINISTRATOR = 1,
|
||||
SOLDIER_CLASS_ELITE = 2,
|
||||
SOLDIER_CLASS_ARMY = 3,
|
||||
}
|
||||
|
||||
CivGroup =
|
||||
{
|
||||
BOUNTYHUNTER_CIV_GROUP = 25,
|
||||
}
|
||||
|
||||
local gsRobotGridNo
|
||||
|
||||
function HandleQuestCodeOnSectorEntry( sNewSectorX, sNewSectorY, bNewSectorZ )
|
||||
|
||||
if ( sNewSectorX == 6 and sNewSectorY == SectorY.MAP_ROW_C and gubQuest( Quests.QUEST_RESCUE_MARIA ) == qStatus.QUESTDONE ) then
|
||||
if ( sNewSectorX == 6 and sNewSectorY == SectorY.MAP_ROW_C and gubQuest( Quests.QUEST_RESCUE_MARIA ) == qStatus.QUESTDONE
|
||||
and not( gubQuest( Quests.QUEST_KINGPIN_ANGEL_MARIA ) == qStatus.QUESTINPROGRESS) ) then
|
||||
-- make sure Maria and Angel are gone
|
||||
SetCharacterSectorX(Profil.MARIA, 0)
|
||||
SetCharacterSectorY(Profil.MARIA, 0)
|
||||
@@ -259,6 +279,14 @@ function HandleSectorLiberation( sNewSectorX, sNewSectorY, bNewSectorZ, fFirstTi
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- extra volunteers on freeing Tixa underground. As enemy troops are not replenished underground, this only happens once
|
||||
if ( bNewSectorZ == 1 ) then
|
||||
-- Tixa
|
||||
if ( sNewSectorX == 9 and sNewSectorY == SectorY.MAP_ROW_J ) then
|
||||
AddVolunteers( 5 )
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- this function is called whenever we recruit a RPC
|
||||
@@ -269,3 +297,59 @@ function RecruitRPCAdditionalHandling( usProfile )
|
||||
AddVolunteers( 10 )
|
||||
end
|
||||
end
|
||||
|
||||
-- this function is called whenever we enter a sector in tactical
|
||||
function HandleSectorTacticalEntry( sSectorX, sSectorY, bSectorZ )
|
||||
|
||||
if ( gubQuest( Quests.QUEST_KINGPIN_ANGEL_MARIA ) == qStatus.QUESTINPROGRESS ) then
|
||||
|
||||
-- Flugente: if the bounty hunter quest is active, add bounty hunters to sectors (location determined on quest start)
|
||||
if ( (CheckFact( Facts.FACT_BOUNTYHUNTER_KILLED_1, 0 ) == false) or (CheckFact( Facts.FACT_BOUNTYHUNTER_KILLED_2, 0 ) == false) and (bSectorZ == 0) ) then
|
||||
|
||||
sector = SECTOR(sSectorX, sSectorY)
|
||||
sector_hunter1 = GetFact( Facts.FACT_BOUNTYHUNTER_SECTOR_1 )
|
||||
sector_hunter2 = GetFact( Facts.FACT_BOUNTYHUNTER_SECTOR_2 )
|
||||
|
||||
if ( (sector == sector_hunter1) and (CheckFact( Facts.FACT_BOUNTYHUNTER_KILLED_1, 0 ) == false) ) then
|
||||
|
||||
hostile = 0
|
||||
if ( (CheckFact( Facts.FACT_BOUNTYHUNTER_KILLED_2, 0 ) == true) ) then
|
||||
hostile = 1
|
||||
end
|
||||
|
||||
CreateArmedCivilain(CivGroup.BOUNTYHUNTER_CIV_GROUP, SoldierClass.SOLDIER_CLASS_ADMINISTRATOR, 13000, hostile)
|
||||
CreateArmedCivilain(CivGroup.BOUNTYHUNTER_CIV_GROUP, SoldierClass.SOLDIER_CLASS_ARMY, 7447, hostile)
|
||||
CreateArmedCivilain(CivGroup.BOUNTYHUNTER_CIV_GROUP, SoldierClass.SOLDIER_CLASS_ARMY, 13032, hostile)
|
||||
CreateArmedCivilain(CivGroup.BOUNTYHUNTER_CIV_GROUP, SoldierClass.SOLDIER_CLASS_ELITE, 19291, hostile)
|
||||
|
||||
-- dont spawn in deep water
|
||||
if (sSectorX == 14 and sSectorY == 2) then
|
||||
CreateArmedCivilain(CivGroup.BOUNTYHUNTER_CIV_GROUP, SoldierClass.SOLDIER_CLASS_ELITE, 16533, hostile)
|
||||
else
|
||||
CreateArmedCivilain(CivGroup.BOUNTYHUNTER_CIV_GROUP, SoldierClass.SOLDIER_CLASS_ELITE, 13557, hostile)
|
||||
end
|
||||
end
|
||||
|
||||
if ( (sector == sector_hunter2) and (CheckFact( Facts.FACT_BOUNTYHUNTER_KILLED_2, 0 ) == false) ) then
|
||||
|
||||
hostile = 0
|
||||
if ( (CheckFact( Facts.FACT_BOUNTYHUNTER_KILLED_1, 0 ) == true) ) then
|
||||
hostile = 1
|
||||
end
|
||||
|
||||
CreateArmedCivilain(CivGroup.BOUNTYHUNTER_CIV_GROUP, SoldierClass.SOLDIER_CLASS_ADMINISTRATOR, 13000, hostile)
|
||||
CreateArmedCivilain(CivGroup.BOUNTYHUNTER_CIV_GROUP, SoldierClass.SOLDIER_CLASS_ARMY, 7447, hostile)
|
||||
CreateArmedCivilain(CivGroup.BOUNTYHUNTER_CIV_GROUP, SoldierClass.SOLDIER_CLASS_ARMY, 13032, hostile)
|
||||
CreateArmedCivilain(CivGroup.BOUNTYHUNTER_CIV_GROUP, SoldierClass.SOLDIER_CLASS_ELITE, 19291, hostile)
|
||||
|
||||
-- dont spawn in deep water
|
||||
if (sSectorX == 14 and sSectorY == 2) then
|
||||
CreateArmedCivilain(CivGroup.BOUNTYHUNTER_CIV_GROUP, SoldierClass.SOLDIER_CLASS_ELITE, 16533, hostile)
|
||||
else
|
||||
CreateArmedCivilain(CivGroup.BOUNTYHUNTER_CIV_GROUP, SoldierClass.SOLDIER_CLASS_ELITE, 13557, hostile)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
@@ -165,14 +165,13 @@
|
||||
<AddToBattle>0</AddToBattle>
|
||||
<Loyalty>0</Loyalty>
|
||||
</NAME>
|
||||
<!-- these slots stay empty for compatibility with UC/DL -->
|
||||
<NAME>
|
||||
<!-- Volunteers: civilians the player just recruited to one day be militia -->
|
||||
<uiIndex>22</uiIndex>
|
||||
<Enabled>1</Enabled>
|
||||
<szGroup>Volunteer</szGroup>
|
||||
<AddToBattle>1</AddToBattle>
|
||||
<Loyalty>1</Loyalty>
|
||||
<fCanBeCaptured>0</fCanBeCaptured>
|
||||
<Enabled>0</Enabled>
|
||||
<szGroup>Empty Slot22</szGroup>
|
||||
<AddToBattle>0</AddToBattle>
|
||||
<Loyalty>0</Loyalty>
|
||||
</NAME>
|
||||
<NAME>
|
||||
<uiIndex>23</uiIndex>
|
||||
@@ -182,18 +181,22 @@
|
||||
<Loyalty>0</Loyalty>
|
||||
</NAME>
|
||||
<NAME>
|
||||
<!-- Volunteers: civilians the player just recruited to one day be militia -->
|
||||
<uiIndex>24</uiIndex>
|
||||
<Enabled>0</Enabled>
|
||||
<szGroup>Empty Slot24</szGroup>
|
||||
<AddToBattle>0</AddToBattle>
|
||||
<Loyalty>0</Loyalty>
|
||||
<Enabled>1</Enabled>
|
||||
<szGroup>Volunteer</szGroup>
|
||||
<AddToBattle>1</AddToBattle>
|
||||
<Loyalty>1</Loyalty>
|
||||
<fCanBeCaptured>0</fCanBeCaptured>
|
||||
</NAME>
|
||||
<NAME>
|
||||
<!-- These guys are hostile bounty hunters on the same quest as we are -->
|
||||
<uiIndex>25</uiIndex>
|
||||
<Enabled>0</Enabled>
|
||||
<szGroup>Empty Slot25</szGroup>
|
||||
<AddToBattle>0</AddToBattle>
|
||||
<Enabled>1</Enabled>
|
||||
<szGroup>Bounty hunter</szGroup>
|
||||
<AddToBattle>1</AddToBattle>
|
||||
<Loyalty>0</Loyalty>
|
||||
<fCanBeCaptured>1</fCanBeCaptured>
|
||||
</NAME>
|
||||
<NAME>
|
||||
<uiIndex>26</uiIndex>
|
||||
|
||||
@@ -236,7 +236,7 @@ Each A.I.M merc has an entry here in the file, mapped to a specific uiIndex.
|
||||
</NAME>
|
||||
<NAME>
|
||||
<uiIndex>52</uiIndex>
|
||||
<Name>None</Name>
|
||||
<Name>Angel DaSilva</Name>
|
||||
</NAME>
|
||||
<NAME>
|
||||
<uiIndex>53</uiIndex>
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user