mirror of
https://github.com/1dot13/gamedir.git
synced 2026-07-22 13:40:25 +02:00
git-svn-id: https://ja2svn.mooo.com/source/ja2_v1.13_data@2433 4f8fa57e-7814-0410-bad4-adc449f26b7c
820 lines
23 KiB
Lua
820 lines
23 KiB
Lua
local NPC_TALK_RADIUS = 4
|
|
local sDesiredMercDist
|
|
local NO_PROFILE = 200
|
|
|
|
Facts =
|
|
{
|
|
FACT_SKYRIDER_CLOSE_TO_CHOPPER = 43,
|
|
FACT_MARIA_ESCORTED_AT_LEATHER_SHOP = 117,
|
|
FACT_JOEY_NEAR_MARTHA = 110,
|
|
FACT_JOHN_ALIVE = 190,
|
|
FACT_MARY_OR_JOHN_ARRIVED = 192,
|
|
FACT_CHALICE_STOLEN = 184,
|
|
FACT_MARY_ALIVE = 187,
|
|
FACT_FIRST_ROBOT_DESTROYED = 203,
|
|
FACT_ROBOT_READY_SECOND_TIME = 205,
|
|
FACT_SECOND_ROBOT_DESTROYED = 206,
|
|
FACT_ESTONI_REFUELLING_POSSIBLE = 277,
|
|
FACT_KINGPIN_KNOWS_MONEY_GONE = 103,
|
|
FACT_PLAYER_REPAID_KINGPIN = 104,
|
|
FACT_KINGPIN_NOT_IN_OFFICE = 256,
|
|
FACT_PLAYER_KNOWS_ABOUT_BLOODCAT_LAIR = 335,
|
|
}
|
|
|
|
Attitude =
|
|
{
|
|
DEFENSIVE = 0,
|
|
BRAVESOLO = 1,
|
|
BRAVEAID = 2,
|
|
CUNNINGSOLO = 3,
|
|
CUNNINGAID = 4,
|
|
AGGRESSIVE = 5,
|
|
MAXATTITUDES = 6,
|
|
ATTACKSLAYONLY = 7,
|
|
}
|
|
|
|
Quests =
|
|
{
|
|
-- Quests ID -- BinaryData\QUESTS.EDT Record
|
|
QUEST_DELIVER_LETTER = 0, -- Start quest 0, End quest 1 - Deliver Letter
|
|
QUEST_FOOD_ROUTE = 1, -- Start quest 2, End quest 3 - Food Route
|
|
QUEST_KILL_TERRORISTS = 2, -- Start quest 4, End quest 5 - Terrorists
|
|
QUEST_KINGPIN_IDOL = 3, -- Start quest 6, End quest 7 - Kingpin Chalice
|
|
QUEST_KINGPIN_MONEY = 4, -- Start quest 8, End quest 9 - Kingpin Money
|
|
QUEST_RUNAWAY_JOEY = 5, -- Start quest 10, End quest 11 - Runaway Joey
|
|
QUEST_RESCUE_MARIA = 6, -- Start quest 12, End quest 13 - Rescue Maria
|
|
QUEST_CHITZENA_IDOL = 7, -- Start quest 14, End quest 15 - Chitzena Chalice
|
|
QUEST_HELD_IN_ALMA = 8, -- Start quest 16, End quest 17 - Held in Alma
|
|
QUEST_INTERROGATION = 9, -- Start quest 18, End quest 19 - Interogation
|
|
QUEST_ARMY_FARM = 10, -- Start quest 20, End quest 21 - Hillbilly Problem
|
|
QUEST_FIND_SCIENTIST = 11, -- Start quest 22, End quest 23 - Find Scientist
|
|
QUEST_DELIVER_VIDEO_CAMERA = 12, -- Start quest 24, End quest 25 - Deliver Video Camera
|
|
QUEST_BLOODCATS = 13, -- Start quest 26, End quest 27 - Blood Cats
|
|
QUEST_FIND_HERMIT = 14, -- Start quest 28, End quest 29 - Find Hermit
|
|
QUEST_CREATURES = 15, -- Start quest 30, End quest 31 - Creatures
|
|
QUEST_CHOPPER_PILOT = 16, -- Start quest 32, End quest 33 - Find Chopper Pilot
|
|
QUEST_ESCORT_SKYRIDER = 17, -- Start quest 34, End quest 35 - Escort SkyRider
|
|
QUEST_FREE_DYNAMO = 18, -- Start quest 36, End quest 37 - Free Dynamo
|
|
QUEST_ESCORT_TOURISTS = 19, -- Start quest 38, End quest 39 - Escort Tourists
|
|
QUEST_FREE_CHILDREN = 20, -- Start quest 40, End quest 41 - Doreen
|
|
QUEST_LEATHER_SHOP_DREAM = 21, -- Start quest 42, End quest 43 - Leather Shop Dream
|
|
QUEST_ESCORT_SHANK = 22, -- Start quest 44, End quest 45 - Escort Shank
|
|
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
|
|
|
|
-- max Quests 254
|
|
}
|
|
|
|
Profil =
|
|
{
|
|
BARRY = 0,
|
|
BLOOD = 1,
|
|
LYNX = 2,
|
|
GRIZZLY = 3,
|
|
VICKI = 4,
|
|
TREVOR = 5,
|
|
GRUNTY = 6,
|
|
IVAN = 7,
|
|
STEROID = 8,
|
|
IGOR = 9,
|
|
SHADOW = 10,
|
|
RED = 11,
|
|
REAPER = 12,
|
|
FIDEL = 13,
|
|
FOX = 14,
|
|
SIDNEY = 15,
|
|
GUS = 16,
|
|
BUNS = 17,
|
|
ICE = 18,
|
|
SPIDER = 19,
|
|
CLIFF = 20,
|
|
BULL = 21,
|
|
HITMAN = 22,
|
|
BUZZ = 23,
|
|
RAIDER = 24,
|
|
RAVEN = 25,
|
|
STATIC = 26,
|
|
LEN = 27,
|
|
DANNY = 28,
|
|
MAGIC = 29,
|
|
STEPHEN = 30,
|
|
SCULLY = 31,
|
|
MALICE = 32,
|
|
DRQ = 33,
|
|
NAILS = 34,
|
|
THOR = 35,
|
|
SCOPE = 36,
|
|
WOLF = 37,
|
|
MD = 38,
|
|
MELTDOWN = 39,
|
|
BIFF = 40,
|
|
HAYWIRE = 41,
|
|
GASKET = 42,
|
|
RAZOR = 43,
|
|
FLO = 44,
|
|
GUMPY = 45,
|
|
LARRY = 46,
|
|
LARRY_STONED = 47,
|
|
COUGAR = 48,
|
|
NUMB = 49,
|
|
BUBBA = 50,
|
|
MIGUEL = 57,
|
|
CARLOS = 58,
|
|
IRA = 59,
|
|
DIMITRI = 60,
|
|
DEVIN = 61,
|
|
ROBOT = 62,
|
|
HAMOUS = 63,
|
|
SLAY = 64,
|
|
DYNAMO = 66,
|
|
SHANK = 67,
|
|
IGGY = 68,
|
|
VINCE = 69,
|
|
CONRAD = 70,
|
|
MADDOG = 72,
|
|
DARREL = 73,
|
|
PERKO = 74,
|
|
DEIDRANNA = 75,
|
|
AUNTIE = 76,
|
|
CARMEN = 78,
|
|
JOE = 79,
|
|
STEVE = 80,
|
|
RAT = 81,
|
|
ANNIE = 82,
|
|
CHRIS = 83,
|
|
BOB = 84,
|
|
BRENDA = 85,
|
|
KINGPIN = 86,
|
|
DARREN = 87,
|
|
MARIA = 88,
|
|
ANGEL = 89,
|
|
JOEY = 90,
|
|
TONY = 91,
|
|
FRANK = 92,
|
|
SPIKE = 93,
|
|
DAMON = 94,
|
|
KYLE = 95,
|
|
MICKY = 96,
|
|
SKYRIDER = 97,
|
|
PABLO = 98,
|
|
SAL = 99,
|
|
FATHER = 100,
|
|
FATIMA = 101,
|
|
WARDEN = 102,
|
|
GORDON = 103,
|
|
GABBY = 104,
|
|
ERNEST = 105,
|
|
FRED = 106,
|
|
MADAME = 107,
|
|
YANNI = 108,
|
|
MARTHA = 109,
|
|
JOE = 110,
|
|
JASMIN = 111,
|
|
CHARLIE = 112,
|
|
JAKE = 113,
|
|
PACOS = 114,
|
|
DAVE = 115,
|
|
SKIPPER = 116,
|
|
HANS = 117,
|
|
JOHN = 118,
|
|
MARY = 119,
|
|
GENERAL = 120,
|
|
SERGEANT = 121,
|
|
ARMAND = 122,
|
|
LORA = 123,
|
|
FRANZ = 124,
|
|
HOWARD = 125,
|
|
SAM = 126,
|
|
ELDIN = 127,
|
|
ARNIE = 128,
|
|
TINA = 129,
|
|
FREDO = 130,
|
|
WALTER = 131,
|
|
JENNY = 132,
|
|
BILLY = 133,
|
|
BREWSTER = 134,
|
|
ELLIOT = 135,
|
|
DEREK = 136,
|
|
OLIVER = 137,
|
|
WALDO = 138,
|
|
DOREEN = 139,
|
|
JIM = 140,
|
|
JACK = 141,
|
|
OLAF = 142,
|
|
RAY = 143,
|
|
OLGA = 144,
|
|
TYRONE = 145,
|
|
MADLAB = 146,
|
|
KEITH = 147,
|
|
MATT = 148,
|
|
MIKE = 149,
|
|
DARYL = 150,
|
|
HERVE = 151,
|
|
PETER = 152,
|
|
ALBERTO = 153,
|
|
CARLO = 154,
|
|
MANNY = 155,
|
|
OSWALD = 156,
|
|
CALVIN = 157,
|
|
CARL = 158,
|
|
}
|
|
|
|
What =
|
|
{
|
|
MERC_TYPE__PLAYER_CHARACTER = 0,
|
|
MERC_TYPE__AIM_MERC = 1,
|
|
MERC_TYPE__MERC = 2,
|
|
MERC_TYPE__NPC = 3,
|
|
MERC_TYPE__EPC = 4,
|
|
MERC_TYPE__NPC_WITH_UNEXTENDABLE_CONTRACT = 5,
|
|
MERC_TYPE__VEHICLE = 6,
|
|
}
|
|
|
|
Team =
|
|
{
|
|
OUR_TEAM = 0,
|
|
ENEMY_TEAM = 1,
|
|
CREATURE_TEAM = 2,
|
|
MILITIA_TEAM = 3,
|
|
CIV_TEAM = 4,
|
|
}
|
|
|
|
pQuest =
|
|
{
|
|
QUESTNOTSTARTED = 0,
|
|
QUESTINPROGRESS = 1,
|
|
QUESTDONE = 2,
|
|
}
|
|
|
|
Group =
|
|
{
|
|
NON_CIV_GROUP = 0,
|
|
REBEL_CIV_GROUP = 1,
|
|
KINGPIN_CIV_GROUP = 2,
|
|
SANMONA_ARMS_GROUP = 3,
|
|
ANGELS_GROUP = 4,
|
|
BEGGARS_CIV_GROUP = 5,
|
|
TOURISTS_CIV_GROUP = 6,
|
|
ALMA_MILITARY_CIV_GROUP = 7,
|
|
DOCTORS_CIV_GROUP = 8,
|
|
COUPLE1_CIV_GROUP = 9,
|
|
HICKS_CIV_GROUP = 10,
|
|
WARDEN_CIV_GROUP = 11,
|
|
JUNKYARD_CIV_GROUP = 12,
|
|
FACTORY_KIDS_GROUP = 13,
|
|
QUEENS_CIV_GROUP = 14,
|
|
}
|
|
|
|
Status =
|
|
{
|
|
CIV_GROUP_NEUTRAL = 0,
|
|
CIV_GROUP_WILL_EVENTUALLY_BECOME_HOSTILE = 1,
|
|
CIV_GROUP_WILL_BECOME_HOSTILE = 2,
|
|
CIV_GROUP_HOSTILE = 3,
|
|
}
|
|
|
|
SectorY =
|
|
{
|
|
MAP_ROW_A = 1,
|
|
MAP_ROW_B = 2,
|
|
MAP_ROW_C = 3,
|
|
MAP_ROW_D = 4,
|
|
MAP_ROW_E = 5,
|
|
MAP_ROW_F = 6,
|
|
MAP_ROW_G = 7,
|
|
MAP_ROW_H = 8,
|
|
MAP_ROW_I = 9,
|
|
MAP_ROW_J = 10,
|
|
MAP_ROW_K = 11,
|
|
MAP_ROW_L = 12,
|
|
MAP_ROW_M = 13,
|
|
MAP_ROW_N = 14,
|
|
MAP_ROW_O = 15,
|
|
MAP_ROW_P = 16,
|
|
}
|
|
|
|
-- text colours
|
|
FontColour =
|
|
{
|
|
FONT_MCOLOR_DKWHITE = 134,
|
|
FONT_MCOLOR_LTYELLOW = 144,
|
|
FONT_MCOLOR_RED = 163,
|
|
FONT_MCOLOR_DKRED = 164,
|
|
FONT_MCOLOR_LTGREEN = 184,
|
|
}
|
|
|
|
-- these numbers aren't used in the code - we only use them in LUA
|
|
Languages =
|
|
{
|
|
LANGUAGE_ENGLISH = 0,
|
|
LANGUAGE_GERMAN = 1,
|
|
LANGUAGE_RUSSIAN = 2,
|
|
LANGUAGE_DUTCH = 3,
|
|
LANGUAGE_POLISH = 4,
|
|
LANGUAGE_FRENCH = 5,
|
|
LANGUAGE_ITALIAN = 6,
|
|
LANGUAGE_CHINESE = 7,
|
|
}
|
|
|
|
-- numbers for addressing which stat should get more experience
|
|
StatTypes =
|
|
{
|
|
HEALTHAMT = 1,
|
|
AGILAMT = 2,
|
|
DEXTAMT = 3,
|
|
WISDOMAMT = 4,
|
|
MEDICALAMT = 5,
|
|
EXPLODEAMT = 6,
|
|
MECHANAMT = 7,
|
|
MARKAMT = 8,
|
|
EXPERAMT = 9,
|
|
STRAMT = 10,
|
|
LDRAMT = 11,
|
|
}
|
|
|
|
-- different teams
|
|
Teams =
|
|
{
|
|
ENEMY_TEAM = 1,
|
|
CREATURE_TEAM = 2,
|
|
MILITIA_TEAM = 3,
|
|
CIV_TEAM = 4,
|
|
}
|
|
|
|
local iLoop
|
|
local aimLoop
|
|
|
|
local HEARD_3_TURNS_AGO = -4
|
|
local HEARD_2_TURNS_AGO = -3
|
|
local HEARD_LAST_TURN = -2
|
|
local HEARD_THIS_TURN = -1
|
|
local NOT_HEARD_OR_SEEN = 0
|
|
local SEEN_CURRENTLY = 1
|
|
local SEEN_THIS_TURN = 2
|
|
local SEEN_LAST_TURN = 3
|
|
local SEEN_2_TURNS_AGO =4
|
|
local SEEN_3_TURNS_AGO = 5
|
|
|
|
-- local function
|
|
local function HandleJohnArrival( ID )
|
|
|
|
local ID2 = nil
|
|
local sDist
|
|
|
|
if ( not ID ) then
|
|
ID = FindSoldierByProfileID (Profil.JOHN)
|
|
if ( not ID ) then
|
|
return
|
|
end
|
|
end
|
|
|
|
if ( PythSpacesAway( ID,8228) < 40 ) then
|
|
|
|
if ( CheckFact( Facts.FACT_MARY_ALIVE, 0 ) == true ) then
|
|
ID2 = FindSoldierByProfileID( Profil.MARY )
|
|
if ( ID2 ) then
|
|
if ( PythSpacesAway( ID, GetNPCGridNo(ID2) ) > 8 ) then
|
|
-- Too far away!
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
SetFactTrue( Facts.FACT_MARY_OR_JOHN_ARRIVED )
|
|
ActionStopMerc(ID)
|
|
|
|
-- If Mary is alive/dead
|
|
if ( ID2 ) then
|
|
ActionStopMerc(ID2)
|
|
TriggerNPCRecord( ID, 13 )
|
|
else
|
|
TriggerNPCRecord( ID, 12 )
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
-- end local function
|
|
|
|
-- local function
|
|
local function HandleMaryArrival( ID )
|
|
|
|
local sDist
|
|
|
|
if ( not ID ) then
|
|
ID = FindSoldierByProfileID (Profil.MARY)
|
|
if ( not ID ) then
|
|
return
|
|
end
|
|
end
|
|
|
|
if ( CheckFact( Facts.FACT_JOHN_ALIVE,0) == true ) then
|
|
return
|
|
--new requirements: player close by
|
|
elseif ( PythSpacesAway( ID,8228) < 40 ) then
|
|
|
|
if ( not TileIsOutOfBounds ( ClosestPC( ID, sDist )) and sDist > NPC_TALK_RADIUS * 2 ) then
|
|
--too far away
|
|
return
|
|
end
|
|
|
|
SetFactTrue( Facts.FACT_MARY_OR_JOHN_ARRIVED )
|
|
ActionStopMerc(ID)
|
|
TriggerNPCRecord( ID, 13 )
|
|
end
|
|
|
|
end
|
|
-- end local function
|
|
|
|
function HandleAtNewGridNo( ProfileId )
|
|
|
|
if ( CheckFact ( Facts.FACT_ESTONI_REFUELLING_POSSIBLE, 0) == true and CheckQuest(Quests.QUEST_ESCORT_SHANK) == pQuest.QUESTINPROGRESS ) then
|
|
EndQuest( Quests.QUEST_ESCORT_SHANK, gWorldSectorX, gWorldSectorY )
|
|
end
|
|
|
|
TeamSoldier = FindSoldierTeam (ProfileId)
|
|
|
|
if ( TeamSoldier == Team.OUR_TEAM ) then -- Team
|
|
|
|
-- Kingping expecting visit from player (Sector D5)
|
|
-- The fact has to be TRUE. If FALSE then Kingpin attack the player.
|
|
if ( CheckFact( 98, ProfileId ) == false ) then
|
|
if ( NPCInRoomRange( ProfileId, 30, 39 ) == true and gWorldSectorX == 5 and gWorldSectorY == SectorY.MAP_ROW_D and gWorldSectorZ == 0 )then
|
|
|
|
for iLoop = GetTacticalStatusFirstID(Team.CIV_TEAM),GetTacticalStatusLastID(Team.CIV_TEAM) do
|
|
if ( CheckMercPtrsInSector (iLoop) == true and CheckMercPtrsInActive(iLoop) == true and CheckMercPtrsInCivilianGroup (iLoop) == 2 ) then
|
|
for aimLoop=GetTacticalStatusFirstID(Team.OUR_TEAM),GetTacticalStatusLastID(Team.OUR_TEAM) do
|
|
if ( CheckMercPtrsID1SeenID2(iLoop,aimLoop) == SEEN_CURRENTLY ) then
|
|
MakeMercPtrsHostile( iLoop )
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if ( CheckCombatMode == false ) then
|
|
EnterTeamCombatMode(Team.CIV_TEAM)
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
if ( WhatKindOfMercAmI (ProfileId) == What.MERC_TYPE__EPC ) then -- what EPC
|
|
|
|
-- Skyrider
|
|
if ( ProfileId == Profil.SKYRIDER and CheckNPCSectorBool( Profil.SKYRIDER, 13, SectorY.MAP_ROW_B, 0 ) == true and PythSpacesAway( Profil.SKYRIDER,8842 ) < 11 ) then
|
|
ActionStopMerc(Profil.SKYRIDER)
|
|
SetFactTrue( Facts.FACT_SKYRIDER_CLOSE_TO_CHOPPER )
|
|
TriggerNPCRecord( Profil.SKYRIDER, 15 )
|
|
SetUpHelicopterForPlayer( 13, SectorY.MAP_ROW_B, Profil.SKYRIDER, 163 ) -- 163 helicopter
|
|
|
|
-- Mary & John
|
|
elseif ( ( CheckNPCSectorBool( Profil.MARY, 13, SectorY.MAP_ROW_B, 0 ) == true ) or ( CheckNPCSectorBool( Profil.JOHN, 13, SectorY.MAP_ROW_B, 0 ) == true ) ) then
|
|
|
|
-- Mary
|
|
if ( ProfileId == Profil.MARY ) then
|
|
HandleMaryArrival( Profil.MARY )
|
|
-- John
|
|
elseif ( ProfileId == Profil.JOHN ) then
|
|
HandleJohnArrival( Profil.JOHN )
|
|
end
|
|
|
|
-- Maria
|
|
elseif ( ProfileId == Profil.MARIA and CheckNPCSectorBool( Profil.MARIA, 6, SectorY.MAP_ROW_C, 0) == true and CheckFact(Facts.FACT_MARIA_ESCORTED_AT_LEATHER_SHOP,Profil.MARIA) == true ) then
|
|
|
|
if ( NPCInRoom( Profil.ANGEL, 2 ) == true ) then
|
|
TriggerNPCRecord( Profil.ANGEL, 12 )
|
|
end
|
|
|
|
-- Joey
|
|
elseif ( ProfileId == Profil.JOEY and CheckNPCSectorBool( Profil.JOEY, 8, SectorY.MAP_ROW_G, 0) == true and CheckFact(Facts.FACT_JOEY_NEAR_MARTHA,0) == true ) then
|
|
ActionStopMerc(Profil.JOEY)
|
|
TriggerNPCRecord( Profil.JOEY, 9 )
|
|
end
|
|
|
|
-- Drassen stuff for John & Mary
|
|
elseif ( CheckQuest(Quests.QUEST_ESCORT_TOURISTS) == pQuest.QUESTINPROGRESS and ProfileIdsSectorX == 13 and ProfileIdsSectorY == SectorY.MAP_ROW_B and ProfileIdbSectorZ == 0 ) then
|
|
|
|
if ( CheckFact( Facts.FACT_JOHN_ALIVE, 0 ) == true ) then
|
|
HandleJohnArrival( nil )
|
|
else
|
|
HandleMaryArrival( nil )
|
|
end
|
|
|
|
elseif ( TeamSoldier == Team.CIV_TEAM and ProfileId ~= NO_PROFILE and CheckSoldierNeutral( ProfileId ) == true ) then
|
|
|
|
if ( ProfileId == Profil.JIM or ProfileId == Profil.JACK or ProfileId == Profil.OLAF or ProfileId == Profil.RAY or ProfileId == Profil.OLGA or ProfileId == Profil.TYRONE ) then
|
|
|
|
if ( not TileIsOutOfBounds( ClosestPC( ProfileId, sDesiredMercDist )) ) then
|
|
if ( sDesiredMercDist <= NPC_TALK_RADIUS * 2 ) then
|
|
CancelAIAction ( ProfileId )
|
|
AddToShouldBecomeHostileOrSayQuoteList( GetPlayerMercID(ProfileId) )
|
|
end
|
|
end
|
|
end
|
|
|
|
end -- End what EPC
|
|
end -- End team
|
|
end
|
|
|
|
ActionTypes =
|
|
{
|
|
ACTIONTYPE_INVALID = 0,
|
|
ACTIONTYPE_HACKING = 1,
|
|
ACTIONTYPE_READFILE = 2,
|
|
ACTIONTYPE_WATERTAP = 3,
|
|
ACTIONTYPE_SODAMACHINE = 4,
|
|
ACTIONTYPE_MINIGAME = 5,
|
|
}
|
|
|
|
InfoTypes =
|
|
{
|
|
INFO_TYPE_NORMAL = 0,
|
|
INFO_TYPE_VIP = 1,
|
|
}
|
|
|
|
ScreenTypes =
|
|
{
|
|
MINIGAME = 30,
|
|
}
|
|
|
|
MiniGames =
|
|
{
|
|
TETRIS = 0,
|
|
PONG = 1,
|
|
}
|
|
|
|
-- We have an array of 1000 signed integers that a modder can use to set whatever data he wants.
|
|
-- We simply set up some enums here to make it easier for us to remember what is what
|
|
ModSpecificActions =
|
|
{
|
|
-- |||||||||||||||||||||||||||||||||| computers |||||||||||||||||||||||||||||||||||||
|
|
-- Orta sublevel 1
|
|
COMPUTER_ORTA_BASEMENT_LAB1_SERVER = 0,
|
|
COMPUTER_ORTA_BASEMENT_LAB2_SERVER = 1,
|
|
COMPUTER_ORTA_BASEMENT_HALLWAY_SERVER = 2,
|
|
COMPUTER_ORTA_BASEMENT_LAB1_PC = 3,
|
|
COMPUTER_ORTA_BASEMENT_LAB2_PC = 4,
|
|
COMPUTER_ORTA_BASEMENT_CONTROL_CONSOLE_1 = 5,
|
|
COMPUTER_ORTA_BASEMENT_CONTROL_CONSOLE_2 = 6,
|
|
COMPUTER_ORTA_BASEMENT_ENTRANCE_CONSOLE_1 = 7,
|
|
COMPUTER_ORTA_BASEMENT_ENTRANCE_CONSOLE_2 = 8,
|
|
|
|
-- Orta
|
|
COMPUTER_ORTA_SERVER_1 = 9,
|
|
COMPUTER_ORTA_PC_1 = 10,
|
|
|
|
-- Balime
|
|
COMPUTER_BALIME_L12_MUSEUM_CONSOLE_1 = 11,
|
|
COMPUTER_BALIME_L12_MUSEUM_CONSOLE_2 = 12,
|
|
|
|
-- Drassen SAM
|
|
COMPUTER_DRASSENSAM_PC_1 = 13,
|
|
COMPUTER_DRASSENSAM_COMMANDCONSOLE = 14,
|
|
|
|
-- Chitzena SAM
|
|
COMPUTER_CHITZENASAM_PC_1 = 15,
|
|
COMPUTER_CHITZENASAM_PC_2 = 16,
|
|
COMPUTER_CHITZENASAM_COMMANDCONSOLE = 17,
|
|
|
|
-- central SAM
|
|
COMPUTER_CENTRALSAM_PC_1 = 18,
|
|
COMPUTER_CENTRALSAM_PC_2 = 19,
|
|
COMPUTER_CENTRALSAM_PC_3 = 20,
|
|
COMPUTER_CENTRALSAM_COMMANDCONSOLE = 21,
|
|
|
|
-- Meduna SAM
|
|
COMPUTER_MEDUNASAM_PC_1 = 22,
|
|
COMPUTER_MEDUNASAM_COMPUTERBANK_1 = 23,
|
|
COMPUTER_MEDUNASAM_COMMANDCONSOLE = 24,
|
|
|
|
-- Meduna palace
|
|
COMPUTER_MEDUNAPALACE_PC_1 = 25,
|
|
COMPUTER_MEDUNAPALACE_PC_2 = 26,
|
|
COMPUTER_MEDUNAPALACE_CONSOLE_1 = 27,
|
|
COMPUTER_MEDUNAPALACE_SERVER_1 = 28,
|
|
|
|
-- Alma storage
|
|
COMPUTER_ALMASTORAGE_PC_1 = 29,
|
|
|
|
-- Alma prison
|
|
COMPUTER_ALMAPRISON_PC_1 = 30,
|
|
COMPUTER_ALMAPRISON_PC_2 = 31,
|
|
COMPUTER_ALMAPRISON_PC_3 = 32,
|
|
|
|
-- Alma base
|
|
COMPUTER_ALMABASE_PC_KROTT = 33,
|
|
COMPUTER_ALMABASE_PC_BUREAU = 34,
|
|
COMPUTER_ALMABASE_PC_FILEROOM = 35,
|
|
COMPUTER_ALMABASE_CONSOLE_1 = 36,
|
|
COMPUTER_ALMABASE_CONSOLE_2 = 37,
|
|
COMPUTER_ALMABASE_CONSOLE_3 = 38,
|
|
COMPUTER_ALMABASE_CONSOLE_4 = 39,
|
|
COMPUTER_ALMABASE_CONSOLE_5 = 40,
|
|
COMPUTER_ALMABASE_CONSOLE_6 = 41,
|
|
-- |||||||||||||||||||||||||||||||||| computers |||||||||||||||||||||||||||||||||||||
|
|
|
|
-- |||||||||||||||||||||||||||||||||| books |||||||||||||||||||||||||||||||||||||
|
|
-- Orta sublevel 1
|
|
READING_ORTA_BASEMENT_BOOKSHELF_1 = 45,
|
|
READING_ORTA_BASEMENT_BOOKSHELF_2 = 46,
|
|
READING_ORTA_BASEMENT_BOOKSHELF_3 = 47,
|
|
|
|
-- Orta
|
|
READING_ORTA_BOOKSHELF_1 = 48,
|
|
|
|
-- San Mona
|
|
READING_SANMONA_KINGPIN_BOOKSHELF_1 = 49,
|
|
-- |||||||||||||||||||||||||||||||||| books |||||||||||||||||||||||||||||||||||||
|
|
|
|
-- |||||||||||||||||||||||||||||||||| minigames |||||||||||||||||||||||||||||||||||||
|
|
MINIGAME_TETRIS = 50,
|
|
MINIGAME_PONG = 51,
|
|
-- |||||||||||||||||||||||||||||||||| minigames |||||||||||||||||||||||||||||||||||||
|
|
|
|
-- |||||||||||||||||||||||||||||||||| photo data |||||||||||||||||||||||||||||||||||||
|
|
PHOTO_FLAGS_BEGIN = 60,
|
|
|
|
PHOTO_FLAGS_GENERAL = 61,
|
|
PHOTO_FLAGS_WARDEN = 62,
|
|
PHOTO_FLAGS_ERNEST = 63,
|
|
PHOTO_FLAGS_ARMAND = 64,
|
|
PHOTO_FLAGS_KINGPIN = 65,
|
|
PHOTO_FLAGS_DARREN = 66,
|
|
PHOTO_FLAGS_TONY = 67,
|
|
PHOTO_FLAGS_JOE = 68,
|
|
PHOTO_FLAGS_MADLAB = 69,
|
|
PHOTO_FLAGS_MIKE = 70,
|
|
PHOTO_FLAGS_DEVIN = 71,
|
|
PHOTO_FLAGS_MICKY = 72,
|
|
PHOTO_FLAGS_CARMEN = 73,
|
|
|
|
PHOTO_FLAGS_CAMBRIA_HOSPITAL_MORGUE = 80,
|
|
PHOTO_FLAGS_ALMA_HQ_CONTROLROOM = 81,
|
|
PHOTO_FLAGS_ALMA_STORAGE_ROCKETS = 82,
|
|
PHOTO_FLAGS_ALMA_PRISON_TORTURE = 83,
|
|
PHOTO_FLAGS_TIXA_TORTURE = 84,
|
|
PHOTO_FLAGS_TIXA_TORTURE_DOWNSTAIRS = 85,
|
|
PHOTO_FLAGS_CREATURE_LVL3 = 86,
|
|
PHOTO_FLAGS_ORTA_LABS = 87,
|
|
PHOTO_FLAGS_ORTA_STORAGE = 88,
|
|
PHOTO_FLAGS_ORTA_MANUFACTURING = 89,
|
|
PHOTO_FLAGS_BALIME_MUSEUM = 90,
|
|
PHOTO_FLAGS_GRUMM_RADIOACTIVE = 91,
|
|
PHOTO_FLAGS_MEDUNA_ARENA = 92,
|
|
PHOTO_FLAGS_MEDUNA_BUNKER = 93,
|
|
|
|
PHOTO_FLAGS_SAM_DRASSEN = 94,
|
|
PHOTO_FLAGS_SAM_CHITZENA = 95,
|
|
PHOTO_FLAGS_SAM_CENTRAL = 96,
|
|
PHOTO_FLAGS_SAM_MEDUNA = 97,
|
|
|
|
PHOTO_FLAGS_END = 100,
|
|
-- |||||||||||||||||||||||||||||||||| photo data |||||||||||||||||||||||||||||||||||||
|
|
|
|
}
|
|
|
|
-- General defines for various states
|
|
ActionState =
|
|
{
|
|
-- hacking
|
|
STATE_OK = 0, -- starting state, we can hack this
|
|
STATE_END = 1, -- computer is shut down and cannot be used
|
|
STATE_GAVEREWARD_OK = 2, -- computer is still useable, we already got whatever reward there was
|
|
STATE_GAVEREWARD_END = 3, -- computer is shut down and cannot be used, we already got whatever reward there was
|
|
}
|
|
|
|
-- handle the result of an interactive action that has a special id set for lua
|
|
-- for more info, see InteractiveActions.xml
|
|
function HandleInteractiveActionResult(sSectorX, sSectorY, bSectorZ, sGridNo, bLevel, ubID, usActionType, sLuaactionid, difficulty, skill )
|
|
|
|
end
|
|
|
|
-- states of a photo fact
|
|
PhotoFlag =
|
|
{
|
|
NONE = 0,
|
|
TAKEN = 1,
|
|
UPLOADED = 2,
|
|
VERIFIED = 3, -- the code only has one value for verification, but we use several ones for different results
|
|
VERIFIED_RESULT_2 = 4,
|
|
}
|
|
|
|
-- In this function we can define what and how many items a intel-based dealer should trade with, and how much an item is worth in intel
|
|
-- AddArmsDealerAdditionalIntelData takes 4 arguments:
|
|
-- usDealer: shopkeeper this is intended for
|
|
-- usItem: number of item
|
|
-- sIntelPrice: price of item in intel
|
|
-- sOptimalNumber: how many items the trader should have at maximum
|
|
function AddArmsDealerAdditionalIntelData()
|
|
|
|
|
|
end
|
|
|
|
function SetPhotoState( aIndex, aState )
|
|
|
|
if ( (aIndex >= ModSpecificActions.PHOTO_FLAGS_BEGIN) and (aIndex <= ModSpecificActions.PHOTO_FLAGS_END) and (aState >= PhotoFlag.NONE) and (aState <= PhotoFlag.VERIFIED_RESULT_2) ) then
|
|
|
|
SetModderLUAFact( aIndex, aState )
|
|
|
|
end
|
|
end
|
|
|
|
-- sSectorX, sSectorY, bSectorZ: sector coordinates
|
|
-- sGridNo: tile that we photographed. When we take a photo this function is run on all tiles we see in a 2-tile radius around where we clicked
|
|
-- bLevel: height level (floor or roof)
|
|
-- ubPhotographerProfile: profile of the merc taking the photo
|
|
-- room: if > 0, this tile is inside this room
|
|
-- usTargetProfile: if we photographed a NPC, this will be their profile number, otherwise NO_PROFILE
|
|
function AddPhotoData( sSectorX, sSectorY, bSectorZ, sGridNo, bLevel, ubPhotographerProfile, room, usTargetProfile )
|
|
|
|
|
|
|
|
end
|
|
|
|
function GetPhotoData( aType )
|
|
|
|
|
|
|
|
end
|
|
|
|
function VerifyPhotoState(aIndex)
|
|
|
|
|
|
|
|
end
|
|
|
|
-- types of weather
|
|
Weather =
|
|
{
|
|
WEATHER_FORECAST_NORMAL = 0,
|
|
WEATHER_FORECAST_RAIN = 1,
|
|
WEATHER_FORECAST_THUNDERSHOWERS = 2,
|
|
WEATHER_FORECAST_SANDSTORM = 3,
|
|
WEATHER_FORECAST_SNOW = 4,
|
|
};
|
|
|
|
-- skills
|
|
Skill =
|
|
{
|
|
-- radio operator
|
|
SKILLS_RADIO_ARTILLERY = 0,
|
|
SKILLS_RADIO_JAM = 1,
|
|
SKILLS_RADIO_SCAN_FOR_JAM = 2,
|
|
SKILLS_RADIO_LISTEN = 3,
|
|
SKILLS_RADIO_CALLREINFORCEMENTS = 4,
|
|
SKILLS_RADIO_TURNOFF = 5,
|
|
|
|
SKILLS_INTEL_CONCEAL = 6,
|
|
SKILLS_INTEL_GATHERINTEL = 7,
|
|
|
|
-- various
|
|
SKILLS_SPOTTER = 8,
|
|
SKILLS_FOCUS = 9,
|
|
SKILLS_DRAG = 10,
|
|
};
|
|
|
|
-- different dialogue action events
|
|
DialogueActionEvent =
|
|
{
|
|
ADE_DISCOVER_ROOM = 0, -- merc is the 1st one to explore this room, aData1 indicates the room in this event
|
|
ADE_DIALOGUE_REACTION = 1, -- someone else used a line, and we might answer to that, aData1 indicates the profile number in this event, aData2 indicates the specific voice line we react to
|
|
ADE_OMERTA_ENTRY = 2, -- similar to an IMP, we can comment upon the initial Omerta landing
|
|
ADE_SECTOR_COMMENTARY = 3, -- similar to the rebel's quotes, this is called upon visiting a sector for the first time (if no rebel does their quote first)
|
|
ADE_MERCHANT_CHAT = 4, -- we greet a merchant (used with non-profile merchants, in order to be a bit more lively)
|
|
ADE_DIALOGUE_NPC_FRIENDLY = 5, -- in a conversation, we can say something when clicking on a button
|
|
ADE_DIALOGUE_NPC_DIRECT = 6,
|
|
ADE_DIALOGUE_NPC_THREATEN = 7,
|
|
ADE_DIALOGUE_NPC_RECRUIT = 8,
|
|
ADE_DIALOGUE_NPC_REPEAT = 9,
|
|
ADE_DIALOGUE_RPC_RECRUIT_SUCCESS = 10, -- we've successfully recruited an RPC, and might comment on that
|
|
ADE_SEX = 11, -- does exactly what you think it does
|
|
ADE_WEATHERCHANGE = 12, -- the weather has changed in the current sector, and we can warn the player about that, aData1 is of Weather
|
|
ADE_SKILL_RESULT = 13, -- we used a skill, and comment on the result, aData1 is of Skill, aData2 indicates whether it was a success (1) or failure (0)
|
|
ADE_GRENADEWARNING = 14, -- a delayed enemy grenade was dropped nearby, and we can shout a warning, aData1 is the itemnumber of the grenade
|
|
ADE_CONSUMEITEM = 15, -- we applied an item to us, aData1 is the item index
|
|
ADE_NPC_DEATH = 16, -- someone died, aData1 is the profile of the dead NPC, aData2 the profile of the killer, aData3 the bodytype of the dead
|
|
}
|
|
|
|
-- functions used here:
|
|
-- ubProfile: profile number of merc (don't change that unless you know what to do)
|
|
-- iFaceIndex: index (don't change that unless you know what to do)
|
|
-- path: path and name of soundfile we want to play (in .wav or .ogg format)
|
|
-- text: "Text that should appear"
|
|
-- SetAdditionalDialogue(ubProfile, iFaceIndex, path, text)
|
|
-- Do not use this function in any lua calls outside of HandleAdditionalDialogue(..)!
|
|
--
|
|
-- path: path and name of soundfile we want to play (in .wav or .ogg format)
|
|
-- volume: optional sound volume (65: medium volume, 127: loud), default 65
|
|
-- PlaySound(path, volume)
|
|
|
|
-- handle
|
|
-- sSectorX, sSectorY and bSectorZ indicate the sector coordinates
|
|
-- ubProfile is the merc for whom this is called
|
|
-- iFaceIndex is the face of the merc. DON'T CHANGE THIS UNLESS YOU KNOW WHAT YOU ARE DOING!
|
|
-- usEventNr indicates which event from DialogueActionEvent is used here
|
|
-- aData1, aData2, aData3 are additional data, see event description on what they do in each event
|
|
function HandleAdditionalDialogue(sSectorX, sSectorY, bSectorZ, ubProfile, iFaceIndex, usEventNr, aData1, aData2, aData3 )
|
|
|
|
end
|