diff --git a/Dialogs/bh_phil.fodlg b/Dialogs/bh_phil.fodlg index 0f25fd96..9e43cf04 100644 --- a/Dialogs/bh_phil.fodlg +++ b/Dialogs/bh_phil.fodlg @@ -114,13 +114,13 @@ lang=russ engl 31 31050 @ 32 32000 None 0 # 32 32010 @ -200 33000 Dialog::dlg_ForSearching 0 # +200 33000 DialogBarman::dlg_CheckPlayerExists 0 # 0 33010 # 201 33020 @ 201 34000 None 0 # 0 34010 # 202 34020 D _item p bottle_caps > 199 R _item p bottle_caps - 200 @ -202 35000 Dialog::dlg_TrySearching 0 # +202 35000 DialogBarman::dlg_FindPlayerOnline 0 # 0 35010 & [russ] diff --git a/Dialogs/den_billy.fodlg b/Dialogs/den_billy.fodlg index 7d2748d2..e8363e4d 100644 --- a/Dialogs/den_billy.fodlg +++ b/Dialogs/den_billy.fodlg @@ -164,13 +164,13 @@ lang=russ engl 37 36010 R _param p SexExp + 1 @ 37 37000 None 0 # 23 37010 @ -200 38000 Dialog::dlg_ForSearching 0 # +200 38000 DialogBarman::dlg_CheckPlayerExists 0 # 201 38010 # 0 38020 @ 201 39000 None 0 # 0 39010 # 202 39020 D _item p bottle_caps > 299 R _item p bottle_caps - 300 @ -202 40000 Dialog::dlg_TrySearching 0 # +202 40000 DialogBarman::dlg_FindPlayerOnline 0 # 0 40010 & [russ] diff --git a/Dialogs/den_leanna.fodlg b/Dialogs/den_leanna.fodlg index 6c002b08..42f8693c 100644 --- a/Dialogs/den_leanna.fodlg +++ b/Dialogs/den_leanna.fodlg @@ -73,13 +73,13 @@ lang=russ engl 26 25000 None 0 # 2 25010 # 0 25020 @ -200 26000 Dialog::dlg_ForSearching 0 # +200 26000 DialogBarman::dlg_CheckPlayerExists 0 # 201 26010 # 0 26020 @ 201 27000 None 0 # 0 27010 # 202 27020 D _item p bottle_caps > 199 R _item p bottle_caps - 200 @ -202 28000 Dialog::dlg_TrySearching 0 # +202 28000 DialogBarman::dlg_FindPlayerOnline 0 # 0 28010 & [russ] diff --git a/Dialogs/klam_majda.fodlg b/Dialogs/klam_majda.fodlg index 1ab36df3..ec65a669 100644 --- a/Dialogs/klam_majda.fodlg +++ b/Dialogs/klam_majda.fodlg @@ -1,15 +1,19 @@ [comment] Ваши комментарии / Your comments. + + + + [data] lang=russ engl [dialog] & 1 1000 None 0 # -5 1010 D _param p Intellect < 4 # -2 1020 D _script Dialog::IsNotNameMemNpcPlayer 0 R _script Dialog::SetNameMemNpcPlayer 1 true # -3 1030 D _script Dialog::IsNameMemNpcPlayer 0 @ +5 1010 D Property P Intellect < 4 # +2 1020 D Script Dialog::IsNotNameMemNpcPlayer 0 R Script Dialog::SetNameMemNpcPlayer 1 true # +3 1030 D Script Dialog::IsNameMemNpcPlayer 0 @ 2 2000 None 0 # 6 2010 # 8 2020 # @@ -31,7 +35,7 @@ lang=russ engl 14 6010 # 10 6020 # 0 6030 # -200 6040 D _param p Level > 1 D _param p Intellect > 3 D _param p SkillSpeech > 50 D _param p Karma > 0 # +200 6040 D Property P Intellect > 3 D Property P SkillSpeech > 50 # 20 6050 @ 7 7000 None 0 # 14 7010 # @@ -59,13 +63,13 @@ lang=russ engl 14 14000 None 0 # 0 14010 @ 15 15000 None 0 # -0 15010 D _item p bottle_caps > 4 R _item n bottle_caps + 5 R _item p bottle_caps - 5 # -17 15020 D _item p bottle_caps < 5 # +0 15010 D Item P bottle_caps > 4 R Item P bottle_caps + 5 R Item P bottle_caps - 5 # +17 15020 D Item P bottle_caps < 5 # 16 15030 # 6 15040 @ 16 16000 None 0 # -6 16010 D _item p bottle_caps > 29 R _item p bottle_caps - 30 R _item n bottle_caps + 30 # -17 16020 D _item p bottle_caps < 30 # +6 16010 D Item P bottle_caps > 29 R Item P bottle_caps - 30 R Item P bottle_caps + 30 # +17 16020 D Item P bottle_caps < 30 # 15 16030 @ 17 17000 None 0 # 0 17010 # @@ -77,14 +81,14 @@ lang=russ engl 22 19020 @ 22 20000 None 0 # 0 20010 @ -200 21000 Dialog::dlg_ForSearching 0 # +200 21000 DialogBarman::dlg_CheckPlayerExists 1 # 15 21010 # 201 21020 # 0 21030 @ 201 22000 None 0 # 0 22010 # -202 22020 D _item p bottle_caps > 199 R _item p bottle_caps - 200 @ -202 23000 Dialog::dlg_TrySearching 0 # +202 22020 D Item P bottle_caps > 199 R Item P bottle_caps - 200 @ +202 23000 DialogBarman::dlg_FindPlayerOnline 0 # 0 23010 & [russ] @@ -177,7 +181,7 @@ lang=russ engl {23010}{}{Ну, я пойду...} {100000200}{}{Не знаю никакого @lex Victim@, ничего о нём не @lex BarmanGen@.} {100000201}{}{Эй, да ты у нас шутни@sex@|к||ца|!..@@Шутить удумал@sex@|||а|?!} -{100000202}{}{@lex Victim@... Конечно знаю, только @lex Gender@ сейчас где-то по пустоши скитается.} +{100000202}{}{@lex Victim@... Конечно знаю, сейчас где-то по пустоши скитается.} {100000203}{}{@lex Victim@? Да здесь @lex Gender@ где-то... @lex Place@.} {100000204}{}{@lex Victim@ говоришь? @lex Place@. Знаешь это место? Так вот, @lex Gender@ там был.} {100000205}{}{@lex Victim@? Не знаю, но от людей @lex BarmanGen@. @lex Place@. Знаешь где это? Так вот, @lex Gender@ там был.} diff --git a/Dialogs/mod_rose.fodlg b/Dialogs/mod_rose.fodlg index 3bd935b7..97013871 100644 --- a/Dialogs/mod_rose.fodlg +++ b/Dialogs/mod_rose.fodlg @@ -72,14 +72,14 @@ lang=russ engl 31 18010 @ 31 19000 None 0 # 0 19010 @ -200 20000 Dialog::dlg_ForSearching 0 # +200 20000 DialogBarman::dlg_CheckPlayerExists 0 # 5 20010 # 201 20020 # 0 20030 @ 201 21000 None 0 # 0 21010 # 202 21020 D _item p bottle_caps > 99 R _item p bottle_caps - 100 @ -202 22000 Dialog::dlg_TrySearching 0 # +202 22000 DialogBarman::dlg_FindPlayerOnline 0 # 0 22010 & [russ] diff --git a/Dialogs/ncr_barmen_dasty.fodlg b/Dialogs/ncr_barmen_dasty.fodlg index d777940f..b98829bd 100644 --- a/Dialogs/ncr_barmen_dasty.fodlg +++ b/Dialogs/ncr_barmen_dasty.fodlg @@ -122,13 +122,13 @@ lang=russ engl 70 46010 @ 70 47000 None 0 # 0 47010 @ -200 48000 Dialog::dlg_ForSearching 0 # +200 48000 DialogBarman::dlg_CheckPlayerExists 0 # 0 48010 # 201 48020 @ 201 49000 None 0 # 0 49010 # 202 49020 D _item p bottle_caps > 149 R _item p bottle_caps - 150 @ -202 50000 Dialog::dlg_TrySearching 0 # +202 50000 DialogBarman::dlg_FindPlayerOnline 0 # 0 50010 & [russ] diff --git a/Dialogs/ncr_barmen_mira.fodlg b/Dialogs/ncr_barmen_mira.fodlg index 2d505ba9..e8be8317 100644 --- a/Dialogs/ncr_barmen_mira.fodlg +++ b/Dialogs/ncr_barmen_mira.fodlg @@ -122,13 +122,13 @@ lang=russ engl 53 37030 D _item p bottle_empty > 19 R _script Dialog::r_TimeoutSet 1 300 R _item p bottle_caps + 100 R _item p bottle_empty - 20 R _param p Experience + 500 @ 53 38000 None 0 # 0 38010 @ -200 39000 Dialog::dlg_ForSearching 0 # +200 39000 DialogBarman::dlg_CheckPlayerExists 0 # 0 39010 # 201 39020 @ 201 40000 None 0 # 0 40010 # 202 40020 D _item p bottle_caps > 99 R _item p bottle_caps - 100 @ -202 41000 Dialog::dlg_TrySearching 0 # +202 41000 DialogBarman::dlg_FindPlayerOnline 0 # 0 41010 & [russ] diff --git a/Dialogs/nr_barmen.fodlg b/Dialogs/nr_barmen.fodlg index 38e91b4c..e8ce8728 100644 --- a/Dialogs/nr_barmen.fodlg +++ b/Dialogs/nr_barmen.fodlg @@ -22,13 +22,13 @@ lang=russ engl 4 4000 None 0 # 65506 4010 # 0 4020 @ -200 5000 Dialog::dlg_ForSearching 0 # +200 5000 DialogBarman::dlg_CheckPlayerExists 0 # 0 5010 # 201 5020 @ 201 6000 None 0 # 0 6010 # 202 6020 D _item p bottle_caps > 299 R _item p bottle_caps - 300 @ -202 7000 Dialog::dlg_TrySearching 0 # +202 7000 DialogBarman::dlg_FindPlayerOnline 0 # 0 7010 & [russ] diff --git a/Dialogs/nr_barmen_desp.fodlg b/Dialogs/nr_barmen_desp.fodlg index 7a7eecba..fefef49e 100644 --- a/Dialogs/nr_barmen_desp.fodlg +++ b/Dialogs/nr_barmen_desp.fodlg @@ -21,13 +21,13 @@ lang=russ engl 4 3000 None 0 # 65506 3010 # 0 3020 @ -200 4000 Dialog::dlg_ForSearching 0 # +200 4000 DialogBarman::dlg_CheckPlayerExists 0 # 0 4010 # 201 4020 @ 201 5000 None 0 # 0 5010 # 202 5020 D _item p bottle_caps > 199 R _item p bottle_caps - 200 @ -202 6000 Dialog::dlg_TrySearching 0 # +202 6000 DialogBarman::dlg_FindPlayerOnline 0 # 0 6010 @ 5 7000 None 0 # 6 7010 # diff --git a/Dialogs/redd_lou.fodlg b/Dialogs/redd_lou.fodlg index 9c79a9bc..e43557c3 100644 --- a/Dialogs/redd_lou.fodlg +++ b/Dialogs/redd_lou.fodlg @@ -46,13 +46,13 @@ lang=russ engl 11 11010 # 11 11020 # 0 11030 @ -200 12000 Dialog::dlg_ForSearching 0 # +200 12000 DialogBarman::dlg_CheckPlayerExists 0 # 0 12010 # 201 12020 @ 201 13000 None 0 # 0 13010 # 202 13020 D _item p bottle_caps > 199 R _item p bottle_caps - 200 @ -202 14000 Dialog::dlg_TrySearching 0 # +202 14000 DialogBarman::dlg_FindPlayerOnline 0 # 0 14010 & [russ] diff --git a/Dialogs/repl_terminal.fodlg b/Dialogs/repl_terminal.fodlg index 373a28cf..adf9b5dc 100644 --- a/Dialogs/repl_terminal.fodlg +++ b/Dialogs/repl_terminal.fodlg @@ -9,6 +9,8 @@ + + [data] lang=russ engl @@ -36,7 +38,7 @@ lang=russ engl 7 7000 ReplicationTerminal::dlg_ChoosePlayer 1 # 65505 7010 # 0 7020 R Script ReplicationTerminal::r_ChoosePlayerResult 0 @ -8 8000 ReplicationTerminal::dlg_Reset 1 # +8 8000 None 1 # 4 8010 # 5 8020 # 65505 8030 # diff --git a/Dialogs/sf_barmen_slim.fodlg b/Dialogs/sf_barmen_slim.fodlg index 651103f2..9ba884cc 100644 --- a/Dialogs/sf_barmen_slim.fodlg +++ b/Dialogs/sf_barmen_slim.fodlg @@ -30,13 +30,13 @@ lang=russ engl 14 5060 D _param p SFSlimSidnancy = 3 @ 6 6000 None 0 # 0 6010 @ -200 7000 Dialog::dlg_ForSearching 0 # +200 7000 DialogBarman::dlg_CheckPlayerExists 0 # 0 7010 # 201 7020 @ 201 8000 None 0 # 0 8010 # 202 8020 D _item p bottle_caps > 99 R _item p bottle_caps - 100 @ -202 9000 Dialog::dlg_TrySearching 0 # +202 9000 DialogBarman::dlg_FindPlayerOnline 0 # 0 9010 @ 7 10000 None 0 # 0 10010 # diff --git a/Dialogs/vc_barman_lidia.fodlg b/Dialogs/vc_barman_lidia.fodlg index 82b1178c..d31e53fa 100644 --- a/Dialogs/vc_barman_lidia.fodlg +++ b/Dialogs/vc_barman_lidia.fodlg @@ -66,14 +66,14 @@ lang=russ engl 15 15000 None 0 # 0 15010 # 0 15020 @ -200 16000 Dialog::dlg_ForSearching 0 # +200 16000 DialogBarman::dlg_CheckPlayerExists 0 # 3 16010 # 0 16020 # 201 16030 @ 201 17000 None 0 # 0 17010 # 202 17020 D _item p bottle_caps > 199 R _item p bottle_caps - 200 @ -202 18000 Dialog::dlg_TrySearching 0 # +202 18000 DialogBarman::dlg_FindPlayerOnline 0 # 0 18010 & [russ] diff --git a/Gui/Dialog.fogui b/Gui/Dialog.fogui index f27db3cf..5c423ead 100644 --- a/Gui/Dialog.fogui +++ b/Gui/Dialog.fogui @@ -12,7 +12,7 @@ "IsVerticalScroll": false, "IsHorizontalScroll": false, "Expanded": true, - "Selected": false, + "Selected": true, "Active": true, "Name": "Dialog", "Position": "0, 0", @@ -22,8 +22,8 @@ "IsDraggable": false, "IsNotHittable": false, "CheckTransparentOnHit": false, - "GlobalScope": "string[]@ SplitParams(string param)\r\n{\r\n return cast< string[]@ >(param.split( \"\\n\" ));\r\n}", - "ClassFields": "bool TalkerIsNpc;\r\nident TalkerId;\r\nstring Text;\r\nstring[] Answers = {};\r\nuint TalkTime;\r\nuint TalkStartTick;", + "GlobalScope": "string[]@ SplitParams(string param)\r\n{\r\n return cast< string[]@ >(param.split( \"\\n\" ));\r\n}\r\n ", + "ClassFields": "bool TalkerIsNpc;\r\nident TalkerId;\r\nstring Text;\r\nstring[] Answers = {};\r\nuint TalkTime;\r\nuint TalkStartTick;\r\n\r\nvoid SetDialogText(string msg)\r\n{\r\n auto panel = FindPanel(\"SpeechPanel\");\r\n auto text = panel.FindText( \"SpeechText\" );\r\n if(text != null)\r\n {\r\n text.SetText( msg );\r\n }\r\n}", "OnInit": null, "OnShow": "TalkerIsNpc = params[ \"TalkerIsNpc\" ];\r\nTalkerId = params[ \"TalkerId\" ];\r\nText = params[ \"Text\" ];\r\nAnswers = SplitParams(params[ \"Answers\" ]);\r\nTalkTime = params[ \"TalkTime\" ];\r\nTalkStartTick = Game.GetTick();", "OnHide": " Game.HideScreen(CLIENT_SCREEN_BARTER);", @@ -524,7 +524,7 @@ "IsVerticalScroll": false, "IsHorizontalScroll": false, "Expanded": true, - "Selected": true, + "Selected": false, "Active": true, "Name": "SayButton", "Position": "589, 211", diff --git a/Gui/Say.fogui b/Gui/Say.fogui index bf63f041..7235735d 100644 --- a/Gui/Say.fogui +++ b/Gui/Say.fogui @@ -12,7 +12,7 @@ "IsVerticalScroll": false, "IsHorizontalScroll": false, "Expanded": true, - "Selected": false, + "Selected": true, "Active": true, "Name": "Say", "Position": "0, 0", @@ -25,7 +25,7 @@ "GlobalScope": null, "ClassFields": "// Окно вызвано из интерфейса диалога\r\nbool FromDialog;\r\n//Признак: не выводить введенный текст в лог\r\nbool DontShowMessage;\r\nbool TalkerIsNpc;\r\nident TalkerId;", "OnInit": null, - "OnShow": "if(!(params is null))\r\n{\r\n TalkerIsNpc = params[ \"TalkerIsNpc\" ] == \"true\";\r\n FromDialog = params[ \"FromDialog\" ] == \"true\";\r\n TalkerId = params[ \"TalkerId\" ];\r\n}", + "OnShow": "if(!(params is null))\r\n{\r\n TalkerIsNpc = params[ \"TalkerIsNpc\" ] == \"1\";\r\n FromDialog = params[ \"FromDialog\" ] == \"true\";\r\n TalkerId = params[ \"TalkerId\" ];\r\n}", "OnHide": null, "OnAppear": null, "OnDisappear": null, @@ -188,7 +188,7 @@ "IsVerticalScroll": false, "IsHorizontalScroll": false, "Expanded": true, - "Selected": true, + "Selected": false, "Active": true, "Name": "DoneButton", "Position": "38, 58", @@ -410,4 +410,4 @@ ] } ] -} +} \ No newline at end of file diff --git a/SCRIPT_API.md b/SCRIPT_API.md index c568f8fa..def3807a 100644 --- a/SCRIPT_API.md +++ b/SCRIPT_API.md @@ -5880,6 +5880,10 @@ ... +* `PrivateServer hstring=>uint8 CurrentDialogNumber` + + ... + * `Protected CritterProperty=>int DrugEffects` ... @@ -15164,1765 +15168,1767 @@ - `ChanceOneFromFive = 125` - - `DrugEffects = 126` + - `CurrentDialogNumber = 126` + + - `DrugEffects = 127` - - `DoughnutsCounter = 127` + - `DoughnutsCounter = 128` - - `LastElectronicLocked = 128` + - `LastElectronicLocked = 129` - - `EliTimeNextSing = 129` + - `EliTimeNextSing = 130` - - `EnemyStack = 130` + - `EnemyStack = 131` - - `IsNoEnemyStack = 131` + - `IsNoEnemyStack = 132` - - `EnergyBarierTerminalHx = 132` + - `EnergyBarierTerminalHx = 133` - - `EnergyBarierTerminalHy = 133` + - `EnergyBarierTerminalHy = 134` - - `EnergyBarierNetNum = 134` + - `EnergyBarierNetNum = 135` - - `EnergyBarierHackBonus = 135` + - `EnergyBarierHackBonus = 136` - - `EnergyBarierHitBonus = 136` + - `EnergyBarierHitBonus = 137` - - `FighterPatternCanGenStim = 137` + - `FighterPatternCanGenStim = 138` - - `FighterPatternAllyAssistRadius = 138` + - `FighterPatternAllyAssistRadius = 139` - - `FighterPatternAssistAlliesNum = 139` + - `FighterPatternAssistAlliesNum = 140` - - `FighterPatternMustHealLvl = 140` + - `FighterPatternMustHealLvl = 141` - - `FighterPatternLocalAlarmDeads = 141` + - `FighterPatternLocalAlarmDeads = 142` - - `FighterPatternGlobalAlarmDeads = 142` + - `FighterPatternGlobalAlarmDeads = 143` - - `FighterQuestMinHp = 143` + - `FighterQuestMinHp = 144` - - `FighterQuestOnlyHandCombat = 144` + - `FighterQuestOnlyHandCombat = 145` - - `FighterQuestTeamIdOld = 145` + - `FighterQuestTeamIdOld = 146` - - `FighterQuestTeamIdFight = 146` + - `FighterQuestTeamIdFight = 147` - - `FighterQuestPlayerId = 147` + - `FighterQuestPlayerId = 148` - - `FighterQuestFightPriority = 148` + - `FighterQuestFightPriority = 149` - - `FighterQuestVarNum = 149` + - `FighterQuestVarNum = 150` - - `FixboyPowerArmor = 150` + - `FixboyPowerArmor = 151` - - `ModLourenceVenomedratRecipe = 151` + - `ModLourenceVenomedratRecipe = 152` - - `ModLourenceTNTRatRecipe = 152` + - `ModLourenceTNTRatRecipe = 153` - - `NavEmpRocketRecipe = 153` + - `NavEmpRocketRecipe = 154` - - `FixboyDefault = 154` + - `FixboyDefault = 155` - - `SFRecipeSsupersledge = 155` + - `SFRecipeSsupersledge = 156` - - `SFRecipePlasmagrenades = 156` + - `SFRecipePlasmagrenades = 157` - - `Fixboy700NitroExpress = 157` + - `Fixboy700NitroExpress = 158` - - `FixboyAmmoPressOperator = 158` + - `FixboyAmmoPressOperator = 159` - - `RacingCheckPoints = 159` + - `RacingCheckPoints = 160` - - `RacingCheckpointLocId = 160` + - `RacingCheckpointLocId = 161` - - `GERacingCritterHx = 161` + - `GERacingCritterHx = 162` - - `GERacingCritterHy = 162` + - `GERacingCritterHy = 163` - - `GERacingCritterDir = 163` + - `GERacingCritterDir = 164` - - `GERacingNpcRole = 164` + - `GERacingNpcRole = 165` - - `GERacingOpeningPhrases = 165` + - `GERacingOpeningPhrases = 166` - - `GEReplExplodeTank = 166` + - `GEReplExplodeTank = 167` - - `GEReplNopasaran = 167` + - `GEReplNopasaran = 168` - - `GEReplFindstation = 168` + - `GEReplFindstation = 169` - - `GEReplNotifictions = 169` + - `GEReplNotifictions = 170` - - `GEReplEntryZombie = 170` + - `GEReplEntryZombie = 171` - - `GEReplLastOrder = 171` + - `GEReplLastOrder = 172` - - `GEReplIsAddedAttackPlane = 172` + - `GEReplIsAddedAttackPlane = 173` - - `HellMineTimeoutEnd = 173` + - `HellMineTimeoutEnd = 174` - - `HostileLQIsStoped = 174` + - `HostileLQIsStoped = 175` - - `HostileLQData = 175` + - `HostileLQData = 176` - - `SFAhs7Escort = 176` + - `SFAhs7Escort = 177` - - `SFHonomerPlayerId = 177` + - `SFHonomerPlayerId = 178` - - `SFEscortLocation = 178` + - `SFEscortLocation = 179` - - `SFLabFailed = 179` + - `SFLabFailed = 180` - - `QHubLabIsDialogRun = 180` + - `QHubLabIsDialogRun = 181` - - `BarterLourensRats1 = 181` + - `BarterLourensRats1 = 182` - - `ModLourenceRatsFlute = 182` + - `ModLourenceRatsFlute = 183` - - `BarterLourensRatBodycount = 183` + - `BarterLourensRatBodycount = 184` - - `ModHoughRatsFluteTimeout = 184` + - `ModHoughRatsFluteTimeout = 185` - - `ModLourenceToxinTimeout = 185` + - `ModLourenceToxinTimeout = 186` - - `ModLourenceRatsFluteCounter = 186` + - `ModLourenceRatsFluteCounter = 187` - - `ModLourenceLureActive = 187` + - `ModLourenceLureActive = 188` - - `GuardedItemSkill = 188` + - `GuardedItemSkill = 189` - - `V13DclawEggs = 189` + - `V13DclawEggs = 190` - - `KlamTorrCowboy = 190` + - `KlamTorrCowboy = 191` - - `KlamCowboyCountGav = 191` + - `KlamCowboyCountGav = 192` - - `KlamCowboyMobHx = 192` + - `KlamCowboyMobHx = 193` - - `KlamCowboyMobHy = 193` + - `KlamCowboyMobHy = 194` - - `KlamDantonBramin = 194` + - `KlamDantonBramin = 195` - - `KlamJosallDanton = 195` + - `KlamJosallDanton = 196` - - `KlamKuklachev = 196` + - `KlamKuklachev = 197` - - `KlamSmilyGecko = 197` + - `KlamSmilyGecko = 198` - - `KlamSmilyCurrentHp = 198` + - `KlamSmilyCurrentHp = 199` - - `KlamSmilyCountKills = 199` + - `KlamSmilyCountKills = 200` - - `KlamSmilyHealing = 200` + - `KlamSmilyHealing = 201` - - `LimitedBarterData = 201` + - `LimitedBarterData = 202` - - `IsGeck = 202` + - `IsGeck = 203` - - `StealExpCount = 203` + - `StealExpCount = 204` - - `FirstAidCount = 204` + - `FirstAidCount = 205` - - `MainQuest = 205` + - `MainQuest = 206` - - `GCityCitizen = 206` + - `GCityCitizen = 207` - - `MapGeckCityTraderSkillBarter = 207` + - `MapGeckCityTraderSkillBarter = 208` - - `MapKlamathRobotTimeNextSay = 208` + - `MapKlamathRobotTimeNextSay = 209` - - `ModJoeGiantWasp = 209` + - `ModJoeGiantWasp = 210` - - `TribSulikRaid = 210` + - `TribSulikRaid = 211` - - `TribRaiderKillCount = 211` + - `TribRaiderKillCount = 212` - - `NCRElizeSlavers = 212` + - `NCRElizeSlavers = 213` - - `MapPrimalTribeRaiderHx = 213` + - `MapPrimalTribeRaiderHx = 214` - - `MapPrimalTribeRaiderHy = 214` + - `MapPrimalTribeRaiderHy = 215` - - `SFRonKillBeasts = 215` + - `SFRonKillBeasts = 216` - - `SFRonFindbodies = 216` + - `SFRonFindbodies = 217` - - `SFTankerCentaurNoticed = 217` + - `SFTankerCentaurNoticed = 218` - - `SFTankerFloaterNoticed = 218` + - `SFTankerFloaterNoticed = 219` - - `MapSFTankerBicycleId = 219` + - `MapSFTankerBicycleId = 220` - - `MirelurkCombatCurStage = 220` + - `MirelurkCombatCurStage = 221` - - `MirelurkCombatTimeNextStage = 221` + - `MirelurkCombatTimeNextStage = 222` - - `MirelurkCombatLastBrokenBag = 222` + - `MirelurkCombatLastBrokenBag = 223` - - `MirelurkCombatDestroyingItem = 223` + - `MirelurkCombatDestroyingItem = 224` - - `MobAttackedId = 224` + - `MobAttackedId = 225` - - `MobFury = 225` + - `MobFury = 226` - - `MobFear = 226` + - `MobFear = 227` - - `MobMaxFear = 227` + - `MobMaxFear = 228` - - `ModVampireFarmLocation = 228` + - `ModVampireFarmLocation = 229` - - `MonologueData = 229` + - `MonologueData = 230` - - `NavHenryEmpTest = 230` + - `NavHenryEmpTest = 231` - - `NavEmpTestedCritter = 231` + - `NavEmpTestedCritter = 232` - - `NavarroTimeOutScan = 232` + - `NavarroTimeOutScan = 233` - - `NavarroChipUsedId = 233` + - `NavarroChipUsedId = 234` - - `NcrAlexHoloFindStatus = 234` + - `NcrAlexHoloFindStatus = 235` - - `NCRFelixFindBrahmin = 235` + - `NCRFelixFindBrahmin = 236` - - `NCRHubBook = 236` + - `NCRHubBook = 237` - - `NCRFelixSaveBrahmin = 237` + - `NCRFelixSaveBrahmin = 238` - - `NCRHubBookAccess1 = 238` + - `NCRHubBookAccess1 = 239` - - `NCRHubBookAccess2 = 239` + - `NCRHubBookAccess2 = 240` - - `NCRHubBookAccess3 = 240` + - `NCRHubBookAccess3 = 241` - - `NCRHubBookAccess4 = 241` + - `NCRHubBookAccess4 = 242` - - `NCRHubBookAccess5 = 242` + - `NCRHubBookAccess5 = 243` - - `NCRHubBookAccess6 = 243` + - `NCRHubBookAccess6 = 244` - - `NCRHubBookAccess7 = 244` + - `NCRHubBookAccess7 = 245` - - `NCRHubBookQuestTimeout = 245` + - `NCRHubBookQuestTimeout = 246` - - `NcrCommonBeggarInvokeId = 246` + - `NcrCommonBeggarInvokeId = 247` - - `NcrCommonBeggarPhraseNum = 247` + - `NcrCommonBeggarPhraseNum = 248` - - `NcrCommonBeggarHideMoneyInvocation = 248` + - `NcrCommonBeggarHideMoneyInvocation = 249` - - `NcrCommonBrahminId = 249` + - `NcrCommonBrahminId = 250` - - `QNcrElizeInvasion = 250` + - `QNcrElizeInvasion = 251` - - `NCRKarlsonSon = 251` + - `NCRKarlsonSon = 252` - - `NcrSonCatcherId = 252` + - `NcrSonCatcherId = 253` - - `NcrSonMovesCounter = 253` + - `NcrSonMovesCounter = 254` - - `NcrMichealMessageNum = 254` + - `NcrMichealMessageNum = 255` - - `MailDelivery = 255` + - `MailDelivery = 256` - - `NcrMailRecieverId = 256` + - `NcrMailRecieverId = 257` - - `NcrMailTimeout = 257` + - `NcrMailTimeout = 258` - - `NcrRatchBuggy = 258` + - `NcrRatchBuggy = 259` - - `NcrShaimanProtest = 259` + - `NcrShaimanProtest = 260` - - `NcrShaimanStringNum = 260` + - `NcrShaimanStringNum = 261` - - `NcrSiegeTerminate = 261` + - `NcrSiegeTerminate = 262` - - `NcrSiegeKillsCounter = 262` + - `NcrSiegeKillsCounter = 263` - - `NcrSmitVsVestinStatus = 263` + - `NcrSmitVsVestinStatus = 264` - - `NcrSmitStringNum = 264` + - `NcrSmitStringNum = 265` - - `NcrSmitGateStringNum = 265` + - `NcrSmitGateStringNum = 266` - - `NcrSmitPlayerId = 266` + - `NcrSmitPlayerId = 267` - - `NcrSmitIdleCount = 267` + - `NcrSmitIdleCount = 268` - - `NcrWestinMapPidTo = 268` + - `NcrWestinMapPidTo = 269` - - `NcrWestinHexNumTo = 269` + - `NcrWestinHexNumTo = 270` - - `NcrWestinEveryEveningInvokeId = 270` + - `NcrWestinEveryEveningInvokeId = 271` - - `NcrWestinEveryMorningInvokeId = 271` + - `NcrWestinEveryMorningInvokeId = 272` - - `LastBagRefreshedTime = 272` + - `LastBagRefreshedTime = 273` - - `LastNpcDialog = 273` + - `LastNpcDialog = 274` - - `NpcDialogStringNum = 274` + - `NpcDialogStringNum = 275` - - `Planes = 275` + - `Planes = 276` - - `NpcRevengeNpcHxHy = 276` + - `NpcRevengeNpcHxHy = 277` - - `NpcRevengeCountWait = 277` + - `NpcRevengeCountWait = 278` - - `NRWriKidnap = 278` + - `NRWriKidnap = 279` - - `NRSalvatoreKill = 279` + - `NRSalvatoreKill = 280` - - `NRWriKidnapNotifyTime = 280` + - `NRWriKidnapNotifyTime = 281` - - `NRKidnapKillsCounter = 281` + - `NRKidnapKillsCounter = 282` - - `QNrWriKidnapInvokeId = 282` + - `QNrWriKidnapInvokeId = 283` - - `NukeStock = 283` + - `NukeStock = 284` - - `NukeRestockTime = 284` + - `NukeRestockTime = 285` - - `PatternSniperCountRunning = 285` + - `PatternSniperCountRunning = 286` - - `PetOwnerId = 286` + - `PetOwnerId = 287` - - `PetLifeTime = 287` + - `PetLifeTime = 288` - - `IsGenerated = 288` + - `IsGenerated = 289` - - `PokerWins = 289` + - `PokerWins = 290` - - `PokerNumOfNpc = 290` + - `PokerNumOfNpc = 291` - - `PokerWincash = 291` + - `PokerWincash = 292` - - `PokerFraud = 292` + - `PokerFraud = 293` - - `PokerManywins = 293` + - `PokerManywins = 294` - - `PokerData = 294` + - `PokerData = 295` - - `QWarehouse = 295` + - `QWarehouse = 296` - - `QWarehouseSub1 = 296` + - `QWarehouseSub1 = 297` - - `QWarehouseSub2 = 297` + - `QWarehouseSub2 = 298` - - `WarehouseDataId = 298` + - `WarehouseDataId = 299` - - `WarehouseQuestData = 299` + - `WarehouseQuestData = 300` - - `WarehouseOther = 300` + - `WarehouseOther = 301` - - `RatGrenadeProtoId = 301` + - `RatGrenadeProtoId = 302` - - `RatGrenadeOwnerId = 302` + - `RatGrenadeOwnerId = 303` - - `ReddMineNuggets = 303` + - `ReddMineNuggets = 304` - - `ReddMarionWan = 304` + - `ReddMarionWan = 305` - - `ReddQWinamingoKills = 305` + - `ReddQWinamingoKills = 306` - - `ReddQWinamingoHealing = 306` + - `ReddQWinamingoHealing = 307` - - `ReddDoctorPoisoned = 307` + - `ReddDoctorPoisoned = 308` - - `ReddRooneyCemetery = 308` + - `ReddRooneyCemetery = 309` - - `CanRepairWeapons = 309` + - `CanRepairWeapons = 310` - - `CanRepairWeaponsSpecial = 310` + - `CanRepairWeaponsSpecial = 311` - - `CanRepairArmor = 311` + - `CanRepairArmor = 312` - - `CanRepairArmorSpecial = 312` + - `CanRepairArmorSpecial = 313` - - `RepairCompleteTime = 313` + - `RepairCompleteTime = 314` - - `RepairItemPid = 314` + - `RepairItemPid = 315` - - `ReplicationTime = 315` + - `ReplicationTime = 316` - - `HellVisits = 316` + - `HellVisits = 317` - - `ReplBankIsCanEnter = 317` + - `ReplBankIsCanEnter = 318` - - `ReplBankeIsAttackGagPlayer = 318` + - `ReplBankeIsAttackGagPlayer = 319` - - `ReplHellTurretHack = 319` + - `ReplHellTurretHack = 320` - - `TerminalPlayerId = 320` + - `TerminalPlayerId = 321` - - `TerminalDialogId = 321` + - `TerminalDialogId = 322` - - `ModFarrelAmmiak = 322` + - `ModFarrelAmmiak = 323` - - `RouletteCroupierNum = 323` + - `RouletteCroupierNum = 324` - - `RouletteBetCoord1 = 324` + - `RouletteBetCoord1 = 325` - - `RouletteBetCoord2 = 325` + - `RouletteBetCoord2 = 326` - - `RouletteBetCoord3 = 326` + - `RouletteBetCoord3 = 327` - - `RouletteBetSize = 327` + - `RouletteBetSize = 328` - - `RouletteBetType = 328` + - `RouletteBetType = 329` - - `RouletteData = 329` + - `RouletteData = 330` - - `CanSendSay = 330` + - `CanSendSay = 331` - - `Scores = 331` + - `Scores = 332` - - `SEAndroidMonologEnd = 332` + - `SEAndroidMonologEnd = 333` - - `SETalkingHeadStringNum = 333` + - `SETalkingHeadStringNum = 334` - - `SETeleportEatId = 334` + - `SETeleportEatId = 335` - - `SFAhs7HubJudgement = 335` + - `SFAhs7HubJudgement = 336` - - `SFLoPanBlackmailSum = 336` + - `SFLoPanBlackmailSum = 337` - - `SFHububJudgementLocId = 337` + - `SFHububJudgementLocId = 338` - - `SFHubJudgementKills = 338` + - `SFHubJudgementKills = 339` - - `SfMercMaster = 339` + - `SfMercMaster = 340` - - `SFCommonOneWeekInvokeId = 340` + - `SFCommonOneWeekInvokeId = 341` - - `SFCommonFightPlayerId = 341` + - `SFCommonFightPlayerId = 342` - - `ClickCounter = 342` + - `ClickCounter = 343` - - `SFInvasionMirelurkKills = 343` + - `SFInvasionMirelurkKills = 344` - - `BHRocketBase = 344` + - `BHRocketBase = 345` - - `NcrElizeSlvrsHunting = 345` + - `NcrElizeSlvrsHunting = 346` - - `NcrElizeSlvrsHuntingStatus = 346` + - `NcrElizeSlvrsHuntingStatus = 347` - - `NcrSantiagoSpyMission = 347` + - `NcrSantiagoSpyMission = 348` - - `QSpyMissonStringNum = 348` + - `QSpyMissonStringNum = 349` - - `TimeoutBattle = 349` + - `TimeoutBattle = 350` - - `TimeoutTransfer = 350` + - `TimeoutTransfer = 351` - - `WalkSpeedBase = 351` + - `WalkSpeedBase = 352` - - `WalkSpeed = 352` + - `WalkSpeed = 353` - - `IsNoMove = 353` + - `IsNoMove = 354` - - `IsNoMoveBase = 354` + - `IsNoMoveBase = 355` - - `IsNoRun = 355` + - `IsNoRun = 356` - - `IsNoRunBase = 356` + - `IsNoRunBase = 357` - - `Strength = 357` + - `Strength = 358` - - `StrengthBase = 358` + - `StrengthBase = 359` - - `Perception = 359` + - `Perception = 360` - - `PerceptionBase = 360` + - `PerceptionBase = 361` - - `Endurance = 361` + - `Endurance = 362` - - `EnduranceBase = 362` + - `EnduranceBase = 363` - - `Charisma = 363` + - `Charisma = 364` - - `CharismaBase = 364` + - `CharismaBase = 365` - - `Intellect = 365` + - `Intellect = 366` - - `IntellectBase = 366` + - `IntellectBase = 367` - - `Agility = 367` + - `Agility = 368` - - `AgilityBase = 368` + - `AgilityBase = 369` - - `Luck = 369` + - `Luck = 370` - - `LuckBase = 370` + - `LuckBase = 371` - - `ArmorClass = 371` + - `ArmorClass = 372` - - `CurrentHp = 372` + - `CurrentHp = 373` - - `MaxLife = 373` + - `MaxLife = 374` - - `MaxLifeBase = 374` + - `MaxLifeBase = 375` - - `ActionPointsBase = 375` + - `ActionPointsBase = 376` - - `ArmorClassBase = 376` + - `ArmorClassBase = 377` - - `MeleeDamage = 377` + - `MeleeDamage = 378` - - `MeleeDamageBase = 378` + - `MeleeDamageBase = 379` - - `IsOverweight = 379` + - `IsOverweight = 380` - - `CarryWeight = 380` + - `CarryWeight = 381` - - `CarryWeightBase = 381` + - `CarryWeightBase = 382` - - `Sequence = 382` + - `Sequence = 383` - - `SequenceBase = 383` + - `SequenceBase = 384` - - `HealingRate = 384` + - `HealingRate = 385` - - `HealingRateBase = 385` + - `HealingRateBase = 386` - - `CriticalChance = 386` + - `CriticalChance = 387` - - `CriticalChanceBase = 387` + - `CriticalChanceBase = 388` - - `MaxCritical = 388` + - `MaxCritical = 389` - - `MaxCriticalBase = 389` + - `MaxCriticalBase = 390` - - `Toxic = 390` + - `Toxic = 391` - - `Radioactive = 391` + - `Radioactive = 392` - - `KillExperience = 392` + - `KillExperience = 393` - - `BodyType = 393` + - `BodyType = 394` - - `LocomotionType = 394` + - `LocomotionType = 395` - - `DamageType = 395` + - `DamageType = 396` - - `Age = 396` + - `Age = 397` - - `Gender = 397` + - `Gender = 398` - - `PoisoningLevel = 398` + - `PoisoningLevel = 399` - - `RadiationLevel = 399` + - `RadiationLevel = 400` - - `UnspentSkillPoints = 400` + - `UnspentSkillPoints = 401` - - `UnspentPerks = 401` + - `UnspentPerks = 402` - - `Karma = 402` + - `Karma = 403` - - `ReplicationMoney = 403` + - `ReplicationMoney = 404` - - `ReplicationCount = 404` + - `ReplicationCount = 405` - - `ReplicationCost = 405` + - `ReplicationCost = 406` - - `RateObject = 406` + - `RateObject = 407` - - `BonusLook = 407` + - `BonusLook = 408` - - `NpcRole = 408` + - `NpcRole = 409` - - `AiId = 409` + - `AiId = 410` - - `TeamId = 410` + - `TeamId = 411` - - `NextCrType = 411` + - `NextCrType = 412` - - `DeadBlockerId = 412` + - `DeadBlockerId = 413` - - `CurrentArmorPerk = 413` + - `CurrentArmorPerk = 414` - - `NextReplicationMap = 414` + - `NextReplicationMap = 415` - - `NextReplicationEntry = 415` + - `NextReplicationEntry = 416` - - `PlayerKarma = 416` + - `PlayerKarma = 417` - - `ArmorPerk = 417` + - `ArmorPerk = 418` - - `LastStealCrId = 418` + - `LastStealCrId = 419` - - `StealCount = 419` + - `StealCount = 420` - - `GlobalMapMoveCounter = 420` + - `GlobalMapMoveCounter = 421` - - `Experience = 421` + - `Experience = 422` - - `MaxMoveApBase = 422` + - `MaxMoveApBase = 423` - - `AnimType = 423` + - `AnimType = 424` - - `IsNoUnarmed = 424` + - `IsNoUnarmed = 425` - - `KnownLocProtoId = 425` + - `KnownLocProtoId = 426` - - `IsNoHome = 426` + - `IsNoHome = 427` - - `HomeMapId = 427` + - `HomeMapId = 428` - - `HomeMapPid = 428` + - `HomeMapPid = 429` - - `HomeHexX = 429` + - `HomeHexX = 430` - - `HomeHexY = 430` + - `HomeHexY = 431` - - `HomeDir = 431` + - `HomeDir = 432` - - `IsNoTalk = 432` + - `IsNoTalk = 433` - - `MapLeaveHexX = 433` + - `MapLeaveHexX = 434` - - `MapLeaveHexY = 434` + - `MapLeaveHexY = 435` - - `SpecialSkillPickOnGround = 435` + - `SpecialSkillPickOnGround = 436` - - `FollowLeaderId = 436` + - `FollowLeaderId = 437` - - `LastSendEntrancesLocId = 437` + - `LastSendEntrancesLocId = 438` - - `LastSendEntrancesTick = 438` + - `LastSendEntrancesTick = 439` - - `CrTypeAliasBase = 439` + - `CrTypeAliasBase = 440` - - `CrTypeAlias = 440` + - `CrTypeAlias = 441` - - `ModelNameBase = 441` + - `ModelNameBase = 442` - - `IsNoArmor = 442` + - `IsNoArmor = 443` - - `Anims = 443` + - `Anims = 444` - - `IsNoAim = 444` + - `IsNoAim = 445` - - `Kills = 445` + - `Kills = 446` - - `KillMen = 446` + - `KillMen = 447` - - `KillWomen = 447` + - `KillWomen = 448` - - `KillAlien = 448` + - `KillAlien = 449` - - `KillChildren = 449` + - `KillChildren = 450` - - `KillFloater = 450` + - `KillFloater = 451` - - `KillRat = 451` + - `KillRat = 452` - - `KillCentaur = 452` + - `KillCentaur = 453` - - `ReputationDen = 453` + - `ReputationDen = 454` - - `ReputationKlamath = 454` + - `ReputationKlamath = 455` - - `ReputationModoc = 455` + - `ReputationModoc = 456` - - `ReputationVaultCity = 456` + - `ReputationVaultCity = 457` - - `ReputationGecko = 457` + - `ReputationGecko = 458` - - `ReputationBrokenHills = 458` + - `ReputationBrokenHills = 459` - - `ReputationNewReno = 459` + - `ReputationNewReno = 460` - - `ReputationSierra = 460` + - `ReputationSierra = 461` - - `ReputationVault15 = 461` + - `ReputationVault15 = 462` - - `ReputationNCR = 462` + - `ReputationNCR = 463` - - `ReputationCathedral = 463` + - `ReputationCathedral = 464` - - `ReputationSAD = 464` + - `ReputationSAD = 465` - - `ReputationRedding = 465` + - `ReputationRedding = 466` - - `ReputationSF = 466` + - `ReputationSF = 467` - - `ReputationNavarro = 467` + - `ReputationNavarro = 468` - - `ReputationArroyo = 468` + - `ReputationArroyo = 469` - - `ReputationPrimalTribe = 469` + - `ReputationPrimalTribe = 470` - - `ReputationRangers = 470` + - `ReputationRangers = 471` - - `ReputationVault13 = 471` + - `ReputationVault13 = 472` - - `ReputationSacramento = 472` + - `ReputationSacramento = 473` - - `Addictions = 473` + - `Addictions = 474` - - `IsAddicted = 474` + - `IsAddicted = 475` - - `IsJetAddicted = 475` + - `IsJetAddicted = 476` - - `IsBuffoutAddicted = 476` + - `IsBuffoutAddicted = 477` - - `IsMentatsAddicted = 477` + - `IsMentatsAddicted = 478` - - `IsPsychoAddicted = 478` + - `IsPsychoAddicted = 479` - - `IsRadawayAddicted = 479` + - `IsRadawayAddicted = 480` - - `DamageResistance = 480` + - `DamageResistance = 481` - - `NormalResistance = 481` + - `NormalResistance = 482` - - `PoisonResistance = 482` + - `PoisonResistance = 483` - - `RadiationResistance = 483` + - `RadiationResistance = 484` - - `ExplodeResistance = 484` + - `ExplodeResistance = 485` - - `NormalResistanceBase = 485` + - `NormalResistanceBase = 486` - - `LaserResistanceBase = 486` + - `LaserResistanceBase = 487` - - `FireResistanceBase = 487` + - `FireResistanceBase = 488` - - `PlasmaResistanceBase = 488` + - `PlasmaResistanceBase = 489` - - `ElectricityResistanceBase = 489` + - `ElectricityResistanceBase = 490` - - `EmpResistanceBase = 490` + - `EmpResistanceBase = 491` - - `ExplodeResistanceBase = 491` + - `ExplodeResistanceBase = 492` - - `PoisonResistanceBase = 492` + - `PoisonResistanceBase = 493` - - `RadiationResistanceBase = 493` + - `RadiationResistanceBase = 494` - - `DamageThreshold = 494` + - `DamageThreshold = 495` - - `NormalThresholdBase = 495` + - `NormalThresholdBase = 496` - - `LaserThresholdBase = 496` + - `LaserThresholdBase = 497` - - `FireThresholdBase = 497` + - `FireThresholdBase = 498` - - `PlasmaThresholdBase = 498` + - `PlasmaThresholdBase = 499` - - `ElectricityThresholdBase = 499` + - `ElectricityThresholdBase = 500` - - `EmpThresholdBase = 500` + - `EmpThresholdBase = 501` - - `ExplodeThresholdBase = 501` + - `ExplodeThresholdBase = 502` - - `PoisonThresholdBase = 502` + - `PoisonThresholdBase = 503` - - `RadiationThresholdBase = 503` + - `RadiationThresholdBase = 504` - - `IsPoisoned = 504` + - `IsPoisoned = 505` - - `IsRadiated = 505` + - `IsRadiated = 506` - - `IsInjured = 506` + - `IsInjured = 507` - - `IsDamagedEye = 507` + - `IsDamagedEye = 508` - - `IsDamagedRightArm = 508` + - `IsDamagedRightArm = 509` - - `IsDamagedLeftArm = 509` + - `IsDamagedLeftArm = 510` - - `IsDamagedRightLeg = 510` + - `IsDamagedRightLeg = 511` - - `IsDamagedLeftLeg = 511` + - `IsDamagedLeftLeg = 512` - - `Var0 = 512` + - `Var0 = 513` - - `Var1 = 513` + - `Var1 = 514` - - `Var2 = 514` + - `Var2 = 515` - - `Var3 = 515` + - `Var3 = 516` - - `Var4 = 516` + - `Var4 = 517` - - `Var5 = 517` + - `Var5 = 518` - - `Var6 = 518` + - `Var6 = 519` - - `Var7 = 519` + - `Var7 = 520` - - `Var8 = 520` + - `Var8 = 521` - - `Var9 = 521` + - `Var9 = 522` - - `SkillSmallGuns = 522` + - `SkillSmallGuns = 523` - - `SkillBigGuns = 523` + - `SkillBigGuns = 524` - - `SkillEnergyWeapons = 524` + - `SkillEnergyWeapons = 525` - - `SkillUnarmed = 525` + - `SkillUnarmed = 526` - - `SkillMeleeWeapons = 526` + - `SkillMeleeWeapons = 527` - - `SkillThrowing = 527` + - `SkillThrowing = 528` - - `SkillFirstAid = 528` + - `SkillFirstAid = 529` - - `SkillDoctor = 529` + - `SkillDoctor = 530` - - `SkillSneak = 530` + - `SkillSneak = 531` - - `SkillLockpick = 531` + - `SkillLockpick = 532` - - `SkillSteal = 532` + - `SkillSteal = 533` - - `SkillTraps = 533` + - `SkillTraps = 534` - - `SkillScience = 534` + - `SkillScience = 535` - - `SkillRepair = 535` + - `SkillRepair = 536` - - `SkillSpeech = 536` + - `SkillSpeech = 537` - - `SkillBarter = 537` + - `SkillBarter = 538` - - `SkillGambling = 538` + - `SkillGambling = 539` - - `SkillOutdoorsman = 539` + - `SkillOutdoorsman = 540` - - `TagSkills = 540` + - `TagSkills = 541` - - `TagSkill1 = 541` + - `TagSkill1 = 542` - - `TagSkill2 = 542` + - `TagSkill2 = 543` - - `TagSkill3 = 543` + - `TagSkill3 = 544` - - `PerkBookworm = 544` + - `PerkBookworm = 545` - - `PerkAwareness = 545` + - `PerkAwareness = 546` - - `PerkBonusHthAttacks = 546` + - `PerkBonusHthAttacks = 547` - - `PerkBonusHthDamage = 547` + - `PerkBonusHthDamage = 548` - - `PerkBonusRangedDamage = 548` + - `PerkBonusRangedDamage = 549` - - `PerkBonusRateOfFire = 549` + - `PerkBonusRateOfFire = 550` - - `PerkEarlierSequence = 550` + - `PerkEarlierSequence = 551` - - `PerkFasterHealing = 551` + - `PerkFasterHealing = 552` - - `PerkMoreCriticals = 552` + - `PerkMoreCriticals = 553` - - `PerkNightVision = 553` + - `PerkNightVision = 554` - - `PerkRadResistance = 554` + - `PerkRadResistance = 555` - - `PerkToughness = 555` + - `PerkToughness = 556` - - `PerkStrongBack = 556` + - `PerkStrongBack = 557` - - `PerkSharpshooter = 557` + - `PerkSharpshooter = 558` - - `PerkSurvivalist = 558` + - `PerkSurvivalist = 559` - - `PerkEducated = 559` + - `PerkEducated = 560` - - `PerkHealer = 560` + - `PerkHealer = 561` - - `PerkFortuneFinder = 561` + - `PerkFortuneFinder = 562` - - `PerkBetterCriticals = 562` + - `PerkBetterCriticals = 563` - - `PerkEmpathy = 563` + - `PerkEmpathy = 564` - - `PerkSlayer = 564` + - `PerkSlayer = 565` - - `PerkSniper = 565` + - `PerkSniper = 566` - - `PerkSilentDeath = 566` + - `PerkSilentDeath = 567` - - `PerkActionBoy = 567` + - `PerkActionBoy = 568` - - `PerkMentalBlock = 568` + - `PerkMentalBlock = 569` - - `PerkLifegiver = 569` + - `PerkLifegiver = 570` - - `PerkDodger = 570` + - `PerkDodger = 571` - - `PerkSnakeater = 571` + - `PerkSnakeater = 572` - - `PerkMrFixit = 572` + - `PerkMrFixit = 573` - - `PerkMedic = 573` + - `PerkMedic = 574` - - `PerkMasterThief = 574` + - `PerkMasterThief = 575` - - `PerkSpeaker = 575` + - `PerkSpeaker = 576` - - `PerkHeaveHo = 576` + - `PerkHeaveHo = 577` - - `PerkFriendlyFoe = 577` + - `PerkFriendlyFoe = 578` - - `PerkPickpocket = 578` + - `PerkPickpocket = 579` - - `PerkGhost = 579` + - `PerkGhost = 580` - - `PerkCultOfPersonality = 580` + - `PerkCultOfPersonality = 581` - - `PerkScrounger = 581` + - `PerkScrounger = 582` - - `PerkExplorer = 582` + - `PerkExplorer = 583` - - `PerkFlowerChild = 583` + - `PerkFlowerChild = 584` - - `PerkPathfinder = 584` + - `PerkPathfinder = 585` - - `PerkAnimalFriend = 585` + - `PerkAnimalFriend = 586` - - `PerkScout = 586` + - `PerkScout = 587` - - `PerkMysteriousStranger = 587` + - `PerkMysteriousStranger = 588` - - `PerkRanger = 588` + - `PerkRanger = 589` - - `PerkSmoothTalker = 589` + - `PerkSmoothTalker = 590` - - `PerkSwiftLearner = 590` + - `PerkSwiftLearner = 591` - - `PerkTag = 591` + - `PerkTag = 592` - - `PerkMutate = 592` + - `PerkMutate = 593` - - `PerkAdrenalineRush = 593` + - `PerkAdrenalineRush = 594` - - `PerkCautiousNature = 594` + - `PerkCautiousNature = 595` - - `PerkComprehension = 595` + - `PerkComprehension = 596` - - `PerkDemolitionExpert = 596` + - `PerkDemolitionExpert = 597` - - `PerkGambler = 597` + - `PerkGambler = 598` - - `PerkGainStrength = 598` + - `PerkGainStrength = 599` - - `PerkGainPerception = 599` + - `PerkGainPerception = 600` - - `PerkGainEndurance = 600` + - `PerkGainEndurance = 601` - - `PerkGainCharisma = 601` + - `PerkGainCharisma = 602` - - `PerkGainIntelligence = 602` + - `PerkGainIntelligence = 603` - - `PerkGainAgility = 603` + - `PerkGainAgility = 604` - - `PerkGainLuck = 604` + - `PerkGainLuck = 605` - - `PerkHarmless = 605` + - `PerkHarmless = 606` - - `PerkHereAndNow = 606` + - `PerkHereAndNow = 607` - - `PerkHthEvade = 607` + - `PerkHthEvade = 608` - - `PerkKamaSutraMaster = 608` + - `PerkKamaSutraMaster = 609` - - `PerkKarmaBeacon = 609` + - `PerkKarmaBeacon = 610` - - `PerkLightStep = 610` + - `PerkLightStep = 611` - - `PerkLivingAnatomy = 611` + - `PerkLivingAnatomy = 612` - - `PerkMagneticPersonality = 612` + - `PerkMagneticPersonality = 613` - - `PerkNegotiator = 613` + - `PerkNegotiator = 614` - - `PerkPackRat = 614` + - `PerkPackRat = 615` - - `PerkPyromaniac = 615` + - `PerkPyromaniac = 616` - - `PerkQuickRecovery = 616` + - `PerkQuickRecovery = 617` - - `PerkSalesman = 617` + - `PerkSalesman = 618` - - `PerkStonewall = 618` + - `PerkStonewall = 619` - - `PerkThief = 619` + - `PerkThief = 620` - - `PerkWeaponHandling = 620` + - `PerkWeaponHandling = 621` - - `PerkVaultCityTraining = 621` + - `PerkVaultCityTraining = 622` - - `PerkExpertExcrement = 622` + - `PerkExpertExcrement = 623` - - `PerkTerminator = 623` + - `PerkTerminator = 624` - - `PerkGeckoSkinning = 624` + - `PerkGeckoSkinning = 625` - - `PerkVaultCityInoculations = 625` + - `PerkVaultCityInoculations = 626` - - `PerkDermalImpact = 626` + - `PerkDermalImpact = 627` - - `PerkDermalImpactEnh = 627` + - `PerkDermalImpactEnh = 628` - - `PerkPhoenixImplants = 628` + - `PerkPhoenixImplants = 629` - - `PerkPhoenixImplantsEnh = 629` + - `PerkPhoenixImplantsEnh = 630` - - `PerkNcrPerception = 630` + - `PerkNcrPerception = 631` - - `PerkNcrEndurance = 631` + - `PerkNcrEndurance = 632` - - `PerkNcrBarter = 632` + - `PerkNcrBarter = 633` - - `PerkNcrRepair = 633` + - `PerkNcrRepair = 634` - - `PerkVampireAccuracy = 634` + - `PerkVampireAccuracy = 635` - - `PerkVampireRegeneration = 635` + - `PerkVampireRegeneration = 636` - - `PerkQuickPockets = 636` + - `PerkQuickPockets = 637` - - `PerkMasterTrader = 637` + - `PerkMasterTrader = 638` - - `PerkSilentRunning = 638` + - `PerkSilentRunning = 639` - - `PerkBonusMove = 639` + - `PerkBonusMove = 640` - - `KarmaPerkBerserker = 640` + - `KarmaPerkBerserker = 641` - - `KarmaPerkChampion = 641` + - `KarmaPerkChampion = 642` - - `KarmaPerkChildkiller = 642` + - `KarmaPerkChildkiller = 643` - - `KarmaPerkSexpert = 643` + - `KarmaPerkSexpert = 644` - - `KarmaPerkPrizefighter = 644` + - `KarmaPerkPrizefighter = 645` - - `KarmaPerkGigolo = 645` + - `KarmaPerkGigolo = 646` - - `KarmaPerkGraveDigger = 646` + - `KarmaPerkGraveDigger = 647` - - `KarmaPerkMarried = 647` + - `KarmaPerkMarried = 648` - - `KarmaPerkPornStar = 648` + - `KarmaPerkPornStar = 649` - - `KarmaPerkSlaver = 649` + - `KarmaPerkSlaver = 650` - - `KarmaPerkVirginWastes = 650` + - `KarmaPerkVirginWastes = 651` - - `KarmaPerkManSalvatore = 651` + - `KarmaPerkManSalvatore = 652` - - `KarmaPerkManBishop = 652` + - `KarmaPerkManBishop = 653` - - `KarmaPerkManMordino = 653` + - `KarmaPerkManMordino = 654` - - `KarmaPerkManWright = 654` + - `KarmaPerkManWright = 655` - - `KarmaPerkSeparated = 655` + - `KarmaPerkSeparated = 656` - - `KarmaPerkPedobear = 656` + - `KarmaPerkPedobear = 657` - - `KarmaPerkVcGuardsman = 657` + - `KarmaPerkVcGuardsman = 658` - - `IsTraitFastMetabolism = 658` + - `IsTraitFastMetabolism = 659` - - `IsTraitBruiser = 659` + - `IsTraitBruiser = 660` - - `IsTraitSmallFrame = 660` + - `IsTraitSmallFrame = 661` - - `IsTraitOneHander = 661` + - `IsTraitOneHander = 662` - - `IsTraitFinesse = 662` + - `IsTraitFinesse = 663` - - `IsTraitKamikaze = 663` + - `IsTraitKamikaze = 664` - - `IsTraitHeavyHanded = 664` + - `IsTraitHeavyHanded = 665` - - `IsTraitFastShot = 665` + - `IsTraitFastShot = 666` - - `IsTraitBloodyMess = 666` + - `IsTraitBloodyMess = 667` - - `IsTraitJinxed = 667` + - `IsTraitJinxed = 668` - - `IsTraitJinxedII = 668` + - `IsTraitJinxedII = 669` - - `IsTraitGoodNatured = 669` + - `IsTraitGoodNatured = 670` - - `IsTraitChemReliant = 670` + - `IsTraitChemReliant = 671` - - `IsTraitChemResistant = 671` + - `IsTraitChemResistant = 672` - - `IsTraitSexAppeal = 672` + - `IsTraitSexAppeal = 673` - - `IsTraitSkilled = 673` + - `IsTraitSkilled = 674` - - `IsTraitNightPerson = 674` + - `IsTraitNightPerson = 675` - - `TimeoutSkFirstAid = 675` + - `TimeoutSkFirstAid = 676` - - `TimeoutSkDoctor = 676` + - `TimeoutSkDoctor = 677` - - `TimeoutSkRepair = 677` + - `TimeoutSkRepair = 678` - - `TimeoutSkScience = 678` + - `TimeoutSkScience = 679` - - `TimeoutSkLockpick = 679` + - `TimeoutSkLockpick = 680` - - `TimeoutSkSteal = 680` + - `TimeoutSkSteal = 681` - - `TimeoutSkOutdoorsman = 681` + - `TimeoutSkOutdoorsman = 682` - - `TimeoutRemoveFromGame = 682` + - `TimeoutRemoveFromGame = 683` - - `TimeoutReplication = 683` + - `TimeoutReplication = 684` - - `TimeoutKarmaVoting = 684` + - `TimeoutKarmaVoting = 685` - - `TimeoutSneak = 685` + - `TimeoutSneak = 686` - - `TimeoutHealing = 686` + - `TimeoutHealing = 687` - - `TimeoutStealing = 687` + - `TimeoutStealing = 688` - - `TimeoutAggressor = 688` + - `TimeoutAggressor = 689` - - `MercMasterId = 689` + - `MercMasterId = 690` - - `MercAlwaysRun = 690` + - `MercAlwaysRun = 691` - - `MercCancelOnAttack = 691` + - `MercCancelOnAttack = 692` - - `MercLoseDist = 692` + - `MercLoseDist = 693` - - `MercMasterDist = 693` + - `MercMasterDist = 694` - - `MercType = 694` + - `MercType = 695` - - `MercDefendMaster = 695` + - `MercDefendMaster = 696` - - `MercAssistMaster = 696` + - `MercAssistMaster = 697` - - `MercCancelTime = 697` + - `MercCancelTime = 698` - - `MercCancelOnGlobal = 698` + - `MercCancelOnGlobal = 699` - - `MercWaitForMaster = 699` + - `MercWaitForMaster = 700` - - `ArroyoMynocDefence = 700` + - `ArroyoMynocDefence = 701` - - `ArroyoCassidyLetter = 701` + - `ArroyoCassidyLetter = 702` - - `ArroyoMynocOil = 702` + - `ArroyoMynocOil = 703` - - `ArroyoProofOfDeath = 703` + - `ArroyoProofOfDeath = 704` - - `ArroyoLetterToLinnett = 704` + - `ArroyoLetterToLinnett = 705` - - `KlamSallyFindProstitute = 705` + - `KlamSallyFindProstitute = 706` - - `KlamBobWater = 706` + - `KlamBobWater = 707` - - `KlamFindTrappers = 707` + - `KlamFindTrappers = 708` - - `KlamBugenLure = 708` + - `KlamBugenLure = 709` - - `KlamNotifyHusband = 709` + - `KlamNotifyHusband = 710` - - `KlamEidenBramin = 710` + - `KlamEidenBramin = 711` - - `KlamSmilyModoc = 711` + - `KlamSmilyModoc = 712` - - `DenBillRacingWin = 712` + - `DenBillRacingWin = 713` - - `DenLeannaCondom = 713` + - `DenLeannaCondom = 714` - - `QDenAnanDoll = 714` + - `QDenAnanDoll = 715` - - `DenAnanRedoll = 715` + - `DenAnanRedoll = 716` - - `DenGhost = 716` + - `DenGhost = 717` - - `DenBillRacingOpening = 717` + - `DenBillRacingOpening = 718` - - `DenCarstopJeffry = 718` + - `DenCarstopJeffry = 719` - - `DenCarstopBrahmin = 719` + - `DenCarstopBrahmin = 720` - - `DenCarstopBreeder = 720` + - `DenCarstopBreeder = 721` - - `DenJoeySteal = 721` + - `DenJoeySteal = 722` - - `DenJaneDolg = 722` + - `DenJaneDolg = 723` - - `DenJanePsycho = 723` + - `DenJanePsycho = 724` - - `DenLaraPostal = 724` + - `DenLaraPostal = 725` - - `DenFlikJet = 725` + - `DenFlikJet = 726` - - `DenLaraBand = 726` + - `DenLaraBand = 727` - - `DenJoeyLoan = 727` + - `DenJoeyLoan = 728` - - `DenLaraBos = 728` + - `DenLaraBos = 729` - - `QDenCliffDealer = 729` + - `QDenCliffDealer = 730` - - `DenFredStim = 730` + - `DenFredStim = 731` - - `DenJaneVodka = 731` + - `DenJaneVodka = 732` - - `DenMomSlut = 732` + - `DenMomSlut = 733` - - `DenSmittyBatt = 733` + - `DenSmittyBatt = 734` - - `DenJaneMeat = 734` + - `DenJaneMeat = 735` - - `DenJaneStim = 735` + - `DenJaneStim = 736` - - `DenLaraMolotovCoctail = 736` + - `DenLaraMolotovCoctail = 737` - - `DenLeannaBuy = 737` + - `DenLeannaBuy = 738` - - `DenSmittyBoots = 738` + - `DenSmittyBoots = 739` - - `DenJaneGuns = 739` + - `DenJaneGuns = 740` - - `DenSmittyKey = 740` + - `DenSmittyKey = 741` - - `DenJaneArmor = 741` + - `DenJaneArmor = 742` - - `DenSmittyAmmo = 742` + - `DenSmittyAmmo = 743` - - `DenJaneHunt = 743` + - `DenJaneHunt = 744` - - `DenJoeyKnife = 744` + - `DenJoeyKnife = 745` - - `DenJoeyLara = 745` + - `DenJoeyLara = 746` - - `DenJaneRadio = 746` + - `DenJaneRadio = 747` - - `DenJoeyJet = 747` + - `DenJoeyJet = 748` - - `DenLaraTrust = 748` + - `DenLaraTrust = 749` - - `DenLeannaWine = 749` + - `DenLeannaWine = 750` - - `DenMomRadscorp = 750` + - `DenMomRadscorp = 751` - - `DenSmittyFixit = 751` + - `DenSmittyFixit = 752` - - `QDenLeannaThief = 752` + - `QDenLeannaThief = 753` - - `ModJoeFarm = 753` + - `ModJoeFarm = 754` - - `ModHose = 754` + - `ModHose = 755` - - `ModBaltasGecko = 755` + - `ModBaltasGecko = 756` - - `ModLourenceRatsColony = 756` + - `ModLourenceRatsColony = 757` - - `ModLourenceFloater = 757` + - `ModLourenceFloater = 758` - - `ModJoeVampire = 758` + - `ModJoeVampire = 759` - - `BHMarcusEscort = 759` + - `BHMarcusEscort = 760` - - `BHSuperNewTechnology = 760` + - `BHSuperNewTechnology = 761` - - `ReddDocRadio = 761` + - `ReddDocRadio = 762` - - `ReddDocRadioTroy = 762` + - `ReddDocRadioTroy = 763` - - `ReddDocRadioFung = 763` + - `ReddDocRadioFung = 764` - - `ReddDocRadioHoliday = 764` + - `ReddDocRadioHoliday = 765` - - `ReddDocRadioJubiley = 765` + - `ReddDocRadioJubiley = 766` - - `ReddHubbChildkiller = 766` + - `ReddHubbChildkiller = 767` - - `ReddMarionVinamingo = 767` + - `ReddMarionVinamingo = 768` - - `ReddDoctorDelivery = 768` + - `ReddDoctorDelivery = 769` - - `NavHenryProtoMaterials = 769` + - `NavHenryProtoMaterials = 770` - - `NavSoftJob = 770` + - `NavSoftJob = 771` - - `NcrHatePatrol = 771` + - `NcrHatePatrol = 772` - - `NcrSantiagaFindSpyStatus = 772` + - `NcrSantiagaFindSpyStatus = 773` - - `NcrBusterBrokenrifles = 773` + - `NcrBusterBrokenrifles = 774` - - `NcrKessMedBoardStatus = 774` + - `NcrKessMedBoardStatus = 775` - - `NcrDorotyFindHenryPapers = 775` + - `NcrDorotyFindHenryPapers = 776` - - `NcrLeadSmit2Dustybar = 776` + - `NcrLeadSmit2Dustybar = 777` - - `NcrKyleReddRecon = 777` + - `NcrKyleReddRecon = 778` - - `NcrDuppoFindDasies = 778` + - `NcrDuppoFindDasies = 779` - - `NcrDappoLostC = 779` + - `NcrDappoLostC = 780` - - `QChosen = 780` + - `QChosen = 781` - - `NRBarmenEscort = 781` + - `NRBarmenEscort = 782` - - `SFAhs7ImperatorFormat = 782` + - `SFAhs7ImperatorFormat = 783` - - `SFEvaHelpWithZax = 783` + - `SFEvaHelpWithZax = 784` - - `SFKenliImperatorRestore = 784` + - `SFKenliImperatorRestore = 785` - - `SFLoPanBlackmail = 785` + - `SFLoPanBlackmail = 786` - - `SFTigangRecipe = 786` + - `SFTigangRecipe = 787` - - `SFNarcoman = 787` + - `SFNarcoman = 788` - - `SFAhs7Invitations = 788` + - `SFAhs7Invitations = 789` - - `SFSlimSidnancy = 789` + - `SFSlimSidnancy = 790` - - `VCLetterToTodd = 790` + - `VCLetterToTodd = 791` - - `VCValeryMail = 791` + - `VCValeryMail = 792` - - `VCCindyLetter = 792` + - `VCCindyLetter = 793` - - `VCHartmannRecon = 793` + - `VCHartmannRecon = 794` - - `VCHartmanNcrHelp = 794` + - `VCHartmanNcrHelp = 795` - - `VCBarmenDelivery = 795` + - `VCBarmenDelivery = 796` - - `VCCharlie = 796` + - `VCCharlie = 797` - - `VCTroyFreshBlood = 797` + - `VCTroyFreshBlood = 798` - - `VCAndrewDeliveries = 798` + - `VCAndrewDeliveries = 799` - - `VCBlackEscort = 799` + - `VCBlackEscort = 800` - - `VCHartmanFight = 800` + - `VCHartmanFight = 801` - - `VCLynettScareNewcomers = 801` + - `VCLynettScareNewcomers = 802` - - `VCHartmanRifles = 802` + - `VCHartmanRifles = 803` - - `VCHeleneTroyBeauty = 803` + - `VCHeleneTroyBeauty = 804` - - `TribSulikStuff = 804` + - `TribSulikStuff = 805` - - `TribMuscoTest = 805` + - `TribMuscoTest = 806` - - `TribShamanPowder = 806` + - `TribShamanPowder = 807` - - `TribMaiaraBook = 807` + - `TribMaiaraBook = 808` - - `TribManotaNecklace = 808` + - `TribManotaNecklace = 809` - - `BHDeadSaboteursCounter = 809` + - `BHDeadSaboteursCounter = 810` - - `SpecialAndroid = 810` + - `SpecialAndroid = 811` - - `VCLynettRefuse = 811` + - `VCLynettRefuse = 812` - - `DialogTimeout = 812` + - `DialogTimeout = 813` - - `EncLoyalityHubologists = 813` + - `EncLoyalityHubologists = 814` - - `EncLoyalityNcr = 814` + - `EncLoyalityNcr = 815` - - `EncLoyalityVCity = 815` + - `EncLoyalityVCity = 816` - - `EncLoyalityRedding = 816` + - `EncLoyalityRedding = 817` - - `EncLoyalityBroken = 817` + - `EncLoyalityBroken = 818` - - `EncLoyalityGecko = 818` + - `EncLoyalityGecko = 819` - - `EncLoyalityArroyo = 819` + - `EncLoyalityArroyo = 820` - - `EncLoyalityKlamath = 820` + - `EncLoyalityKlamath = 821` - - `EncLoyalityModoc = 821` + - `EncLoyalityModoc = 822` - - `EncLoyalityDen = 822` + - `EncLoyalityDen = 823` - - `EncLoyalityReno = 823` + - `EncLoyalityReno = 824` - - `EncLoyalityEnclave = 824` + - `EncLoyalityEnclave = 825` - - `EncLoyalitySf = 825` + - `EncLoyalitySf = 826` - - `ModLourenceToxinRecipe = 826` + - `ModLourenceToxinRecipe = 827` - - `SFChitinArmorRecipeKnown = 827` + - `SFChitinArmorRecipeKnown = 828` - - `SpyCathActive = 828` + - `SpyCathActive = 829` - - `HasNotCard = 829` + - `HasNotCard = 830` - - `SexExp = 830` + - `SexExp = 831` - - `ScenFraction = 831` + - `ScenFraction = 832` - - `ArroyoDocHealing = 832` + - `ArroyoDocHealing = 833` - - `AtollTesla = 833` + - `AtollTesla = 834` - - `AtollMoney = 834` + - `AtollMoney = 835` - - `BHEscortNpcId = 835` + - `BHEscortNpcId = 836` - - `ScenBosSoldier = 836` + - `ScenBosSoldier = 837` - - `SFInvasionBadge = 837` + - `SFInvasionBadge = 838` - - `ScenBosScriber = 838` + - `ScenBosScriber = 839` - - `ScenEnclaveSoldier = 839` + - `ScenEnclaveSoldier = 840` - - `ScenEnclaveScient = 840` + - `ScenEnclaveScient = 841` - - `DenJaneTraderFred = 841` + - `DenJaneTraderFred = 842` - - `DenJaneJobCounter = 842` + - `DenJaneJobCounter = 843` - - `DenJoeyCounter = 843` + - `DenJoeyCounter = 844` - - `DenLaraBosCounter = 844` + - `DenLaraBosCounter = 845` - - `DenJaneTraderMom = 845` + - `DenJaneTraderMom = 846` - - `DenNarcCommMember = 846` + - `DenNarcCommMember = 847` - - `DenJaneTraderLean = 847` + - `DenJaneTraderLean = 848` - - `EncOceanTraderFamiliar = 848` + - `EncOceanTraderFamiliar = 849` - - `ModBaltasArmor1 = 849` + - `ModBaltasArmor1 = 850` - - `GeckGaroldTrain = 850` + - `GeckGaroldTrain = 851` - - `GeckSkitrTransit = 851` + - `GeckSkitrTransit = 852` - - `KlamBaknerBeer = 852` + - `KlamBaknerBeer = 853` - - `ModBaltasArmor = 853` + - `ModBaltasArmor = 854` - - `KlamVaccination = 854` + - `KlamVaccination = 855` - - `KlamVaccinationB1 = 855` + - `KlamVaccinationB1 = 856` - - `KlamVaccinationB2 = 856` + - `KlamVaccinationB2 = 857` - - `KlamVaccinationB3 = 857` + - `KlamVaccinationB3 = 858` - - `KlamGoldBeer = 858` + - `KlamGoldBeer = 859` - - `KlamSallyPay = 859` + - `KlamSallyPay = 860` - - `ModBaltasArmor2 = 860` + - `ModBaltasArmor2 = 861` - - `KlamVicFixittrash = 861` + - `KlamVicFixittrash = 862` - - `ModHoseTools = 862` + - `ModHoseTools = 863` - - `ModVampireReaction = 863` + - `ModVampireReaction = 864` - - `NcrAlexQuestStatus = 864` + - `NcrAlexQuestStatus = 865` - - `NcrDustyPartyStatusChar = 865` + - `NcrDustyPartyStatusChar = 866` - - `NcrMiraTroubleStatusChar = 866` + - `NcrMiraTroubleStatusChar = 867` - - `NcrBeggarTalk = 867` + - `NcrBeggarTalk = 868` - - `NcrDorothyGammaStatusChar = 868` + - `NcrDorothyGammaStatusChar = 869` - - `NcrDumontBrkradioStatusChar = 869` + - `NcrDumontBrkradioStatusChar = 870` - - `NcrCaptainFlirtStatusChar = 870` + - `NcrCaptainFlirtStatusChar = 871` - - `NcrIsNightGuardAccessFranted = 871` + - `NcrIsNightGuardAccessFranted = 872` - - `NcrClausHistory = 872` + - `NcrClausHistory = 873` - - `NcrJubileyTailsStatus = 873` + - `NcrJubileyTailsStatus = 874` - - `NcrRondoDorotyStatus = 874` + - `NcrRondoDorotyStatus = 875` - - `NcrFergusStory = 875` + - `NcrFergusStory = 876` - - `NcrCaptainSmitAccessGranted = 876` + - `NcrCaptainSmitAccessGranted = 877` - - `NcrJubileyTailsCounter = 877` + - `NcrJubileyTailsCounter = 878` - - `NcrBusterDorotyStatus = 878` + - `NcrBusterDorotyStatus = 879` - - `NcrFergusSecret = 879` + - `NcrFergusSecret = 880` - - `NcrGunterStory = 880` + - `NcrGunterStory = 881` - - `ScenRangerRank = 881` + - `ScenRangerRank = 882` - - `NcrDustyFoodDeliveryStatus = 882` + - `NcrDustyFoodDeliveryStatus = 883` - - `NcrPlayerLeadSmit2Dustybar = 883` + - `NcrPlayerLeadSmit2Dustybar = 884` - - `NcrKarlStory = 884` + - `NcrKarlStory = 885` - - `NcrCarlsonStory = 885` + - `NcrCarlsonStory = 886` - - `NcrKukComp = 886` + - `NcrKukComp = 887` - - `NcrMicQStatus = 887` + - `NcrMicQStatus = 888` - - `ScenRanger = 888` + - `ScenRanger = 889` - - `NcrDumontHistory = 889` + - `NcrDumontHistory = 890` - - `NcrMicQCptnDumbCounter = 890` + - `NcrMicQCptnDumbCounter = 891` - - `NcrPlayerHasMultipass = 891` + - `NcrPlayerHasMultipass = 892` - - `NcrSmitVsVestinResult = 892` + - `NcrSmitVsVestinResult = 893` - - `NRJukeboxSeen = 893` + - `NRJukeboxSeen = 894` - - `VCTrainigAccess = 894` + - `VCTrainigAccess = 895` - - `NcrLennyFight = 895` + - `NcrLennyFight = 896` - - `NcrRatchPlayerPoints = 896` + - `NcrRatchPlayerPoints = 897` - - `NRJesusTrain = 897` + - `NRJesusTrain = 898` - - `PurgSuppluysTaken = 898` + - `PurgSuppluysTaken = 899` - - `NcrWestinPillsStatus = 899` + - `NcrWestinPillsStatus = 900` - - `NcrWestinPlayerGetPrepayment = 900` + - `NcrWestinPlayerGetPrepayment = 901` - - `SFHubJudgementIgnatStory = 901` + - `SFHubJudgementIgnatStory = 902` - - `ReddMinesPlayerThief = 902` + - `ReddMinesPlayerThief = 903` - - `ReddDocMedicals = 903` + - `ReddDocMedicals = 904` - - `NcrWestinPills = 904` + - `NcrWestinPills = 905` - - `SFHubbStatus = 905` + - `SFHubbStatus = 906` - - `SFInvasionSandbagsTaken = 906` + - `SFInvasionSandbagsTaken = 907` - - `SFInvasionSandbagsGiven = 907` + - `SFInvasionSandbagsGiven = 908` - - `SFImperatorCancelNum = 908` + - `SFImperatorCancelNum = 909` - - `VCShiComputerAccess = 909` + - `VCShiComputerAccess = 910` - - `TribManotaStory = 910` + - `TribManotaStory = 911` - - `VCKnowsAboutDelivery = 911` + - `VCKnowsAboutDelivery = 912` - - `VCCitizenship = 912` + - `VCCitizenship = 913` - - `VCHartmanFightStatus = 913` + - `VCHartmanFightStatus = 914` - - `VCFreshBloodCounter = 914` + - `VCFreshBloodCounter = 915` - - `VCForgeryWitnessInhome = 915` + - `VCForgeryWitnessInhome = 916` - - `VCLynetOrMaclure = 916` + - `VCLynetOrMaclure = 917` - - `VCMutCharleyHired = 917` + - `VCMutCharleyHired = 918` - - `VCCavesCounter = 918` + - `VCCavesCounter = 919` - - `VCPrisonerBulled = 919` + - `VCPrisonerBulled = 920` - - `VCLynettTalk = 920` + - `VCLynettTalk = 921` - - `VCPatrolCounter = 921` + - `VCPatrolCounter = 922` - - `NpcDialogTimeWait = 922` + - `NpcDialogTimeWait = 923` - - `HoloInfo = 923` + - `HoloInfo = 924` - - `FavoriteItemPid = 924` + - `FavoriteItemPid = 925` - - `IsNoFavoriteItem = 925` + - `IsNoFavoriteItem = 926` - - `Level = 926` + - `Level = 927` - - `KarmaVoting = 927` + - `KarmaVoting = 928` - - `IsNoPvp = 928` + - `IsNoPvp = 929` - - `IsEndCombat = 929` + - `IsEndCombat = 930` - - `IsDlgScriptBarter = 930` + - `IsDlgScriptBarter = 931` - - `IsUnlimitedAmmo = 931` + - `IsUnlimitedAmmo = 932` - - `IsNoDrop = 932` + - `IsNoDrop = 933` - - `IsNoLooseLimbs = 933` + - `IsNoLooseLimbs = 934` - - `IsDeadAges = 934` + - `IsDeadAges = 935` - - `IsNoHeal = 935` + - `IsNoHeal = 936` - - `IsInvulnerable = 936` + - `IsInvulnerable = 937` - - `IsSpecialDead = 937` + - `IsSpecialDead = 938` - - `IsRangeHth = 938` + - `IsRangeHth = 939` - - `IsNoKnock = 939` + - `IsNoKnock = 940` - - `IsNoSupply = 940` + - `IsNoSupply = 941` - - `IsNoKarmaOnKill = 941` + - `IsNoKarmaOnKill = 942` - - `IsBarterOnlyCash = 942` + - `IsBarterOnlyCash = 943` - - `BarterCoefficient = 943` + - `BarterCoefficient = 944` - - `TransferType = 944` + - `TransferType = 945` - - `TransferContainerId = 945` + - `TransferContainerId = 946` - - `IsNoBarter = 946` + - `IsNoBarter = 947` - - `IsNoSteal = 947` + - `IsNoSteal = 948` - - `IsNoLoot = 948` + - `IsNoLoot = 949` - - `IsNoPush = 949` + - `IsNoPush = 950` - - `ItemsWeight = 950` + - `ItemsWeight = 951` - - `ActionPoints = 951` + - `ActionPoints = 952` - - `CurrentAp = 952` + - `CurrentAp = 953` - - `BagId = 953` + - `BagId = 954` - - `LastWeaponId = 954` + - `LastWeaponId = 955` - - `LastWeaponNotFound = 955` + - `LastWeaponNotFound = 956` - - `HandsProtoItemId = 956` + - `HandsProtoItemId = 957` - - `HandsItemMode = 957` + - `HandsItemMode = 958` - - `LastWeaponUse = 958` + - `LastWeaponUse = 959` - - `IsNoItemGarbager = 959` + - `IsNoItemGarbager = 960` - - `TownSupplyVictimId = 960` + - `TownSupplyVictimId = 961` - - `TownSupplyHostileId = 961` + - `TownSupplyHostileId = 962` - - `TravellerRoute = 962` + - `TravellerRoute = 963` - - `V13Dclaw = 963` + - `V13Dclaw = 964` - - `VCAmandaHelpJoshua = 964` + - `VCAmandaHelpJoshua = 965` - - `VCMailRemembered = 965` + - `VCMailRemembered = 966` - - `VCBeautyHoloRemembered = 966` + - `VCBeautyHoloRemembered = 967` - - `VCityCommonBarkusTimeSay = 967` + - `VCityCommonBarkusTimeSay = 968` - - `SquadMarchSquads = 968` + - `SquadMarchSquads = 969` - - `SquadMarchQueue = 969` + - `SquadMarchQueue = 970` - - `VCHartmanMarch = 970` + - `VCHartmanMarch = 971` - - `VCHartmannClearCave = 971` + - `VCHartmannClearCave = 972` - - `VCDeadAllyCounter = 972` + - `VCDeadAllyCounter = 973` - - `VCGuardRank = 973` + - `VCGuardRank = 974` - - `VCReconCaveId = 974` + - `VCReconCaveId = 975` - - `VCGuardsmanTriggerPlayerId = 975` + - `VCGuardsmanTriggerPlayerId = 976` - - `VCLynettArest = 976` + - `VCLynettArest = 977` - - `VCLynettForgery = 977` + - `VCLynettForgery = 978` - - `VCLynettPrisonerId = 978` + - `VCLynettPrisonerId = 979` - - `ReddingMortonBrothers = 979` + - `ReddingMortonBrothers = 980` - - `SpecialEncounterBaxChurch = 980` + - `SpecialEncounterBaxChurch = 981` - - `SpecialEncounteTim = 981` + - `SpecialEncounteTim = 982` - - `RacingSneakersTrap = 982` + - `RacingSneakersTrap = 983` - - `SpecialEncounterBridge = 983` + - `SpecialEncounterBridge = 984` - - `SpecialEncounterHoly1 = 984` + - `SpecialEncounterHoly1 = 985` - - `SpecialEncounterHoly2 = 985` + - `SpecialEncounterHoly2 = 986` - - `SpecialEncounterToxic = 986` + - `SpecialEncounterToxic = 987` - - `SpecialEncounterPariah = 987` + - `SpecialEncounterPariah = 988` - - `SpecialEncounterBrahmin = 988` + - `SpecialEncounterBrahmin = 989` - - `SpecialEncounterWhale = 989` + - `SpecialEncounterWhale = 990` - - `SpecialEncounterHead = 990` + - `SpecialEncounterHead = 991` - - `SpecialEncounterShuttle = 991` + - `SpecialEncounterShuttle = 992` - - `SpecialEncounterGuardian = 992` + - `SpecialEncounterGuardian = 993` - - `SpecialEncounterWoodsman = 993` + - `SpecialEncounterWoodsman = 994` - - `SpecialEncounterUnwashed = 994` + - `SpecialEncounterUnwashed = 995` - - `SpecialEncounterTeleport = 995` + - `SpecialEncounterTeleport = 996` - - `SpecialWastelandChildren = 996` + - `SpecialWastelandChildren = 997` - - `SpecialEncounterKotw = 997` + - `SpecialEncounterKotw = 998` - - `SpecialSoldierHolo = 998` + - `SpecialSoldierHolo = 999` - - `SpecialTrapperHolo = 999` + - `SpecialTrapperHolo = 1000` - - `SpecialDollHolo = 1000` + - `SpecialDollHolo = 1001` - - `SpecialEncounterZergLaboratory = 1001` + - `SpecialEncounterZergLaboratory = 1002` - - `SpecialEncounterDoughnutWarehouse = 1002` + - `SpecialEncounterDoughnutWarehouse = 1003` - - `SpecialEncounterAtomChurch = 1003` + - `SpecialEncounterAtomChurch = 1004` - - `GeckoFindWoody = 1004` + - `GeckoFindWoody = 1005` - - `NcrDappoLostCCtatus = 1005` + - `NcrDappoLostCCtatus = 1006` * `MapProperty` diff --git a/Scripts/Behemoth.fos b/Scripts/Behemoth.fos index c8a65b66..46eb960f 100644 --- a/Scripts/Behemoth.fos +++ b/Scripts/Behemoth.fos @@ -142,7 +142,10 @@ void BehemothCommand(ident behemothId, string cmd) Map map = loc.GetMapByIndex(0); if (valid(map) && Entrance::MapCountEntry(map, ENTER_ENTRY) > 0) { SetOrder(behemothId, TYPE_ORDER_ROUTE, loc.Id, 0); - Game.RadioMessageMsg(_GetRadioChannel(behemothId), TextPackName::Text, 600, "$where@msg GM " + STR_LOC_NAME(loc.ProtoId) + "@"); + Game.RadioMessageMsg(_GetRadioChannel(behemothId), + TextPackName::Text, + 600, + "$where@text Locations " + STR_LOC_NAME(loc.ProtoId) + "@"); RunOrder(behemothId, TYPE_ORDER_ROUTE); return; } @@ -285,7 +288,7 @@ bool _BehemothOnGlobal(Critter cr, int type, Item car, float x, float y, float t Game.RadioMessageMsg(cr.BehemothRadio, TextPackName::Text, 603, - "$where@msg GM " + STR_LOC_NAME(locTo.ProtoId) + "@$x" + cr.HexX + "$y" + cr.HexY); + "$where@text Locations " + STR_LOC_NAME(locTo.ProtoId) + "@$x" + cr.HexX + "$y" + cr.HexY); } CancelOrder(cr.Id, true); return true; @@ -377,7 +380,7 @@ bool _BehemothAttacked(Critter cr, Critter attacker) attackerName = Obsolete::GetPlayerName(attacker.Id); } else { - attackerName = "@msg DLG " + STR_NPC_NAME(attacker.DialogId, attacker.ProtoId) + "@"; + attackerName = "@text Dialogs " + STR_NPC_NAME(attacker.DialogId, attacker.ProtoId) + "@"; } Game.RadioMessageMsg(cr.BehemothRadio, TextPackName::Text, 610, "$pname" + attackerName); } @@ -526,7 +529,7 @@ void RadioMessageMsgTmp(uint16 channel, TextPackName textMsg, uint strNum, strin { switch (textMsg) { case TextPackName::Text: - Game.RadioMessage(channel, "@msg TEXT " + strNum + "@" + lexems); + Game.RadioMessage(channel, "@text Text " + strNum + "@" + lexems); break; default: Game.RadioMessageMsg(channel, textMsg, strNum); diff --git a/Scripts/Caravan.fos b/Scripts/Caravan.fos index 98893daa..eab4ba6b 100644 --- a/Scripts/Caravan.fos +++ b/Scripts/Caravan.fos @@ -1487,7 +1487,7 @@ void dlg_GenResetCaravanText(Critter player, Critter npc, string& lexems) uint cost = GetCrvResetCost(crvId, player); - lexems = "$leader@msg DLG " + STR_NPC_NAME_DLG(li.DialogId) + "@$money " + cost; + lexems = "$leader@text Dialogs " + STR_NPC_NAME_DLG(li.DialogId) + "@$money " + cost; } // перед выбором каравана, за который игрок хочет внести выкуп, чтобы откупиться от провала квеста @@ -3901,14 +3901,14 @@ void dlg_WhereIsCaravaner(Critter player, Critter npc, string& lexems) if (valid(crv.Leader)) { Critter cr = crv.Leader.GetLeader(); if (valid(cr)) { - lexems = "$name@msg DLG " + STR_NPC_NAME_DLG(cr.DialogId) + "@"; + lexems = "$name@text Dialogs " + STR_NPC_NAME_DLG(cr.DialogId) + "@"; uint16 worldX = cr.WorldX; uint16 worldY = cr.WorldY; Map map = cr.GetMap(); if (valid(map)) { Location loc = map.GetLocation(); if (valid(loc) && !loc.AutoGarbage) { - lexems += "$where@msg GM " + STR_LOC_NAME(loc.ProtoId) + "@"; + lexems += "$where@text Locations " + STR_LOC_NAME(loc.ProtoId) + "@"; return; } } diff --git a/Scripts/ClientMain.fos b/Scripts/ClientMain.fos index 6dcdfa35..2a474f68 100644 --- a/Scripts/ClientMain.fos +++ b/Scripts/ClientMain.fos @@ -308,9 +308,15 @@ bool in_message(string message, int& sayType, ident critterId, uint& delay) { if (sayType == SAY_DIALOG) { Gui::Screen screen = Gui::GetActiveScreen(); - if (screen != null && screen.Index == CLIENT_SCREEN_BARTER) { - auto barterScreen = cast(screen); - barterScreen.SetDialogText(message); + if (screen != null) { + if (screen.Index == CLIENT_SCREEN_BARTER) { + auto barterScreen = cast(screen); + barterScreen.SetDialogText(message); + } + if (screen.Index == CLIENT_SCREEN_DIALOG) { + auto dialogScreen = cast(screen); + dialogScreen.SetDialogText(message); + } } } return true; diff --git a/Scripts/Dialog.fos b/Scripts/Dialog.fos index 01056c20..d957fbc6 100644 --- a/Scripts/Dialog.fos +++ b/Scripts/Dialog.fos @@ -18,6 +18,21 @@ ///@ Property Critter PrivateServer ident=>uint8 ChanceOneFromThree ///@ Property Critter PrivateServer ident=>uint8 ChanceOneFromFive +///@ Property Critter PrivateServer hstring=>uint8 CurrentDialogNumber + +// Выбрать активный номер диалога +void SetCurrentDialogNumber(Critter cr, Critter npc, uint8 number) +{ + auto values = cr.CurrentDialogNumber.clone(); + values[npc.DialogId] = number; + cr.CurrentDialogNumber = values; +} + +uint8 GetCurrentDialogNumber(Critter cr, Critter npc) +{ + return cr.CurrentDialogNumber.get(npc.DialogId); +} + bool ChanceOneFromTwo(Critter cr, Critter npc, int value) { if (!npc.ChanceOneFromTwo.exists(cr.Id)) { @@ -487,24 +502,24 @@ void dlg_TrySpy(Critter player, Critter banker, string& playerName) // Пол. if (cr.Gender == GenderType::Male) { - lexems += "$Gender @msg dlg " + DLGSTR(BankerDialog, DlgStr + 10) + "@"; + lexems += "$Gender @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 10) + "@"; } else if (cr.Gender == GenderType::Female) { - lexems += "$Gender @msg dlg " + DLGSTR(BankerDialog, DlgStr + 11) + "@"; + lexems += "$Gender @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 11) + "@"; } else { - lexems += "$Gender @msg dlg " + DLGSTR(BankerDialog, DlgStr + 12) + "@"; + lexems += "$Gender @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 12) + "@"; } // Репликации. if (cr.ReplicationCount / cr.Level <= 2) { - lexems += "$ReplCount @msg dlg " + DLGSTR(BankerDialog, DlgStr + 13) + "@"; + lexems += "$ReplCount @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 13) + "@"; } else if (cr.ReplicationCount / cr.Level > 2 && cr.ReplicationCount / cr.Level < 10) { - lexems += "$ReplCount @msg dlg " + DLGSTR(BankerDialog, DlgStr + 14) + "@"; + lexems += "$ReplCount @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 14) + "@"; } else { - lexems += "$ReplCount @msg dlg " + DLGSTR(BankerDialog, DlgStr + 15) + "@"; + lexems += "$ReplCount @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 15) + "@"; } // Год рождения. @@ -542,94 +557,94 @@ void dlg_TrySpy(Critter player, Critter banker, string& playerName) lexems = ""; // Сила. if (cr.StrengthBase < 4) { - lexems += "$Strength @msg dlg " + DLGSTR(BankerDialog, DlgStr + 16) + "@"; + lexems += "$Strength @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 16) + "@"; } else if (cr.StrengthBase >= 4 && cr.StrengthBase < 7) { lexems += "$Strength" + ""; } else if (cr.StrengthBase >= 7 && cr.StrengthBase <= 8) { - lexems += "$Strength @msg dlg " + DLGSTR(BankerDialog, DlgStr + 17) + "@"; + lexems += "$Strength @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 17) + "@"; } else { - lexems += "$Strength @msg dlg " + DLGSTR(BankerDialog, DlgStr + 18) + "@"; + lexems += "$Strength @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 18) + "@"; } // Восприятие. if (cr.PerceptionBase < 4) { - lexems += "$Perception @msg dlg " + DLGSTR(BankerDialog, DlgStr + 19) + "@"; + lexems += "$Perception @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 19) + "@"; } else if (cr.PerceptionBase >= 4 && cr.PerceptionBase < 7) { lexems += "$Perception" + ""; } else if (cr.PerceptionBase >= 7 && cr.PerceptionBase <= 8) { - lexems += "$Perception @msg dlg " + DLGSTR(BankerDialog, DlgStr + 20) + "@"; + lexems += "$Perception @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 20) + "@"; } else { - lexems += "$Perception @msg dlg " + DLGSTR(BankerDialog, DlgStr + 21) + "@"; + lexems += "$Perception @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 21) + "@"; } // Выносливость. if (cr.EnduranceBase < 4) { - lexems += "$Endurance @msg dlg " + DLGSTR(BankerDialog, DlgStr + 22) + "@"; + lexems += "$Endurance @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 22) + "@"; } else if (cr.EnduranceBase >= 4 && cr.EnduranceBase < 7) { lexems += "$Endurance" + ""; } else if (cr.EnduranceBase >= 7 && cr.EnduranceBase <= 8) { - lexems += "$Endurance @msg dlg " + DLGSTR(BankerDialog, DlgStr + 23) + "@"; + lexems += "$Endurance @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 23) + "@"; } else { - lexems += "$Endurance @msg dlg " + DLGSTR(BankerDialog, DlgStr + 24) + "@"; + lexems += "$Endurance @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 24) + "@"; } // Обаяние. if (cr.CharismaBase < 4) { - lexems += "$Charisma @msg dlg " + DLGSTR(BankerDialog, DlgStr + 25) + "@"; + lexems += "$Charisma @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 25) + "@"; } else if (cr.CharismaBase >= 4 && cr.CharismaBase < 7) { lexems += "$Charisma" + ""; } else if (cr.CharismaBase >= 7 && cr.CharismaBase <= 8) { - lexems += "$Charisma @msg dlg " + DLGSTR(BankerDialog, DlgStr + 26) + "@"; + lexems += "$Charisma @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 26) + "@"; } else { - lexems += "$Charisma @msg dlg " + DLGSTR(BankerDialog, DlgStr + 27) + "@"; + lexems += "$Charisma @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 27) + "@"; } // Интеллект. if (cr.IntellectBase < 4) { - lexems += "$Intellect @msg dlg " + DLGSTR(BankerDialog, DlgStr + 28) + "@"; + lexems += "$Intellect @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 28) + "@"; } else if (cr.IntellectBase >= 4 && cr.IntellectBase < 7) { lexems += "$Intellect" + ""; } else if (cr.IntellectBase >= 7 && cr.IntellectBase <= 8) { - lexems += "$Intellect @msg dlg " + DLGSTR(BankerDialog, DlgStr + 29) + "@"; + lexems += "$Intellect @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 29) + "@"; } else { - lexems += "$Intellect @msg dlg " + DLGSTR(BankerDialog, DlgStr + 30) + "@"; + lexems += "$Intellect @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 30) + "@"; } // Ловкость. if (cr.AgilityBase < 4) { - lexems += "$Agility @msg dlg " + DLGSTR(BankerDialog, DlgStr + 31) + "@"; + lexems += "$Agility @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 31) + "@"; } else if (cr.AgilityBase >= 4 && cr.AgilityBase < 7) { lexems += "$Agility" + ""; } else if (cr.AgilityBase >= 7 && cr.AgilityBase <= 8) { - lexems += "$Agility @msg dlg " + DLGSTR(BankerDialog, DlgStr + 32) + "@"; + lexems += "$Agility @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 32) + "@"; } else { - lexems += "$Agility @msg dlg " + DLGSTR(BankerDialog, DlgStr + 33) + "@"; + lexems += "$Agility @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 33) + "@"; } // Удача. if (cr.LuckBase < 4) { - lexems += "$Luck @msg dlg " + DLGSTR(BankerDialog, DlgStr + 34) + "@"; + lexems += "$Luck @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 34) + "@"; } else if (cr.LuckBase >= 4 && cr.LuckBase < 7) { lexems += "$Luck" + ""; } else if (cr.LuckBase >= 7 && cr.LuckBase <= 8) { - lexems += "$Luck @msg dlg " + DLGSTR(BankerDialog, DlgStr + 35) + "@"; + lexems += "$Luck @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 35) + "@"; } else { - lexems += "$Luck @msg dlg " + DLGSTR(BankerDialog, DlgStr + 36) + "@"; + lexems += "$Luck @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 36) + "@"; } player.SayMsg(SAY_APPEND, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 3), lexems); } @@ -644,25 +659,25 @@ void dlg_TrySpy(Critter player, Critter banker, string& playerName) CritterProperty::SkillThrowing}; for (uint i = 0; i < combatSkills.length(); i++) { if (cr.TagSkills.find(combatSkills[i]) != -1 && cr.GetAsInt(combatSkills[i]) < 100) { - lexems = "$CmbtSkillTag @msg dlg " + DLGSTR(BankerDialog, DlgStr + 60 + Game.Random(0, 1)) + "@"; + lexems = "$CmbtSkillTag @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 60 + Game.Random(0, 1)) + "@"; switch (combatSkills[i]) { case CritterProperty::SkillSmallGuns: - lexems += "$CombatSkillMax @msg dlg " + DLGSTR(BankerDialog, DlgStr + 41) + "@"; + lexems += "$CombatSkillMax @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 41) + "@"; break; case CritterProperty::SkillBigGuns: - lexems += "$CombatSkillMax @msg dlg " + DLGSTR(BankerDialog, DlgStr + 42) + "@"; + lexems += "$CombatSkillMax @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 42) + "@"; break; case CritterProperty::SkillEnergyWeapons: - lexems += "$CombatSkillMax @msg dlg " + DLGSTR(BankerDialog, DlgStr + 43) + "@"; + lexems += "$CombatSkillMax @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 43) + "@"; break; case CritterProperty::SkillUnarmed: - lexems += "$CombatSkillMax @msg dlg " + DLGSTR(BankerDialog, DlgStr + 44) + "@"; + lexems += "$CombatSkillMax @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 44) + "@"; break; case CritterProperty::SkillMeleeWeapons: - lexems += "$CombatSkillMax @msg dlg " + DLGSTR(BankerDialog, DlgStr + 45) + "@"; + lexems += "$CombatSkillMax @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 45) + "@"; break; case CritterProperty::SkillThrowing: - lexems += "$CombatSkillMax @msg dlg " + DLGSTR(BankerDialog, DlgStr + 46) + "@"; + lexems += "$CombatSkillMax @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 46) + "@"; break; default: break; @@ -689,43 +704,43 @@ void dlg_TrySpy(Critter player, Critter banker, string& playerName) for (uint i = 0; i < skills.length(); i++) { if (cr.TagSkills.find(skills[i]) != -1 && cr.GetAsInt(skills[i]) < 100) { - lexems = "$SkillTag @msg dlg " + DLGSTR(BankerDialog, DlgStr + 62 + Game.Random(0, 2)) + "@"; + lexems = "$SkillTag @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 62 + Game.Random(0, 2)) + "@"; switch (skills[i]) { case CritterProperty::SkillFirstAid: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 65) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 65) + "@"; break; case CritterProperty::SkillDoctor: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 66) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 66) + "@"; break; case CritterProperty::SkillSneak: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 67) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 67) + "@"; break; case CritterProperty::SkillLockpick: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 68) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 68) + "@"; break; case CritterProperty::SkillSteal: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 69) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 69) + "@"; break; case CritterProperty::SkillTraps: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 70) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 70) + "@"; break; case CritterProperty::SkillScience: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 71) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 71) + "@"; break; case CritterProperty::SkillRepair: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 72) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 72) + "@"; break; case CritterProperty::SkillSpeech: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 73) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 73) + "@"; break; case CritterProperty::SkillBarter: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 74) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 74) + "@"; break; case CritterProperty::SkillGambling: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 75) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 75) + "@"; break; case CritterProperty::SkillOutdoorsman: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 76) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 76) + "@"; break; default: break; @@ -753,38 +768,38 @@ void dlg_TrySpy(Critter player, Critter banker, string& playerName) } } if (curSkill < 90) { - lexems += "$CombatSkillLvl @msg dlg " + DLGSTR(BankerDialog, DlgStr + 37) + "@"; + lexems += "$CombatSkillLvl @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 37) + "@"; lexems += "$CombatSkillMax"; } else { if (curSkill >= 90 && curSkill < 150) { - lexems += "$CombatSkillLvl @msg dlg " + DLGSTR(BankerDialog, DlgStr + 38) + "@"; + lexems += "$CombatSkillLvl @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 38) + "@"; } if (curSkill >= 150 && curSkill < 200) { - lexems += "$CombatSkillLvl @msg dlg " + DLGSTR(BankerDialog, DlgStr + 39) + "@"; + lexems += "$CombatSkillLvl @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 39) + "@"; } if (curSkill >= 200) { - lexems += "$CombatSkillLvl @msg dlg " + DLGSTR(BankerDialog, DlgStr + 40) + "@"; + lexems += "$CombatSkillLvl @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 40) + "@"; } switch (maxSkillProp) { case CritterProperty::SkillSmallGuns: - lexems += "$CombatSkillMax @msg dlg " + DLGSTR(BankerDialog, DlgStr + 41) + "@"; + lexems += "$CombatSkillMax @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 41) + "@"; break; case CritterProperty::SkillBigGuns: - lexems += "$CombatSkillMax @msg dlg " + DLGSTR(BankerDialog, DlgStr + 42) + "@"; + lexems += "$CombatSkillMax @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 42) + "@"; break; case CritterProperty::SkillEnergyWeapons: - lexems += "$CombatSkillMax @msg dlg " + DLGSTR(BankerDialog, DlgStr + 43) + "@"; + lexems += "$CombatSkillMax @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 43) + "@"; break; case CritterProperty::SkillUnarmed: - lexems += "$CombatSkillMax @msg dlg " + DLGSTR(BankerDialog, DlgStr + 44) + "@"; + lexems += "$CombatSkillMax @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 44) + "@"; break; case CritterProperty::SkillMeleeWeapons: - lexems += "$CombatSkillMax @msg dlg " + DLGSTR(BankerDialog, DlgStr + 45) + "@"; + lexems += "$CombatSkillMax @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 45) + "@"; break; case CritterProperty::SkillThrowing: - lexems += "$CombatSkillMax @msg dlg " + DLGSTR(BankerDialog, DlgStr + 46) + "@"; + lexems += "$CombatSkillMax @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 46) + "@"; break; default: break; @@ -818,45 +833,45 @@ void dlg_TrySpy(Critter player, Critter banker, string& playerName) } } if (curSkill <= 90) { - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 47) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 47) + "@"; } else { switch (maxSkillProp) { case CritterProperty::SkillFirstAid: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 48) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 48) + "@"; break; case CritterProperty::SkillDoctor: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 49) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 49) + "@"; break; case CritterProperty::SkillSneak: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 50) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 50) + "@"; break; case CritterProperty::SkillLockpick: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 51) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 51) + "@"; break; case CritterProperty::SkillSteal: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 52) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 52) + "@"; break; case CritterProperty::SkillTraps: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 53) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 53) + "@"; break; case CritterProperty::SkillScience: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 54) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 54) + "@"; break; case CritterProperty::SkillRepair: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 55) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 55) + "@"; break; case CritterProperty::SkillSpeech: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 56) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 56) + "@"; break; case CritterProperty::SkillBarter: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 57) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 57) + "@"; break; case CritterProperty::SkillGambling: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 58) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 58) + "@"; break; case CritterProperty::SkillOutdoorsman: - lexems += "$AnySkill @msg dlg " + DLGSTR(BankerDialog, DlgStr + 59) + "@"; + lexems += "$AnySkill @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 59) + "@"; break; default: break; @@ -873,125 +888,6 @@ void dlg_TrySpy(Critter player, Critter banker, string& playerName) } } -void dlg_ForSearching(Critter player, Critter barman, string& playerName) -{ - if (!valid(barman)) { - return; - } - if (!IS_DIALOG_SAY_MODE(playerName) || IS_DIALOG_END(playerName)) { - return; - } - if (playerName.length() <= 1) { - return; - } - - hstring BankerDialog = barman.DialogId; - uint DlgStr = 200; - - // Имя запрашиваемого криттера и инициализация переменной с лексемами. - string lexems = "$Victim " + playerName; - - // Пол бармена. - if (barman.Gender == GenderType::Female) { - lexems += "$BarmanGen @msg dlg " + DLGSTR(BankerDialog, DlgStr + 10) + "@"; - } - else { - lexems += "$BarmanGen @msg dlg " + DLGSTR(BankerDialog, DlgStr + 9) + "@"; - } - - // Игрок не найден. - if (Game.GetPlayer(playerName) == null) { - player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 0), lexems); - return; - } - - Critter cr = Game.GetPlayer(playerName).GetControlledCritter(); - - // Пол запрашиваемого криттера. - if (cr.Gender == GenderType::Female) { - lexems += "$Gender @msg dlg " + DLGSTR(BankerDialog, DlgStr + 8) + "@"; - } - else { - lexems += "$Gender @msg dlg " + DLGSTR(BankerDialog, DlgStr + 7) + "@"; - } - - player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 11), lexems); -} - -void dlg_TrySearching(Critter player, Critter barman, string& playerName) -{ - if (!valid(barman)) { - return; - } - if (!IS_DIALOG_SAY_MODE(playerName) || IS_DIALOG_END(playerName)) { - return; - } - if (playerName.length() <= 1) { - return; - } - - hstring BankerDialog = barman.DialogId; - uint DlgStr = 200; - - // Имя запрашиваемого криттера и инициализация переменной с лексемами. - string lexems = "$Victim " + playerName; - - // Пол бармена. - if (barman.Gender == GenderType::Female) { - lexems += "$BarmanGen @msg dlg " + DLGSTR(BankerDialog, DlgStr + 10) + "@"; - } - else { - lexems += "$BarmanGen @msg dlg " + DLGSTR(BankerDialog, DlgStr + 9) + "@"; - } - - // Игрок не найден. - if (Game.GetPlayer(playerName) == null) { - player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 0), lexems); - return; - } - - Critter cr = Game.GetPlayer(playerName).GetControlledCritter(); - - // Пол запрашиваемого криттера. - if (cr.Gender == GenderType::Female) { - lexems += "$Gender @msg dlg " + DLGSTR(BankerDialog, DlgStr + 8) + "@"; - } - else { - lexems += "$Gender @msg dlg " + DLGSTR(BankerDialog, DlgStr + 7) + "@"; - } - - // Игрок спрашивает о самом себе. - if (player.Id == cr.Id) { - player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 1)); - return; - } - - // Криттер на глобале. - Map map = cr.GetMap(); - if (!valid(map)) { - player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 2), lexems); - return; - } - - // Todo: fix old proto numbers checks - // Локация, где находится криттер. Диапазоны PID: до 150 и 210-235. Города и репликации. - /*if (cr.GetMap().GetLocation().ProtoId < 50 || cr.GetMap().GetLocation().ProtoId >= 200) { - lexems += "$Place @msg GM " + STR_LOC_NAME(cr.GetMap().GetLocation().ProtoId) + "@"; - - // Криттер находится в той же локации, что и игрок. - if (barman.GetMap().GetLocation().Id == cr.GetMap().GetLocation().Id) { - player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 3), lexems); - return; - } - - // Криттер найден, лексемы сформированы - даем информацию. - player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 4 + Game.Random(0, 2)), lexems); - } - else { - player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 2), lexems); - }*/ -} - void r_ToHeal(Critter player, Critter npc) { Stdlib::HealCritter(player); diff --git a/Scripts/DialogBarman.fos b/Scripts/DialogBarman.fos new file mode 100644 index 00000000..7eaac818 --- /dev/null +++ b/Scripts/DialogBarman.fos @@ -0,0 +1,183 @@ +// FOS Server Sort 2 + +const uint8 DialogNone = 0; +// Номера веток и номера дополнительных строк стандартные для любых НПЦ, должны присутствовать в самом диалоге. +const uint8 DialogCheckPlayerExists = 200; +const uint8 DialogFoundPlayerOnline = 202; + +#define MAP_IS_REPLICATION #(mapPid)(Replication::ReplicatorsMapPids.find(mapPid) != -1) + +void ModuleInit() +{ + Game.OnPlayerSaidText.Subscribe(OnPlayerSaidText); +} + +void OnPlayerSaidText(Critter critter, string text, bool fromDialog, ident talkerId, bool isNpc) +{ + if (critter.IsControlledByPlayer && isNpc && fromDialog && !text.isEmpty() && text.length() > 1) { + auto npc = Game.GetCritter(talkerId); + if (npc is null) { + return; + } + uint8 curDialog = Dialog::GetCurrentDialogNumber(critter, npc); + switch (curDialog) { + case DialogNone: + break; + case DialogCheckPlayerExists: + TryFoundPlayer(critter, npc, text); + break; + case DialogFoundPlayerOnline: + FoundOnline(critter, npc, text); + break; + default: + Game.Log("Wrond dialog number: " + curDialog + "; npc: " + npc.ProtoId); + break; + } + } +} + +void dlg_CheckPlayerExists(Critter player, Critter barman, string& lex) +{ + if (!valid(barman)) { + player.CanSendSay = false; + return; + } + if (IS_DIALOG_END(lex)) { + Dialog::SetCurrentDialogNumber(player, barman, DialogNone); + player.CanSendSay = false; + return; + } + + player.CanSendSay = true; + Dialog::SetCurrentDialogNumber(player, barman, DialogCheckPlayerExists); +} + +void dlg_FindPlayerOnline(Critter player, Critter barman, string& lex) +{ + if (!valid(barman)) { + player.CanSendSay = false; + return; + } + if (IS_DIALOG_END(lex)) { + Dialog::SetCurrentDialogNumber(player, barman, DialogNone); + player.CanSendSay = false; + return; + } + + player.CanSendSay = true; + Dialog::SetCurrentDialogNumber(player, barman, DialogFoundPlayerOnline); +} + +void TryFoundPlayer(Critter player, Critter barman, string playerName) +{ + if (playerName.length() <= 1) { + return; + } + hstring BankerDialog = barman.DialogId; + uint DlgStr = 200; + + // Имя запрашиваемого криттера и инициализация переменной с лексемами. + string lexems = "$Victim " + playerName; + + // Пол бармена. + if (barman.Gender == GenderType::Female) { + lexems += "$BarmanGen @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 10) + "@"; + } + else { + lexems += "$BarmanGen @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 9) + "@"; + } + + // Игрок не найден. + if (Game.GetPlayer(playerName) == null) { + player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 0), lexems); + return; + } + + Critter cr = Game.GetPlayer(playerName).GetControlledCritter(); + + if (cr != null) { + // Пол запрашиваемого криттера. + if (cr.Gender == GenderType::Female) { + lexems += "$Gender @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 8) + "@"; + } + else { + lexems += "$Gender @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 7) + "@"; + } + } + player.CanSendSay = false; + player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 11), lexems); +} + +void FoundOnline(Critter player, Critter barman, string playerName) +{ + if (!valid(barman)) { + return; + } + if (playerName.length() <= 1) { + return; + } + hstring BankerDialog = barman.DialogId; + uint DlgStr = 200; + + // Имя запрашиваемого криттера и инициализация переменной с лексемами. + string lexems = "$Victim " + playerName; + + // Пол бармена. + if (barman.Gender == GenderType::Female) { + lexems += "$BarmanGen @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 10) + "@"; + } + else { + lexems += "$BarmanGen @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 9) + "@"; + } + // Игрок не найден. + if (Game.GetPlayer(playerName) == null) { + player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 0), lexems); + return; + } + + Critter cr = Game.GetPlayer(playerName).GetControlledCritter(); + // Игрок оффлайн. + if (cr == null) { + player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 2), lexems); + return; + } + + // Пол запрашиваемого криттера. + if (cr.Gender == GenderType::Female) { + lexems += "$Gender @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 8) + "@"; + } + else { + lexems += "$Gender @text Dialogs " + DLGSTR(BankerDialog, DlgStr + 7) + "@"; + } + + // Игрок спрашивает о самом себе. + if (player.Id == cr.Id) { + player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 1)); + return; + } + + // Криттер на глобале. + Map map = cr.GetMap(); + if (!valid(map)) { + player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 2), lexems); + return; + } + + // Локация, где находится криттер. Диапазоны PID: до 150 и 210-235. Города и репликации. + if (LOCATION_IS_CITY(cr.GetMap().GetLocation().ProtoId) || MAP_IS_REPLICATION(cr.GetMap().ProtoId)) { + lexems += "$Place @text Locations " + STR_LOC_NAME(cr.GetMap().GetLocation().ProtoId) + "@"; + // Криттер находится в той же локации, что и игрок. + if (barman.GetMap().GetLocation().Id == cr.GetMap().GetLocation().Id) { + player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 3), lexems); + return; + } + + // Криттер найден, лексемы сформированы - даем информацию. + player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 4 + Game.Random(0, 2)), lexems); + } + else { + player.SayMsg(SAY_DIALOG, TextPackName::Dialogs, DLGSTR(BankerDialog, DlgStr + 2), lexems); + } + player.CanSendSay = false; + Dialog::SetCurrentDialogNumber(player, barman, DialogNone); +} diff --git a/Scripts/Drugs.fos b/Scripts/Drugs.fos index c8e937f6..c2c97978 100644 --- a/Scripts/Drugs.fos +++ b/Scripts/Drugs.fos @@ -272,7 +272,6 @@ void UseDrugOn(Critter cr, Critter onCr, Item drug) void SetDrug(Critter cr, hstring drugPid) { - Game.Log("SET DRUG???"); // Special drugs if (drugPid == Content::Item::box_of_doughnuts) { if (cr.DoughnutsCounter < 20) { @@ -450,7 +449,6 @@ uint ProcessDrug(Critter cr, hstring drugPid, uint rate) Poison::AffectPoison(cr, amount); } else if (prop == CritterProperty::RadiationLevel) { - Game.Log("drugs 453"); Radiation::AffectRadiation(cr, amount); } else { @@ -459,10 +457,10 @@ uint ProcessDrug(Critter cr, hstring drugPid, uint rate) propVal = cr.GetAsInt(prop) - propVal; if (propVal > 0) { - cr.SayMsg(SAY_NETMSG, TextPackName::Game, MsgStr::StrDrugStatGain, "$name @msg game " + STR_PARAM_NAME(prop) + "@$value" + propVal); + cr.SayMsg(SAY_NETMSG, TextPackName::Game, MsgStr::StrDrugStatGain, "$name @text Game " + STR_PARAM_NAME(prop) + "@$value" + propVal); } else if (propVal < 0) { - cr.SayMsg(SAY_NETMSG, TextPackName::Game, MsgStr::StrDrugStatLose, "$name @msg game " + STR_PARAM_NAME(prop) + "@$value" + (-propVal)); + cr.SayMsg(SAY_NETMSG, TextPackName::Game, MsgStr::StrDrugStatLose, "$name @text Game " + STR_PARAM_NAME(prop) + "@$value" + (-propVal)); } } diff --git a/Scripts/FavoriteItem.fos b/Scripts/FavoriteItem.fos index 120a7f0c..87df6319 100644 --- a/Scripts/FavoriteItem.fos +++ b/Scripts/FavoriteItem.fos @@ -17,7 +17,6 @@ void OnCritterIdle(Critter cr) // IF not any favorite item known, remove current weapon from hands on idle auto mainItem = cr.GetItem(ItemProperty::CritterSlot, CritterItemSlot::Main); if (mainItem != null) { - Game.Log("remove unfavorite item " + cr.Id); cr.Say(SAY_NORM_ON_HEAD, "remove unfavorite item"); cr.ChangeItemSlot(mainItem.Id, CritterItemSlot::Inventory); return; diff --git a/Scripts/FighterQuest.fos b/Scripts/FighterQuest.fos index 3bb8b751..5b11edc7 100644 --- a/Scripts/FighterQuest.fos +++ b/Scripts/FighterQuest.fos @@ -131,7 +131,7 @@ class FighterQuest npc.TeamId = TeamIdFight; NpcPlanes::AddAttackPlane(npc, FightPriority, player, MinHp); - string lex = "$npcname@msg DLG " + STR_NPC_NAME(npc.DialogId, npc.ProtoId) + "@"; + string lex = "$npcname@text Dialogs " + STR_NPC_NAME(npc.DialogId, npc.ProtoId) + "@"; player.SayMsg(SAY_NETMSG, TextPackName::Text, STR_FIGHT_BEGIN, lex); } @@ -153,7 +153,7 @@ class FighterQuest string lex = "$npcname "; Critter npc = Game.GetCritter(NpcId); if (valid(npc) && npc.DialogId != EMPTY_HSTRING) { - lex = "$npcname@msg DLG " + STR_NPC_NAME(npc.DialogId, npc.ProtoId) + "@"; + lex = "$npcname@text Dialogs " + STR_NPC_NAME(npc.DialogId, npc.ProtoId) + "@"; } Critter cr = Game.GetCritter(PlayerId); if (valid(cr)) { @@ -179,7 +179,7 @@ class FighterQuest string lex = "$npcname a"; Critter npc = Game.GetCritter(NpcId); if (valid(npc) && npc.DialogId != EMPTY_HSTRING) { - lex = "$npcname@msg DLG " + STR_NPC_NAME(npc.DialogId, npc.ProtoId) + "@"; + lex = "$npcname@text Dialogs " + STR_NPC_NAME(npc.DialogId, npc.ProtoId) + "@"; } DL(lex); Critter cr = Game.GetCritter(PlayerId); diff --git a/Scripts/GameEventCaches.fos b/Scripts/GameEventCaches.fos index 44dd1bd3..dd16d04e 100644 --- a/Scripts/GameEventCaches.fos +++ b/Scripts/GameEventCaches.fos @@ -20,8 +20,8 @@ void r_GiveCart(Critter player, Critter npc) ElectronicLock::GenerateCode(item); item.Info = 2; item.GECachesNumParameters = Game.Random(0, Parameters.length() - 1); - item.Lexems = - "$location@msg gm " + STR_LOC_NAME(hstring_fromHash(Parameters[item.GECachesNumParameters][0][0])) + "@$code" + ElectronicLock::GetCode(item); + item.Lexems = "$location@text Locations " + STR_LOC_NAME(hstring_fromHash(Parameters[item.GECachesNumParameters][0][0])) + "@$code" + + ElectronicLock::GetCode(item); item.SetupScript(_TreasureMapInit); item.IsQuestItem = true; } diff --git a/Scripts/GuiScreens.fos b/Scripts/GuiScreens.fos index bf25fe11..cbe146be 100644 --- a/Scripts/GuiScreens.fos +++ b/Scripts/GuiScreens.fos @@ -8929,6 +8929,15 @@ namespace Dialog uint TalkTime; uint TalkStartTick; + void SetDialogText(string msg) + { + auto panel = FindPanel("SpeechPanel"); + auto text = panel.FindText("SpeechText"); + if (text != null) { + text.SetText(msg); + } + } + void OnConstruct() override { SetModal(true); @@ -14118,7 +14127,7 @@ namespace Say void OnShow(dict params) override { if (!(params is null)) { - TalkerIsNpc = params["TalkerIsNpc"] == "true"; + TalkerIsNpc = params["TalkerIsNpc"] == "1"; FromDialog = params["FromDialog"] == "true"; TalkerId = params["TalkerId"]; } diff --git a/Scripts/KlamCowboy.fos b/Scripts/KlamCowboy.fos index 37179cd5..c5ed0323 100644 --- a/Scripts/KlamCowboy.fos +++ b/Scripts/KlamCowboy.fos @@ -33,9 +33,6 @@ #define ISSUANCE_TIME_END (22) #define ROLE_MOBS (239) - -#define ENTRY_GROUPS {10, 11, 12, 13} - #define COW_COUNT (6) // количество браминов #define MAX_MOBS_COUNT (64) // максимум живых мобов на карте @@ -44,8 +41,6 @@ #define DEF_PLAYER_LEVEL (5) // уровень по умолчанию -#define MSG_DOGS {2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507} - // Для удобства ребалансировки uint GetTimeSpawn() { @@ -247,7 +242,7 @@ void DogAlert(any value) MoveRandom::CritterMoveRandom(dog); CritterState::Wait(dog, Game.Random(2000, 4000)); - uint[] msg = MSG_DOGS; + uint[] msg = {2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507}; dog.SayMsg(SAY_NORM_ON_HEAD, TextPackName::Text, msg[Game.Random(0, msg.length() - 1)]); dog.KlamCowboyCountGav += 1; @@ -485,7 +480,7 @@ void MobSetAtackPlane(Map map, Critter mob) any[] SelectEntsAndMobs(any[] arr) { arr.resize(arr.length() + 3); - uint8[] ent = ENTRY_GROUPS; + uint8[] ent = {10, 11, 12, 13}; hstring[] pid = {Content::Critter::WildDog, Content::Critter::Molerat, Content::Critter::LargeRadscorpion, Content::Critter::ToughSilverGecko}; hstring[] dialog = {Content::Dialog::mob_dog, Content::Dialog::mob_mole_rat, Content::Dialog::mob_large_scorp, Content::Dialog::mob_silver_gecko}; uint mobsTypeNum = Game.Random(0, pid.length() - 1); diff --git a/Scripts/MainPlanes.fos b/Scripts/MainPlanes.fos index 74598bb6..c2416d74 100644 --- a/Scripts/MainPlanes.fos +++ b/Scripts/MainPlanes.fos @@ -161,7 +161,6 @@ bool npc_plane_run(Critter npc, int planeId, int reason, any& r0, any& r1, any& { NpcPlanes::NpcPlane plane = NpcPlanes::GetCritterPlane(npc, planeId); - Game.Log("npc_plane_run " + reason + plane.ToString()); if (reason == REASON_ATTACK_WEAPON) { // Special weapons hstring npcPid = npc.ProtoId; diff --git a/Scripts/MapRadiation.fos b/Scripts/MapRadiation.fos index 8ef693ff..4d350181 100644 --- a/Scripts/MapRadiation.fos +++ b/Scripts/MapRadiation.fos @@ -56,6 +56,5 @@ void AffectRadiationToAllCritters(Map map, int value) Critter[] critters = map.GetCritters(CritterFindType::Alive); for (uint i = 0; i < critters.length(); i++) { Radiation::AffectRadiation(critters[i], value); - Game.Log("MapRad 2105"); } } diff --git a/Scripts/MsgStr.fos b/Scripts/MsgStr.fos index bc7b4178..e38e140a 100644 --- a/Scripts/MsgStr.fos +++ b/Scripts/MsgStr.fos @@ -619,8 +619,8 @@ const int StrGameCredits = 2000001010; // *************************************************************************************** // Global map info -#define STR_LOC_NAME #(pid)LOCSTR(pid, 1) -#define STR_LOC_INFO #(pid)LOCSTR(pid, 2) +#define STR_LOC_NAME #(pid)LOCSTR(pid, 0) +#define STR_LOC_INFO #(pid)LOCSTR(pid, hstring("Desc").uhash) #define STR_LOC_PIC #(pid)LOCSTR(pid, 5) #define STR_LOC_LABEL_PIC #(pid)LOCSTR(pid, 6) #define STR_LOC_MAP_NAME #(pid, mapInd)LOCSTR(pid, 1000 + (mapInd) * 10 + 0) diff --git a/Scripts/NcrCommon.fos b/Scripts/NcrCommon.fos index a8bb51b7..2d255379 100644 --- a/Scripts/NcrCommon.fos +++ b/Scripts/NcrCommon.fos @@ -364,7 +364,7 @@ void dlg_Buy(Critter player, Critter none, string& lexems) if (!IS_DIALOG_GENERATED(lexems)) { return; } - lexems = "$text@msg TEXT " + Game.Random(BUY_FIRST, BUY_END) + "@"; + lexems = "$text@text Text " + Game.Random(BUY_FIRST, BUY_END) + "@"; } // куплю void dlg_Find(Critter player, Critter none, string& lexems) @@ -372,7 +372,7 @@ void dlg_Find(Critter player, Critter none, string& lexems) if (!IS_DIALOG_GENERATED(lexems)) { return; } - lexems = "$text@msg TEXT " + Game.Random(SRCH_FIRST, SRCH_END) + "@"; + lexems = "$text@text Text " + Game.Random(SRCH_FIRST, SRCH_END) + "@"; } // ищу void dlg_Sell(Critter player, Critter none, string& lexems) @@ -380,7 +380,7 @@ void dlg_Sell(Critter player, Critter none, string& lexems) if (!IS_DIALOG_GENERATED(lexems)) { return; } - lexems = "$text@msg TEXT " + Game.Random(SELL_FIRST, SELL_END) + "@"; + lexems = "$text@text Text " + Game.Random(SELL_FIRST, SELL_END) + "@"; } // продам void dlg_Adv(Critter player, Critter none, string& lexems) @@ -388,7 +388,7 @@ void dlg_Adv(Critter player, Critter none, string& lexems) if (!IS_DIALOG_GENERATED(lexems)) { return; } - lexems = "$text@msg TEXT " + Game.Random(ADV_FIRST, ADV_END) + "@"; + lexems = "$text@text Text " + Game.Random(ADV_FIRST, ADV_END) + "@"; } // реклама void dlg_Misc(Critter player, Critter none, string& lexems) @@ -396,7 +396,7 @@ void dlg_Misc(Critter player, Critter none, string& lexems) if (!IS_DIALOG_GENERATED(lexems)) { return; } - lexems = "$text@msg TEXT " + Game.Random(MISC_FIRST, MISC_END) + "@"; + lexems = "$text@text Text " + Game.Random(MISC_FIRST, MISC_END) + "@"; } // разное bool _BlackBoardInit(Critter cr, StaticItem sc, Item item, int skill) diff --git a/Scripts/NcrPostman.fos b/Scripts/NcrPostman.fos index c4873840..194bcb4e 100644 --- a/Scripts/NcrPostman.fos +++ b/Scripts/NcrPostman.fos @@ -168,7 +168,7 @@ class LetterInfo // лексемы для адреса/получателя письма string GetLetterLexems() { - return "$reciever@msg DLG " + STR_NPC_NAME_DLG(NpcDidRec) + "@$location@msg GM " + STR_LOC_NAME(LocPidRec) + "@"; + return "$reciever@text Dialogs " + STR_NPC_NAME_DLG(NpcDidRec) + "@$location@text Locations " + STR_LOC_NAME(LocPidRec) + "@"; } // рассчитывает количество опыта за выполнение квеста, в зависимости от уровня персонажа diff --git a/Scripts/NpcPlanes.fos b/Scripts/NpcPlanes.fos index 83ac4bf4..81674fa3 100644 --- a/Scripts/NpcPlanes.fos +++ b/Scripts/NpcPlanes.fos @@ -1119,7 +1119,6 @@ bool AddWalkPlane(Critter npc, uint priority, any identifier, any identifierExt, bool AddAttackPlane(Critter npc, uint priority, Critter target) { - NL(npc, "AddAttackPlane"); NpcPlane plane = CreatePlane(); plane.Type = AI_PLANE_ATTACK; plane.Priority = (priority == 0 ? AI_PLANE_ATTACK_PRIORITY : priority); @@ -1308,9 +1307,11 @@ uint EraseAttackPlane(Critter npc, ident critId) NpcPlane[] planes = GetPlanes(npc); uint erased = 0; - for (uint i = 0; i < planes.length(); i++) { - if (planes[i].Attack_TargId == critId && ErasePlane(npc, i - erased)) { - erased++; + if (planes != null) { + for (uint i = 0; i < planes.length(); i++) { + if (planes[i].Attack_TargId == critId && ErasePlane(npc, i - erased)) { + erased++; + } } } diff --git a/Scripts/NrWriKidnap.fos b/Scripts/NrWriKidnap.fos index 76755af8..29bdc549 100644 --- a/Scripts/NrWriKidnap.fos +++ b/Scripts/NrWriKidnap.fos @@ -458,7 +458,7 @@ void dlg_WeaponHand(Critter player, Critter npc, string& lexems) { Item item = _CritGetItemHand(player); if (valid(item) && item.Type == ItemType::Weapon) { - lexems = "$weaponName@msg ITEM" + STR_ITEM_NAME(item) + "@"; + lexems = "$weaponName@text Item" + STR_ITEM_NAME(item) + "@"; } } diff --git a/Scripts/NukeMachine.fos b/Scripts/NukeMachine.fos index 98dd01bb..fde1cdbd 100644 --- a/Scripts/NukeMachine.fos +++ b/Scripts/NukeMachine.fos @@ -92,7 +92,7 @@ void TryHitSomeOne(Critter player, Item nukeMashine) if (!critters.isEmpty()) { string lexems = "$name " + (target.IsControlledByPlayer ? Obsolete::GetPlayerName(target.Id) : - (target.DialogId != EMPTY_HSTRING ? "@msg DLG " + STR_NPC_NAME_DLG(target.DialogId) + " @" : "")); + (target.DialogId != EMPTY_HSTRING ? "@text Dialogs " + STR_NPC_NAME_DLG(target.DialogId) + " @" : "")); for (uint j = 0; j < critters.length(); j++) { if (critters[j].Id != target.Id) { critters[j].SayMsg(SAY_NETMSG, TextPackName::Text, STR_SOMEBODY_DODGE, lexems); diff --git a/Scripts/Poker.fos b/Scripts/Poker.fos index 068f8a8f..de660445 100644 --- a/Scripts/Poker.fos +++ b/Scripts/Poker.fos @@ -214,16 +214,16 @@ string GetStrCard(uint8 num) m = GetRank(num); switch (i) { case CARD_SPADES: - Suit = "@msg dlg " + DLGSTR(DID, STR_CARD_SPADES) + "@"; + Suit = "@text Dialogs " + DLGSTR(DID, STR_CARD_SPADES) + "@"; break; case CARD_HEARTS: - Suit = "@msg dlg " + DLGSTR(DID, STR_CARD_HEARTS) + "@"; + Suit = "@text Dialogs " + DLGSTR(DID, STR_CARD_HEARTS) + "@"; break; case CARD_DIAMONDS: - Suit = "@msg dlg " + DLGSTR(DID, STR_CARD_DIAMONDS) + "@"; + Suit = "@text Dialogs " + DLGSTR(DID, STR_CARD_DIAMONDS) + "@"; break; case CARD_CLUBS: - Suit = "@msg dlg " + DLGSTR(DID, STR_CARD_CLUBS) + "@"; + Suit = "@text Dialogs " + DLGSTR(DID, STR_CARD_CLUBS) + "@"; break; default: Suit = "error"; @@ -231,43 +231,43 @@ string GetStrCard(uint8 num) } switch (m) { case CARD_2: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_2) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_2) + "@"; break; case CARD_3: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_3) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_3) + "@"; break; case CARD_4: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_4) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_4) + "@"; break; case CARD_5: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_5) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_5) + "@"; break; case CARD_6: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_6) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_6) + "@"; break; case CARD_7: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_7) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_7) + "@"; break; case CARD_8: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_8) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_8) + "@"; break; case CARD_9: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_9) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_9) + "@"; break; case CARD_10: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_10) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_10) + "@"; break; case CARD_JACK: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_JACK) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_JACK) + "@"; break; case CARD_LADY: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_LADY) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_LADY) + "@"; break; case CARD_KING: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_KING) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_KING) + "@"; break; case CARD_ACE: - Rank = "@msg dlg " + DLGSTR(DID, STR_CARD_ACE) + "@"; + Rank = "@text Dialogs " + DLGSTR(DID, STR_CARD_ACE) + "@"; break; default: Rank = "error" + m; @@ -435,34 +435,34 @@ string GetStrCombo(uint8 combo) string res; switch (num) { case CARD_COMBO_HIGHCARD: - res = "@msg dlg " + DLGSTR(DID, STR_COMBO_HIGHCARD) + "@"; + res = "@text Dialogs " + DLGSTR(DID, STR_COMBO_HIGHCARD) + "@"; break; case CARD_COMBO_ONEPAIR: - res = "@msg dlg " + DLGSTR(DID, STR_COMBO_ONEPAIR) + "@"; + res = "@text Dialogs " + DLGSTR(DID, STR_COMBO_ONEPAIR) + "@"; break; case CARD_COMBO_TWOPAIR: - res = "@msg dlg " + DLGSTR(DID, STR_COMBO_TWOPAIR) + "@"; + res = "@text Dialogs " + DLGSTR(DID, STR_COMBO_TWOPAIR) + "@"; break; case CARD_COMBO_SET: - res = "@msg dlg " + DLGSTR(DID, STR_COMBO_SET) + "@"; + res = "@text Dialogs " + DLGSTR(DID, STR_COMBO_SET) + "@"; break; case CARD_COMBO_STRAIGHT: - res = "@msg dlg " + DLGSTR(DID, STR_COMBO_STRAIGHT) + "@"; + res = "@text Dialogs " + DLGSTR(DID, STR_COMBO_STRAIGHT) + "@"; break; case CARD_COMBO_FLUSH: - res = "@msg dlg " + DLGSTR(DID, STR_COMBO_FLUSH) + "@"; + res = "@text Dialogs " + DLGSTR(DID, STR_COMBO_FLUSH) + "@"; break; case CARD_COMBO_FULLHOUSE: - res = "@msg dlg " + DLGSTR(DID, STR_COMBO_FULLHOUSE) + "@"; + res = "@text Dialogs " + DLGSTR(DID, STR_COMBO_FULLHOUSE) + "@"; break; case CARD_COMBO_FOAK: - res = "@msg dlg " + DLGSTR(DID, STR_COMBO_FOAK) + "@"; + res = "@text Dialogs " + DLGSTR(DID, STR_COMBO_FOAK) + "@"; break; case CARD_COMBO_STRFLUSH: - res = "@msg dlg " + DLGSTR(DID, STR_COMBO_STRFLUSH) + "@"; + res = "@text Dialogs " + DLGSTR(DID, STR_COMBO_STRFLUSH) + "@"; break; case CARD_COMBO_ROYALFLUSH: - res = "@msg dlg " + DLGSTR(DID, STR_COMBO_ROYALFLUSH) + "@"; + res = "@text Dialogs " + DLGSTR(DID, STR_COMBO_ROYALFLUSH) + "@"; break; default: res = "error"; @@ -484,14 +484,14 @@ void PrintCards(Critter master, Critter pokerMan, uint8 pl) // Вывод на DlgTxtNet[pokerMan.PokerNumOfNpc] = ""; DlgTxt2[pokerMan.PokerNumOfNpc] = ""; if (pl == 0) { - DialStrCards = "@msg dlg " + DLGSTR(DID, STR_CARDS) + "@\n"; - DialStrCardsNet = "@msg dlg " + DLGSTR(DID, STR_CARDS) + "@\n"; - DialStrCombo = "@msg dlg " + DLGSTR(DID, STR_COMBO) + "@ "; + DialStrCards = "@text Dialogs " + DLGSTR(DID, STR_CARDS) + "@\n"; + DialStrCardsNet = "@text Dialogs " + DLGSTR(DID, STR_CARDS) + "@\n"; + DialStrCombo = "@text Dialogs " + DLGSTR(DID, STR_COMBO) + "@ "; } else { - DialStrCards = "@msg dlg " + DLGSTR(DID, STR_CARDS_PL) + "@\n"; - DialStrCardsNet = "@msg dlg " + DLGSTR(DID, STR_CARDS_PL) + "@\n"; - DialStrCombo = "@msg dlg " + DLGSTR(DID, STR_COMBO_PL) + "@ "; + DialStrCards = "@text Dialogs " + DLGSTR(DID, STR_CARDS_PL) + "@\n"; + DialStrCardsNet = "@text Dialogs " + DLGSTR(DID, STR_CARDS_PL) + "@\n"; + DialStrCombo = "@text Dialogs " + DLGSTR(DID, STR_COMBO_PL) + "@ "; } for (uint8 i = 0; i < CARD_COUNT; i++) { @@ -552,7 +552,7 @@ void PrintFraud2Text(Critter master, Critter pokerMan) PrintCards(master, pokerMan, 0); DlgTxt[pokerMan.PokerNumOfNpc] = - "@msg dlg " + DLGSTR(DID, STR_CARD_IN_SLEEVE) + "@ " + GetStrCard(CardInSleeve[pokerMan.PokerNumOfNpc]) + "\n" + DlgTxt[pokerMan.PokerNumOfNpc]; + "@text Dialogs " + DLGSTR(DID, STR_CARD_IN_SLEEVE) + "@ " + GetStrCard(CardInSleeve[pokerMan.PokerNumOfNpc]) + "\n" + DlgTxt[pokerMan.PokerNumOfNpc]; DL("\n PrintFraud2Text: " + DlgTxt[pokerMan.PokerNumOfNpc]); } @@ -1089,18 +1089,18 @@ uint16[] WaitForGame = {}; bool[] App = {}; -string DialStrCards = "@msg dlg " + DLGSTR(DID, STR_CARDS) + "@\n"; // Ваши карты: -string DialStrCardsNet = "@msg dlg " + DLGSTR(DID, STR_CARDS) + "@\n"; // Ваши карты: -string DialStrCombo = "@msg dlg " + DLGSTR(DID, STR_COMBO) + "@ "; // у вас -string DialStrBank = "@msg dlg " + DLGSTR(DID, STR_BANK) + "@ "; // В банке: -string DialStrBet = "@msg dlg " + DLGSTR(DID, STR_BET) + "@ "; // Текущая ставка: -string DialStrMineBet = "@msg dlg " + DLGSTR(DID, STR_MBET) + "@ "; // Ваша последняя ставка: -string DialStrFold = "@msg dlg " + DLGSTR(DID, STR_FOLD) + "@"; // спасовал -string DialStrRaise = "@msg dlg " + DLGSTR(DID, STR_RAISE) + "@"; // поднял ставку -string DialStrWait = "@msg dlg " + DLGSTR(DID, STR_WAIT) + "@"; // еще не делал ставку -string DialStrCall = "@msg dlg " + DLGSTR(DID, STR_CALL) + "@"; // ответил на ставку -string DialStrAccept = "@msg dlg " + DLGSTR(DID, STR_ACCEPT) + "@"; // принял ставку -string DialStrPl = "@msg dlg " + DLGSTR(DID, STR_PL) + "@ "; // Игрок +string DialStrCards = "@text Dialogs " + DLGSTR(DID, STR_CARDS) + "@\n"; // Ваши карты: +string DialStrCardsNet = "@text Dialogs " + DLGSTR(DID, STR_CARDS) + "@\n"; // Ваши карты: +string DialStrCombo = "@text Dialogs " + DLGSTR(DID, STR_COMBO) + "@ "; // у вас +string DialStrBank = "@text Dialogs " + DLGSTR(DID, STR_BANK) + "@ "; // В банке: +string DialStrBet = "@text Dialogs " + DLGSTR(DID, STR_BET) + "@ "; // Текущая ставка: +string DialStrMineBet = "@text Dialogs " + DLGSTR(DID, STR_MBET) + "@ "; // Ваша последняя ставка: +string DialStrFold = "@text Dialogs " + DLGSTR(DID, STR_FOLD) + "@"; // спасовал +string DialStrRaise = "@text Dialogs " + DLGSTR(DID, STR_RAISE) + "@"; // поднял ставку +string DialStrWait = "@text Dialogs " + DLGSTR(DID, STR_WAIT) + "@"; // еще не делал ставку +string DialStrCall = "@text Dialogs " + DLGSTR(DID, STR_CALL) + "@"; // ответил на ставку +string DialStrAccept = "@text Dialogs " + DLGSTR(DID, STR_ACCEPT) + "@"; // принял ставку +string DialStrPl = "@text Dialogs " + DLGSTR(DID, STR_PL) + "@ "; // Игрок void _PokermanInit(Critter pokerMan, bool firstTime) { @@ -1557,12 +1557,12 @@ void EndGame(Critter master, Critter pokerMan) // Определение поб t = i; } } - DlgTxt[pokerMan.PokerNumOfNpc] = "@msg dlg " + DLGSTR(DID, STR_WINCOMBO) + "@ " + GetStrCombo(GetCombo(t, GameCards[pokerMan.PokerNumOfNpc])); + DlgTxt[pokerMan.PokerNumOfNpc] = "@text Dialogs " + DLGSTR(DID, STR_WINCOMBO) + "@ " + GetStrCombo(GetCombo(t, GameCards[pokerMan.PokerNumOfNpc])); PlayerCardsInDial[pokerMan.PokerNumOfNpc] = true; master.SayMsg(SAY_NETMSG, TextPackName::Dialogs, DLGSTR(DID, STR_DLGREPLY), - "$gametext" + "@msg dlg " + DLGSTR(DID, STR_WINCOMBO) + "@ " + GetStrCombo(GetCombo(t, GameCards[pokerMan.PokerNumOfNpc]))); + "$gametext" + "@text Dialogs " + DLGSTR(DID, STR_WINCOMBO) + "@ " + GetStrCombo(GetCombo(t, GameCards[pokerMan.PokerNumOfNpc]))); for (uint8 s = 0; s < CARD_COUNT; s++) { comb += GetStrCard(GameCards[pokerMan.PokerNumOfNpc][t * 5 + s]); if (s != CARD_COUNT - 1) { @@ -1570,20 +1570,23 @@ void EndGame(Critter master, Critter pokerMan) // Определение поб } } master.SayMsg(SAY_NETMSG, TextPackName::Dialogs, DLGSTR(DID, STR_DLGREPLY), "$gametext" + comb); - DlgTxt[pokerMan.PokerNumOfNpc] += "\n" + comb + "\n" + "@msg dlg " + DLGSTR(DID, STR_WINERS) + "@"; + DlgTxt[pokerMan.PokerNumOfNpc] += "\n" + comb + "\n" + "@text Dialogs " + DLGSTR(DID, STR_WINERS) + "@"; prize = Bank[pokerMan.PokerNumOfNpc] / wc; - master.SayMsg(SAY_NETMSG, TextPackName::Dialogs, DLGSTR(DID, STR_DLGREPLY), "$gametext" + "@msg dlg " + DLGSTR(DID, STR_WINERS) + "@"); + master.SayMsg(SAY_NETMSG, TextPackName::Dialogs, DLGSTR(DID, STR_DLGREPLY), "$gametext" + "@text Dialogs " + DLGSTR(DID, STR_WINERS) + "@"); for (uint8 i = 0; i < 4; i++) { if (winners[i] == 1) { if (i == 0) { - master.SayMsg(SAY_NETMSG, TextPackName::Dialogs, DLGSTR(DID, STR_DLGREPLY), "$gametext" + "@msg dlg " + DLGSTR(DID, STR_YOUWIN) + "@"); - DlgTxt[pokerMan.PokerNumOfNpc] += " @msg dlg " + DLGSTR(DID, STR_YOUWIN) + "@" + "\n"; + master.SayMsg(SAY_NETMSG, TextPackName::Dialogs, DLGSTR(DID, STR_DLGREPLY), "$gametext" + "@text Dialogs " + DLGSTR(DID, STR_YOUWIN) + "@"); + DlgTxt[pokerMan.PokerNumOfNpc] += " @text Dialogs " + DLGSTR(DID, STR_YOUWIN) + "@" + "\n"; master.PokerWins += 1; master.AddItem(Content::Item::bottle_caps, prize * (WinKoef[pokerMan.PokerNumOfNpc] / 100)); } else { - master.SayMsg(SAY_NETMSG, TextPackName::Dialogs, DLGSTR(DID, STR_DLGREPLY), "$gametext" + "@msg dlg " + DLGSTR(DID, STR_WINPLNUM) + "@ " + i); - DlgTxt[pokerMan.PokerNumOfNpc] += " @msg dlg " + DLGSTR(DID, STR_WINPLNUM) + "@ " + i + "\n"; + master.SayMsg(SAY_NETMSG, + TextPackName::Dialogs, + DLGSTR(DID, STR_DLGREPLY), + "$gametext" + "@text Dialogs " + DLGSTR(DID, STR_WINPLNUM) + "@ " + i); + DlgTxt[pokerMan.PokerNumOfNpc] += " @text Dialogs " + DLGSTR(DID, STR_WINPLNUM) + "@ " + i + "\n"; } } } @@ -1611,38 +1614,38 @@ void dlg_GameText(Critter player, Critter pokerMan, string& lexems) lexems += "$ra_three" + Raise_3[pokerMan.PokerNumOfNpc]; lexems += "$replaceCardOne"; if (GetBit(ReplCards[pokerMan.PokerNumOfNpc][0], 1) == 1) { - lexems += "@msg dlg " + DLGSTR(DID, STR_UNSELECT) + "@"; + lexems += "@text Dialogs " + DLGSTR(DID, STR_UNSELECT) + "@"; } else { - lexems += "@msg dlg " + DLGSTR(DID, STR_SELECT) + "@"; + lexems += "@text Dialogs " + DLGSTR(DID, STR_SELECT) + "@"; } lexems += "$replaceCardTwo"; if (GetBit(ReplCards[pokerMan.PokerNumOfNpc][0], 2) == 1) { - lexems += "@msg dlg " + DLGSTR(DID, STR_UNSELECT) + "@"; + lexems += "@text Dialogs " + DLGSTR(DID, STR_UNSELECT) + "@"; } else { - lexems += "@msg dlg " + DLGSTR(DID, STR_SELECT) + "@"; + lexems += "@text Dialogs " + DLGSTR(DID, STR_SELECT) + "@"; } lexems += "$replaceCardThree"; if (GetBit(ReplCards[pokerMan.PokerNumOfNpc][0], 3) == 1) { - lexems += "@msg dlg " + DLGSTR(DID, STR_UNSELECT) + "@"; + lexems += "@text Dialogs " + DLGSTR(DID, STR_UNSELECT) + "@"; } else { - lexems += "@msg dlg " + DLGSTR(DID, STR_SELECT) + "@"; + lexems += "@text Dialogs " + DLGSTR(DID, STR_SELECT) + "@"; } lexems += "$replaceCardFour"; if (GetBit(ReplCards[pokerMan.PokerNumOfNpc][0], 4) == 1) { - lexems += "@msg dlg " + DLGSTR(DID, STR_UNSELECT) + "@"; + lexems += "@text Dialogs " + DLGSTR(DID, STR_UNSELECT) + "@"; } else { - lexems += "@msg dlg " + DLGSTR(DID, STR_SELECT) + "@"; + lexems += "@text Dialogs " + DLGSTR(DID, STR_SELECT) + "@"; } lexems += "$replaceCardFive"; if (GetBit(ReplCards[pokerMan.PokerNumOfNpc][0], 5) == 1) { - lexems += "@msg dlg " + DLGSTR(DID, STR_UNSELECT) + "@"; + lexems += "@text Dialogs " + DLGSTR(DID, STR_UNSELECT) + "@"; } else { - lexems += "@msg dlg " + DLGSTR(DID, STR_SELECT) + "@"; + lexems += "@text Dialogs " + DLGSTR(DID, STR_SELECT) + "@"; } } @@ -1746,10 +1749,10 @@ void dlg_FraudCheck(Critter player, Critter pokerMan, string& lexems) pokerFraud.setIfNotExist(player.Id, 0); if (pokerFraud[player.Id] != 1) { - lexems = "$fraud@msg dlg " + DLGSTR(DID, STR_FRAUD_ON) + "@"; + lexems = "$fraud@text Dialogs " + DLGSTR(DID, STR_FRAUD_ON) + "@"; } else { - lexems = "$fraud@msg dlg " + DLGSTR(DID, STR_FRAUD_OFF) + "@"; + lexems = "$fraud@text Dialogs " + DLGSTR(DID, STR_FRAUD_OFF) + "@"; } } @@ -1762,10 +1765,10 @@ void dlg_ManyWins(Critter player, Critter pokerMan, string& lexems) auto pokerMamywins = pokerMan.PokerManywins.clone(); pokerMamywins.setIfNotExist(player.Id, 0); if (Game.GetFullSecond() - pokerMamywins[player.Id] < (WaitForGame[pokerMan.PokerNumOfNpc] * 24 * 60 * 60)) { - lexems = "$manywins@msg dlg " + DLGSTR(DID, STR_MANYWINS_ON) + "@"; + lexems = "$manywins@text Dialogs " + DLGSTR(DID, STR_MANYWINS_ON) + "@"; } else { - lexems = "$manywins@msg dlg " + DLGSTR(DID, STR_MANYWINS_OFF) + "@"; + lexems = "$manywins@text Dialogs " + DLGSTR(DID, STR_MANYWINS_OFF) + "@"; } } diff --git a/Scripts/Purgatory.fos b/Scripts/Purgatory.fos index 62229550..69108367 100644 --- a/Scripts/Purgatory.fos +++ b/Scripts/Purgatory.fos @@ -15,7 +15,7 @@ #define STAGE_FIGHT (3) // Открытие дверей во внутренний двор. Начало сражение. #define STAGE_FINISH (4) // Открытие дверей во внешний мир, бой закончен -#define _PlayerName #(cr)(cr.IsControlledByPlayer ? Obsolete::GetPlayerName(cr.Id) : "@msg DLG " + STR_NPC_NAME(cr.DialogId, cr.ProtoId) + "@") +#define _PlayerName #(cr)(cr.IsControlledByPlayer ? Obsolete::GetPlayerName(cr.Id) : "@text Dialogs " + STR_NPC_NAME(cr.DialogId, cr.ProtoId) + "@") #define ANSWER_CONFIRM_INVITE (0) #define ANSWER_REJECT_INVITE (1) @@ -662,7 +662,7 @@ string GetTeamPlayers(BattleTeam team) Critter cr; uint l = bInfo.Stage >= STAGE_BEGIN ? team.Players.length() : team.Requests.length(); if (l == 0) { - teamText += "@msg TEXT 7127@"; + teamText += "@text Text 7127@"; } else { for (uint i = 0; i < l; i++) { diff --git a/Scripts/Repairer.fos b/Scripts/Repairer.fos index fb998c7f..51f3f695 100644 --- a/Scripts/Repairer.fos +++ b/Scripts/Repairer.fos @@ -212,7 +212,7 @@ void dlg_CallItemBefore(Critter player, Critter npc, string& lexems) if (!valid(item)) { return; } - lexems = "$item_name@msg ITEM " + STR_ITEM_NAME(item) + "@$price" + GetRepairCost(player, npc, item); + lexems = "$item_name@text Item " + STR_ITEM_NAME(item) + "@$price" + GetRepairCost(player, npc, item); } // Функция для проверки, отремонтирован ли предмет @@ -226,7 +226,7 @@ void dlg_CallItemAfter(Critter player, Critter npc, string& lexems) return; } - lexems = "$item_name@msg ITEM " + STR_PROTO_ITEM_NAME(player.RepairItemPid[npc.Id]) + "@"; + lexems = "$item_name@text Item " + STR_PROTO_ITEM_NAME(player.RepairItemPid[npc.Id]) + "@"; } // Время и дата, когда будет отремонтирован предмет для случая, когда предмет уже взят на ремонт diff --git a/Scripts/ReplicationTerminal.fos b/Scripts/ReplicationTerminal.fos index 732e00e9..d0b26115 100644 --- a/Scripts/ReplicationTerminal.fos +++ b/Scripts/ReplicationTerminal.fos @@ -49,8 +49,7 @@ void ModuleInit() void OnPlayerSaidText(Critter critter, string text, bool fromDialog, ident talkerId, bool isNpc) { - Game.Log("OnPlayerSaidText fired. From dialog = " + fromDialog); - if (valid(critter) && fromDialog && !text.isEmpty()) { + if (valid(critter) && fromDialog && !text.isEmpty() && talkerId.value == Content::Dialog::repl_terminal.uhash) { switch (critter.TerminalDialogId) { case DialogTransferReal: { TransferMoney(critter, text, true); @@ -66,11 +65,13 @@ void OnPlayerSaidText(Critter critter, string text, bool fromDialog, ident talke } case DialogSetTargetName: { Player player = Game.GetPlayer(text); - if (player == null) { + // player.GetControlledCritter() == null - игрок оффлайн, свойства недоступны для изменения. В т.ч баланс лицевого счета. + if (player == null || player.GetControlledCritter() == null) { critter.TerminalPlayerId = ZERO_IDENT; SEND_ERROR_RETURN(critter, STR_PLAYER_NOT_FOUND); } critter.TerminalPlayerId = player.GetControlledCritter().Id; + Game.Log("SET CR! player.TerminalPlayerId = " + critter.TerminalPlayerId + "; player.Id =" + critter.Id); critter.PlayerClientCall.ForceDialogResult(ZERO_IDENT, Content::Dialog::repl_terminal, isNpc, 1, true); break; } @@ -96,12 +97,13 @@ void r_PaySelf(Critter player, Critter terminal) void dlg_Reset(Critter player, Critter terminal, string& lexems) { player.TerminalDialogId = DialogNone; // Сброс + Game.Log("reset called"); player.TerminalPlayerId = ZERO_IDENT; player.CanSendSay = false; - /*if (lexems.isEmpty()) { - return; - }*/ + //if (lexems.isEmpty()) { + // return; + //} if (!IS_DIALOG_GENERATED(lexems)) { return; @@ -199,6 +201,7 @@ void TransferMoney(Critter player, string moneyCount, bool forReal) // Get stored critter. Critter cr = Game.GetCritter(player.TerminalPlayerId); if (not valid(cr)) { + Game.Log("ERROR! player.TerminalPlayerId = " + player.TerminalPlayerId + "; player.Id =" + player.Id); SEND_ERROR_RETURN(player, STR_PLAYER_NOT_FOUND); } diff --git a/Scripts/Resources.fos b/Scripts/Resources.fos index 0f212660..c7220acd 100644 --- a/Scripts/Resources.fos +++ b/Scripts/Resources.fos @@ -533,9 +533,9 @@ class ToolDefault : IResourceDemand, IResourceResult, IResourceGetTimeouts, IRes { uint OnResult(Critter master, Item onItem, StaticItem onScenery, hstring toolPid, uint count, hstring newItemsPid) { - string lexem = "$itemname" + "@msg ITEM " + STR_PROTO_ITEM_NAME(newItemsPid) + "@"; + string lexem = "$itemname" + "@text Item " + STR_PROTO_ITEM_NAME(newItemsPid) + "@"; if (count > 1) { - lexem += "$count" + count + "$type" + "@msg text " + STR_TYPE_COUNT + "@"; + lexem += "$count" + count + "$type" + "@text Text " + STR_TYPE_COUNT + "@"; master.SayMsg(SAY_NETMSG, TextPackName::Text, STR_ITEMS_ADDED, lexem); } else { @@ -694,11 +694,11 @@ class ToolShowInfoInWeight : IResourceResult { uint OnResult(Critter master, Item onItem, StaticItem onScenery, hstring toolPid, uint count, hstring newItemsPid) { - string lexem = "$itemname" + "@msg ITEM " + STR_PROTO_ITEM_NAME(newItemsPid) + "@"; + string lexem = "$itemname" + "@text Item " + STR_PROTO_ITEM_NAME(newItemsPid) + "@"; if (count > 0) { ProtoItem newProtoItem = Game.GetProtoItem(newItemsPid); uint itemWeight = newProtoItem.Weight * count / 1000; - lexem += "$count" + itemWeight + "$type" + "@msg text " + STR_TYPE_KG + "@"; + lexem += "$count" + itemWeight + "$type" + "@text Text " + STR_TYPE_KG + "@"; master.SayMsg(SAY_NETMSG, TextPackName::Text, STR_ITEMS_ADDED, lexem); } return 0; diff --git a/Scripts/Roulette.fos b/Scripts/Roulette.fos index 0945ecf5..f3d2edeb 100644 --- a/Scripts/Roulette.fos +++ b/Scripts/Roulette.fos @@ -196,17 +196,17 @@ string GetNumberStr(uint8 number) // Получаем строковое обо if (number > 36) { if (number == NUMBER_ZERO) // Если число - зеро { - res += "@msg dlg " + DLGSTR(DID, STR_ZERO) + "@"; // Вытаскиваем из диалога номер для формирования лексемы означающей зеро + res += "@text Dialogs " + DLGSTR(DID, STR_ZERO) + "@"; // Вытаскиваем из диалога номер для формирования лексемы означающей зеро } else // Если число - двойное зеро { - res += "@msg dlg " + DLGSTR(DID, STR_DOUBLE_ZERO) + "@"; // Вытаскиваем из диалога номер для формирования лексемы означающей двойное зеро + res += "@text Dialogs " + DLGSTR(DID, STR_DOUBLE_ZERO) + "@"; // Вытаскиваем из диалога номер для формирования лексемы означающей двойное зеро } } else { - res += "@msg dlg " + DLGSTR(DID, STR_NUMBER) + "@" + number + GetColor(number); // Если шарик попал на обычное число выводим это число и его цвет + res += "@text Dialogs " + DLGSTR(DID, STR_NUMBER) + "@" + number + GetColor(number); // Если шарик попал на обычное число выводим это число и его цвет } - res += "\n@msg dlg " + DLGSTR(DID, STR_WINMONEY) + "@"; // Сохраняем результат + res += "\n@text Dialogs " + DLGSTR(DID, STR_WINMONEY) + "@"; // Сохраняем результат return res; } @@ -232,11 +232,11 @@ string GetColor(int i) // Определение цвета числа case 32: case 34: case 36: - res += " @msg dlg " + DLGSTR(DID, STR_COLOR_RED) + + res += " @text Dialogs " + DLGSTR(DID, STR_COLOR_RED) + "@"; // Для числе 1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36 вытаскиваем сообщение о том что число красное break; - default: // Для остальных чисел - res += " @msg dlg " + DLGSTR(DID, STR_COLOR_BLACK) + "@"; // Формируем лексему обозначающую черный цвет + default: // Для остальных чисел + res += " @text Dialogs " + DLGSTR(DID, STR_COLOR_BLACK) + "@"; // Формируем лексему обозначающую черный цвет break; } return res; @@ -611,7 +611,7 @@ void dlg_MakeBet(Critter master, Critter croupier, string& str) // Ветка в else { // if( valid( str ) ) // Вызыв функции произошел в момент формирования диалога // { - str = "$makebet" + "@msg dlg " + STR_SET_BET_TYPE + "@"; // ToDo спрашиваем на что будем ставить (в дальнейшем будет доработка) + str = "$makebet" + "@text Dialogs " + STR_SET_BET_TYPE + "@"; // ToDo спрашиваем на что будем ставить (в дальнейшем будет доработка) // } } } @@ -914,11 +914,11 @@ void r_SetBetSize(Critter master, Critter croupier, int betSizeNum) // Уста else // Если число больше 36, значит игрок поставил на зеро или на двойное зеро { if (bCoord == NUMBER_ZERO) { - sCoords += "@msg dlg " + DLGSTR(DID, STR_ZERO) + "@"; // подставляем в строку лексему формирующую слово зеро + sCoords += "@text Dialogs " + DLGSTR(DID, STR_ZERO) + "@"; // подставляем в строку лексему формирующую слово зеро } else // NUMBER_DOUBLE_ZERO { - sCoords += "@msg dlg " + DLGSTR(DID, STR_DOUBLE_ZERO) + "@"; // подставляем в строку лексему формирующую слова "двойное зеро" + sCoords += "@text Dialogs " + DLGSTR(DID, STR_DOUBLE_ZERO) + "@"; // подставляем в строку лексему формирующую слова "двойное зеро" } } if (i != len2 - 1) // Если мы не дошли до последнего числа diff --git a/Scripts/SayExtended.fos b/Scripts/SayExtended.fos index c6dcc322..efcb9e32 100644 --- a/Scripts/SayExtended.fos +++ b/Scripts/SayExtended.fos @@ -100,13 +100,15 @@ void ForceDialogResult(ident talkerId, hstring dialogId, bool isNpc, int result, { // Перегенерация диалога if (refresh) { - Game.CustomCall("DialogAnswer " + isNpc + " " + (isNpc ? talkerId.str : dialogId.str) + " " + ANSWER_BEGIN); + Game.CustomCall("DialogAnswer " + isNpc + " " + (isNpc ? talkerId.value : dialogId.uhash) + " " + ANSWER_BEGIN); } - Game.CustomCall("DialogAnswer " + isNpc + " " + (isNpc ? talkerId.str : dialogId.str) + " " + result); + Game.CustomCall("DialogAnswer " + isNpc + " " + (isNpc ? talkerId.value : dialogId.uhash) + " " + result); + Game.Log(">>DialogAnswer " + isNpc + " " + (isNpc ? talkerId.value : dialogId.uhash) + " " + result); } void AddDialogStr(uint msg, string lexems, bool append) { + Game.Log("MSG NUM recieved " + msg); auto screen = Gui::GetActiveScreen(); if (screen.Index == CLIENT_SCREEN_DIALOG) { auto dialog = cast(screen); diff --git a/Scripts/Stdlib.fos b/Scripts/Stdlib.fos index 3c230296..4b4ab7f4 100644 --- a/Scripts/Stdlib.fos +++ b/Scripts/Stdlib.fos @@ -322,7 +322,7 @@ void SkillUp(Critter player, CritterProperty skill) value = 5; } player.SetAsInt(skill, player.GetAsInt(skill) + value); - player.SayMsg(SAY_NETMSG, TextPackName::Text, STR_SKILL_UP, "$skill @msg GAME " + ((10000 + skill) * 10 + 1) + "@" + "$value" + value); + player.SayMsg(SAY_NETMSG, TextPackName::Text, STR_SKILL_UP, "$skill @text Game " + ((10000 + skill) * 10 + 1) + "@" + "$value" + value); } #endif diff --git a/Scripts/Traveller.fos b/Scripts/Traveller.fos index 70a0b60c..1753761b 100644 --- a/Scripts/Traveller.fos +++ b/Scripts/Traveller.fos @@ -593,7 +593,7 @@ void dlg_WhereAndWhen(Critter player, Critter npc, string& lexems) if (valid(map)) { Location loc = map.GetLocation(); if (valid(loc)) { - lexems = "$where@msg GM " + STR_LOC_NAME(loc.ProtoId) + "@"; + lexems = "$where@text Locations " + STR_LOC_NAME(loc.ProtoId) + "@"; } } } diff --git a/Scripts/VcCommon.fos b/Scripts/VcCommon.fos index 0ce351d6..d65c1bfa 100644 --- a/Scripts/VcCommon.fos +++ b/Scripts/VcCommon.fos @@ -20,8 +20,8 @@ void r_GiveMail(Critter cr, Critter npc) { Item item = cr.AddItem(Content::Item::postman_letter, 1); if (valid(item)) { - item.Lexems = - "$reciever@msg DLG " + STR_NPC_NAME_DLG(Content::Dialog::klam_vic) + " @$location@msg GM " + STR_LOC_NAME(Content::Location::klamath) + " @"; + item.Lexems = "$reciever@text Dialogs " + STR_NPC_NAME_DLG(Content::Dialog::klam_vic) + " @$location@text Locations " + + STR_LOC_NAME(Content::Location::klamath) + " @"; item.SetupScript(_ValeryMailInit); item.VCityCommonIsMail = true; item.VCityCommonMailOwnerId = cr.Id; diff --git a/Scripts/VcLynnet.fos b/Scripts/VcLynnet.fos index 8b108ebb..c3c19af5 100644 --- a/Scripts/VcLynnet.fos +++ b/Scripts/VcLynnet.fos @@ -110,7 +110,7 @@ void dlg_PrisonerName(Critter player, Critter npc, string& lexems) if (!valid(prisoner)) { return; } - lexems = "$name@msg DLG " + STR_NPC_NAME_DLG(prisoner.DialogId) + "@"; + lexems = "$name@text Dialogs " + STR_NPC_NAME_DLG(prisoner.DialogId) + "@"; prisoner.OnTalk.Subscribe(_PrisonerTalk); } diff --git a/Scripts/Worldmap.fos b/Scripts/Worldmap.fos index dbb15014..cb8ff852 100644 --- a/Scripts/Worldmap.fos +++ b/Scripts/Worldmap.fos @@ -1333,7 +1333,7 @@ void FindEncounter(Critter[] group, Item car, uint x, uint y, uint& encounterDes leader.SayMsg(Tla::SayEncounterRt, TextPackName::GlobalMap, feAlready.OwnerGroup ? STR_QUESTION_WITH_PLAYERS : STR_QUESTION_WITH_PLAYER, - "$who @msg gm " + feAlready.Encounter.StrNum + "@$player" + Obsolete::GetPlayerName(feAlready.OwnerId)); + "$who @text GlobalMap " + feAlready.Encounter.StrNum + "@$player" + Obsolete::GetPlayerName(feAlready.OwnerId)); } else { leader.SayMsg(Tla::SayEncounterRt, @@ -1406,7 +1406,7 @@ void FindEncounter(Critter[] group, Item car, uint x, uint y, uint& encounterDes int outdoorsman = leader.SkillOutdoorsman + zone.Difficulty; outdoorsman = CLAMP(outdoorsman, 6, 95); if (outdoorsman >= Game.Random(1, 100) || walkWaterOrFly) { - leader.SayMsg(Tla::SayEncounterAny, TextPackName::GlobalMap, STR_QUESTION, "$who @msg gm " + enc.StrNum + "@"); + leader.SayMsg(Tla::SayEncounterAny, TextPackName::GlobalMap, STR_QUESTION, "$who @text GlobalMap " + enc.StrNum + "@"); waitForAnswer = true; if (not walkWaterOrFly) { @@ -1490,13 +1490,13 @@ void InviteToEncounter(Critter[] group, Item car, uint encounterDescriptor, int for (uint i = 0, j = group.length(); i < j; i++) { Critter cr = group[i]; if (not isGenerated) { - cr.SayMsg(SAY_NETMSG, TextPackName::GlobalMap, STR_VIEW, "$who @msg gm " + fe.Encounter.StrNum + "@"); + cr.SayMsg(SAY_NETMSG, TextPackName::GlobalMap, STR_VIEW, "$who @text GlobalMap " + fe.Encounter.StrNum + "@"); } else if (valid(fe.Encounter)) { cr.SayMsg(SAY_NETMSG, TextPackName::GlobalMap, fe.OwnerGroup ? STR_VIEW_WITH_PLAYERS : STR_VIEW_WITH_PLAYER, - "$who @msg gm " + fe.Encounter.StrNum + "@$player" + Obsolete::GetPlayerName(fe.OwnerId)); + "$who @text GlobalMap " + fe.Encounter.StrNum + "@$player" + Obsolete::GetPlayerName(fe.OwnerId)); } else { cr.SayMsg(SAY_NETMSG,