Added, Updated and Removed Mods; Updated Readme

This commit is contained in:
Rage 2024-04-01 22:56:36 -04:00
parent 255081e1ee
commit 5caee9fba5
1056 changed files with 49175 additions and 1278 deletions

View File

@ -12,7 +12,6 @@ Much of the modpack is focused on Story mode, meaning Warfare mode and all other
- Complete system overhauls, such as **Weapon Parts Overhaul**, **Western Goods**, **Stealth Overhaul**, **Anomaly Ballistics Overhaul**, **Mags Redux**, **Body Health System Realistic Overhaul** and more! - Complete system overhauls, such as **Weapon Parts Overhaul**, **Western Goods**, **Stealth Overhaul**, **Anomaly Ballistics Overhaul**, **Mags Redux**, **Body Health System Realistic Overhaul** and more!
- Expanded arsenals, featuring **Boomsticks and Sharpsticks** as the main mod introducing new weapons - Expanded arsenals, featuring **Boomsticks and Sharpsticks** as the main mod introducing new weapons
- New areas to explore, featuring **New Levels** as the mod. - New areas to explore, featuring **New Levels** as the mod.
- Total GUI overhaul, featuring **Enhanced Graphical User Interface** including custom touch-ups to personalize the menus
- Complete graphical overhaul which brings the game closer to modern standards. - Complete graphical overhaul which brings the game closer to modern standards.
- Immersive overhauled SFX that introduces a realistic approach to the nature of the Zone. - Immersive overhauled SFX that introduces a realistic approach to the nature of the Zone.
- Gorgeous animation overhauls that introduce a fresh and new feel to every vanilla weapon in the game. - Gorgeous animation overhauls that introduce a fresh and new feel to every vanilla weapon in the game.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,28 @@
[General]
gameName=stalkeranomaly
modid=0
version=d2024.3.30.0
newestVersion=
category="-1,"
nexusFileStatus=1
installationFile=Arrival_busy_hands_bug_fix.rar
repository=Nexus
ignoredVersion=
comments=
notes=
nexusDescription=
url=
hasCustomURL=false
lastNexusQuery=
lastNexusUpdate=
nexusLastModified=2024-03-31T02:57:45Z
nexusCategory=0
converted=false
validated=false
color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0)
tracked=0
[installedFiles]
1\modid=0
1\fileid=0
size=1

View File

@ -0,0 +1,243 @@
I always disliked how BHS worked. Where medkits give temporary hp and most random items heal certain parts.
This mod is my attempt at making BHS fun and immersive instead of just "use a if b, use c if d".
The github link: <https://github.com/Mirrowel/Mirrowels-BHS-Edits>
Currently in active development to balance the items and the system.
MORE UP-TO-DATE Description on Moddb page <https://www.moddb.com/mods/stalker-anomaly/addons/bhs-realistic-overhaul>
**MOD IS CONSTANTLY BEING DEVELOPED SO EXPECT CHANGES TO HAPPEN FREQUENTLY.**
# NOW INCLUDES AN EXPERIMENTL TARKOV-LIKE HP SYSTEM. READ 0.8 CHANGELOG FOR MORE INFO
**An overview of the mod and plans below.**
# General points:
## The goals of the mod:
- Make healing limbs take considerably longer.
- Remove temporary HP.
- Add painkillers and painkilling properties. Think of tarkov.
- Make medkits the main source of healing, like they should be.
- Make the system highly configurable.
## **Stuff that this mod already has:**
- No temp hp System. Replaced by painkillers instead. Exactly the same purpose as tarkov basically. Allow you to use the destroyed limbs and remove the nasty effects.
- To complement painkiller system weapon sway mod is integrated. Painkillers reduce weapon sway like if the limb is healed by that amount.
- Medkits either heal all parts at once OR they heal set amount of HP, going one HP at a time for the lowest HP limb(potentially more efficient, which makes a lot of sense).
- Broken limb system. If HP of the limb reaches 0 you need to use a surgical kit, then splint with a splint(all configurable and can turn off).
- Reworked sleep healing to heal more logically(you heal lowest limbs first). Can disable that.
- Health multiplier to enable more gradual healing. Limb HP by default is 11 torso, head; 5 for the rest - kinda low. - Experimental. Realistically would do nothing but increase the number of HP steps so it looks smoother but makes it hard to see real HP -- UNSUPPORTED - TOO MANY PROBLEMS
- Weapon sway depending on arms damage and painkiller effect
- Slower medkit usage and healing rate.
- Campfire heal for limbs(adapting script)
- Artefact healing for limbs(same thing)
## **Stuff i will add:**
- More effects on limb damage. Instead of instadeath increase received damage, stuff like that - need ideas
- Heal limbs one-by-one only like in EFT(maybe)
All new items are sold by medics. Some new items also added to flea market and butcher's shop.
As well as a lot of different traders that don't have medics nearby.
Keep in mind that in the more-or-less finished version **everything will be optional modules**. While in development i wont split it into modules so my workload is more sane.
Suggestions and ideas related to BHS are appreciated, as i myself am trying to figure out how to balance things out.
# Balancing for meds:
- All medkits heal twice as slow. Overall they heal exactly the same amount, just slower. New time is 66.8 seconds.
- Survival kit modified using same logic as medkits, but with radiation and healing boosted to match heal speed of basic medkit. New time is 90 seconds.
- Rebirth modded to last twice as long. Same idea as medkits. New time is 14 seconds.
- Bandages apply their effect instantly instead of over time.
## As for limb damage:
Keep in mind these values: Legs and Arms have 10HP per limb. Torso and Head have 22HP per limb.
That is double of what basic BHS has to make 1HP matter less in the system making balancing easier.
No, boosting HP does not make limbs survive more damage. Everything is scaled.
---
- ### Heal One System(Healing one HP at a time for one limb):
- Basic medkit: 21 HP total over the duration. Can heal two arms/legs to full or torso/head once
- Army and Cheese: 42 HP total over the duration. Can heal all arms/legs to full or both torso and head to full.
- Stimpacks: Mirror what medkits heal over their duration, but faster.
- Survival kit: 63 HP total over 90 seconds.
- Coagulant(Vinca/Barvinok): Heals 11 HP over 438 seconds. Cant heal over your HP level. (If you are at 50% then it can only heal limbs to 50%)
- Rebirth: 63 HP total over 17 seconds. Cant heal over your HP level. (If you are at 50% then it can only heal limbs to 50%)
- Propital: 30 HP total over 180 seconds. Cant heal over your HP level.
---
- ### Heal All System(Healing one HP at a time for all limbs) - LEGACY:
- Basic medkit: Head/Torso - 11 HP, Legs/Arms - 5 HP total over the duration. Can heal two arms/legs to full or torso/head once
- Army and Cheese: Head/Torso - 16 HP, Legs/Arms - 7 HP total over the duration. Can heal all arms/legs to full or both torso and head to full.
- Stimpacks: Mirror what medkits heal over their duration, but faster.
- Rebirth: Head/Torso - 22 HP, Legs/Arms - 10 HP over 17 seconds. Cant heal over your HP level. (If you are at 50% then it can only heal limbs to 50%)
---
- ### Surgery system and kits(In order to restore a limb to 1 HP surgical tools are required):
- Surgical tools: Slow use, restores one limb to be splinted in 10 seconds. One use and needs a bandage. Will cause damage on use.
- CMS: Slow use, 5 charges. Restores one limb to be splinted in 10 seconds. Can be configured to restore a limb without a splint required. More weight-efficient
---
- ### Splints:
- Splint: Slow use, restores a limb to full 1HP in 10 seconds. One charge.
- Aluminium splint: Slow use, restores a limb to full 1HP in 10 seconds. Three charges. More weight-efficient
---
- ### Painkillers(**Keep in mind that painkiller system doubles the painkiller power for torso and head because they have double the HP over legs and arms**)
- Morphine: 9 painkiller power for 305 seconds.
- Rebirth: 9 painkiller power for 305 seconds.
- Salicidic acid: 7 painkiller power for 180 seconds.
- Fentanyl: 4 painkiller power for 202 seconds.
- Analgetic(Diclofenac Sodium): 5 painkiller power for 305 seconds.
- SJ6 stimulator: 7 painkiller power for 600 seconds.
- SJ1 stimulator: 4 painkiller power for 600 seconds.
- Analgin painkiller: 2 painkiller power for 180 seconds.
- Ibuprofen: 4 painkiller power for 290 seconds.
- Yadulin: 4 painkiller power for 505 seconds.
- Adrenalin(Epinephrine): 2 painkiller power for 2184 seconds.
- Army Medkit: 4 painkiller power for 128 seconds.
- Cheese Medkit: 3 painkiller power for 128 seconds.
- Stimpack: 2 painkiller power for 128 seconds.
- Army Stimpack: 4 painkiller power for 128 seconds.
- Sci Stimpack: 3 painkiller power for 128 seconds.
- Cocaine: 2 painkiller power for 1644 seconds.
- Joint: 1 painkiller power for 420 seconds.
- Marijuana: 1 painkiller power for 652 seconds.
- Bottled vodkas: 1 painkiller power for 300 seconds.
- Quality vodka: 2 painkiller power for 300 seconds.
- Zone vodka(bottle_metal): 2 painkiller power for 300 seconds.
---
**Credits:**
- bvcx for detailed description mod.
- ilrathCXV for campfire and artefact healing scripts.
- DokBrok for BHS Evolution mod that inspired this one.
- TheParaziT - for base injector animation. Extended them to all injectors.
- Uknown person who ported all the animations from gunslinger
---
# Latest changelog:
## 0.86E Update
- Actor damage balancer update to match gamma 0.91
## 0.86D Update
- Reduced weapon out delay for bandages(Mirror of Enhanced anims - medical)
## 0.86C Update
- Skinning without a knife out is done with a hunting knife, always. Fix for gamma tomahawk.
## 0.86B Update
- Crafting recipes added
## 0.86A Update
- Fomod made to better convey information
## 0.86 Update
- New default BHS hud - thanks to chilichocolate
- Fix for painkiller effect not being recalculated after healing
- Dynamic damage threshold adjustement based on damagescale(no visible effect)
- Small fix for torso surgery display
- Fomod installer. Yes, it has finally happened, folks.
## 0.85A Hotfix
- Fix for leftover variable (gamma users)
## 0.85 Hotfix
- Rewritten all mechanics on healing, splinting and surgery to match the quality of the latest additions.
- Removed some hard to maintain features.
## 0.81B(C) Hotfix
- Fix for missing model crash after removing the mod(nowscript will remove akvatabs and other vanilla changed items too)
- Fix for forgotten sounds
## 0.81 Hotfix
- Included forgotten .ppe file for latest ADB version.
- Updated included FDDA Enhanced Animations mod
## 0.8 Beta:
### Additions and rebalancing:
- **New Experimental BHS mode. Tarkov-like limb system. Vanilla HP only acts as a wellness indicator and cannot be healed with medkits. Only vinca and the usual ways of resting, artefacts,etc. Enables below feature automatically.**
- Above can be buggy when the system prevents a death, as a callback fires but is cancelled by the script. Depends on installed mods. An alternative way can be used if this proves too buggy.
- **Combined with the above change - damage bleedthrugh from destroyed limbs to every other limb. If you take damage in the destroyed limb the damage is split between all the other limbs. Can be turned on/off**
- Limb damage multiplier added to MCM menu.
- Small-ish balancing changes to painkillers that are too much to list.
- Added bone breaking sound effect and feedback to notify the player when their limb(s) reach 0 HP.
- Update/reworked the damage system. Changes should not be noticeable unless you go into code.
- Fall damage multiplier added to mcm. Fall damage should be goddamn scary.
- Explosives are **VERY** scary and do damage to all limbs. You really dont want to experience it.
- Update hit detection to more accurately tell what limb was hit.
- Removed legacy features.
- Grok's Actor Damage Balancer and Progressive Rad Damages compatibility patches.(Gamma requires both)
- Non-medical enhanced animations separated into a sister mod. FDDA enhanced animations.
### Fixes:
- Fixed FDDA anims crash. Mod is fully DLTX now.
- Fixed arm/legs minimal hp settings to correctly apply.
- General bugfixing of everything not touched by changes, which is not much.
## 0.63 Beta:
- Dynamic item spawns,item rewards,new game loadouts DLTX item injection
- Safe deletion utility to safely delete all new items
- Loot injection for new items. Now they can be looted from bodies.
## Hotfix 0.6A:
- Fixed mutant harvest animation
- Added FDDA MCM unlocker for gamma users
## 0.6 Beta:
### Additions and rebalancing:
- Bandages and tourniquets now work instantly instead of over time.
- Vodka's are now painkillers of different power.
- To be able to sprint with broken legs you now need painkiller power 3 and above. Vodkas provide up to 2.
- Psy mechanics for SJ stims. Now they lower your max psy health but increase resistance and regeneration the lower your psy health is. (EXPERIMENTAL)
- A lot more traders sell new items now, and old ones should be fixed, hopefully.
- Compatibility patch for Coffee if the zone to use better anims.
- Damage to limbs increased by 25%. Hopefully losing limbs will be more frequent.
### Fixes:
- Painkillers active time is now tracked a lot better, so level transitions wont extend their duration. Nor saving/loading will extend/decrease it. Deviation will be very small % wise.
- Detailed description compatibility now has fixed encoding for dot symbols
- Default detailed description script fixes(included by default, not compat)
- Artefact healing now wont work if you dont have PBA mod installed. Meaning if you want to use it in base anomaly you need to patch it. I would do that if i had vanilla classnames and values for them - it is not hard at all.
- General bugfixing for main script
- DLTX bugfixing to make sure included mods are not overwritten by standalone versions of same mods.
- Animation files bugfixing to change as little as possible compared to base FDDA + asnen's. Now should be 100% compatible as no old anims are overwritten or deleted.
- Damage threshold lowered back to 3% like default. Now consumable items are tracked and wont deal damage to limbs
- Renamed Enchaned UI compat to "Enhanced GUI". Got confused about names

View File

@ -26,7 +26,7 @@ tm = 10000
speed = 0.8 speed = 0.8
helm = true helm = true
![survival_kit] [survival_kit]
snd = interface\item_usage\bandage_surginst snd = interface\item_usage\bandage_surginst
anm = item_ga_bandage anm = item_ga_bandage
cam = itemuse_anm_effects\bandage.anm cam = itemuse_anm_effects\bandage.anm

View File

@ -3,11 +3,11 @@ function on_mcm_load()
op = { id= "EA_settings" ,sh=true ,gr={ op = { id= "EA_settings" ,sh=true ,gr={
{ id= "friendlyfire" ,type= "slide" ,link= "ui_options_slider_disguise" ,text= "FDDA" ,size= {512,50} ,spacing= 20 }, { id= "friendlyfire" ,type= "slide" ,link= "ui_options_slider_disguise" ,text= "FDDA" ,size= {512,50} ,spacing= 20 },
{id = "enable_animations", type = "check", val = 1, def = true}, {id = "enable_animations", type = "check", val = 1, def = true},
{id = "enable_backpack_addon", type = "check", val = 1, def = false}, --{id = "enable_backpack_addon", type = "check", val = 1, def = false},
{id = "enable_crouch_toggle_backpack_addon", type = "check", val = 1, def = false}, --{id = "enable_crouch_toggle_backpack_addon", type = "check", val = 1, def = false},
{id = "mutant_loot", type = "check", val = 1, def = true}, {id = "mutant_loot", type = "check", val = 1, def = true},
{id = "take_item_anim", type = "check", val = 1, def = false}, --{id = "take_item_anim", type = "check", val = 1, def = false},
{id = "take_dist", type = "track" , val = 2, min = 0 , max = 1.0, def = 0.12, step = 0.01}, --{id = "take_dist", type = "track" , val = 2, min = 0 , max = 1.0, def = 0.12, step = 0.01},
{id = "ea_debug", type = "check", val = 1, def = false}, {id = "ea_debug", type = "check", val = 1, def = false},
} }
} }

View File

@ -0,0 +1,25 @@
[stalker_duty_girl]:sim_default_duty_4
character_profile = stalker_duty_girl
story_id = stalker_duty_girl
immunities_sect = stalker_immunities_duty_girl
[stalker_immunities_duty_girl]
burn_immunity = 0.5
strike_immunity = 0.5
shock_immunity = 0.5
wound_immunity = 0.5
radiation_immunity = 0.6
telepatic_immunity = 0.8
chemical_burn_immunity = 0.5
explosion_immunity = 0.7
fire_wound_immunity = 0.5
[red_duty_outpost_trader]:sim_default_duty_3
character_profile = red_duty_outpost_trader
[red_duty_outpost_medic]:sim_default_duty_3
character_profile = red_duty_outpost_medic
[red_duty_outpost_guide]:sim_default_duty_3
character_profile = red_duty_outpost_guide

View File

@ -0,0 +1,14 @@
#include "duty_girl.ltx"
[trucks_cemetery_bandit_trader]:stalker
$spawn = "respawn\trucks_cemetery_bandit_trader"
character_profile = trucks_cemetery_bandit_trader
community = stalker
story_id = trucks_cemetery_bandit_trader
[trucks_cemetery_bandit_mechanic]:stalker
$spawn = "respawn\trucks_cemetery_bandit_mechanic"
character_profile = trucks_cemetery_bandit_mechanic
community = stalker
story_id = trucks_cemetery_bandit_mechanic

View File

@ -0,0 +1,97 @@
<specific_character id="stalker_duty_girl" team_default="1">
<class>stalker_duty_girl</class>
<name>stalker_duty_girl_name</name>
<icon>ui_npc_duty_girl</icon>
<community>dolg</community>
<snd_config>characters_voice\human\woman\</snd_config>
<visual>actors\mnp_npc_remeik\duty_girl</visual>
<supplies>
[spawn] \n
wpn_groza \n
</supplies>
<map_icon x="1" y="0"> </map_icon>
<bio></bio>
<supplies></supplies>
<rank>10000</rank>
<reputation>1000</reputation>
<money min="1000000" max="1000000" infinitive="1"/>
<start_dialog>hello_dialog</start_dialog>
<actor_dialog>duty_girl_first_meet</actor_dialog>
<actor_dialog>duty_girl_hunting_chimera_init</actor_dialog>
<actor_dialog>duty_girl_hunting_chimera_move</actor_dialog>
<actor_dialog>duty_girl_hunting_chimera_done</actor_dialog>
<actor_dialog>duty_girl_monolith_elite_init</actor_dialog>
<actor_dialog>duty_girl_monolith_elite_join</actor_dialog>
<actor_dialog>duty_girl_monolith_elite_done</actor_dialog>
<actor_dialog>duty_girl_loot_stash_init</actor_dialog>
<actor_dialog>duty_girl_capture_the_brirge_init</actor_dialog>
<actor_dialog>duty_girl_capture_the_brirge_join</actor_dialog>
<actor_dialog>duty_girl_capture_the_brirge_done</actor_dialog>
<actor_dialog>dm_is_actor_companion_dialog</actor_dialog>
<actor_dialog>dm_companion_patrol</actor_dialog>
<actor_dialog>duty_girl_companion_join_dialog</actor_dialog>
<actor_dialog>duty_girl_companion_leave_dialog</actor_dialog>
<actor_dialog>duty_girl_chat</actor_dialog>
<actor_dialog>actor_break_dialog</actor_dialog>
</specific_character>
<specific_character id="red_duty_outpost_trader" team_default = "1">
#include "gameplay\profiles\character_desc_dolg_special.xml"
<name>GENERATE_NAME_senior_sergeant</name>
<icon>ui_inGame2_dutygas_2</icon>
<class>red_duty_outpost_trader</class>
<snd_config>characters_voice\human\dolg_1\</snd_config>
<visual>actors\stalker_dolg\stalker_dolggas2a</visual>
<start_dialog>hello_dialog</start_dialog>
<actor_dialog>dm_init_trader</actor_dialog>
<actor_dialog>dm_broker_dialog</actor_dialog>
<actor_dialog>dm_ordered_task_dialog</actor_dialog>
<actor_dialog>dm_ordered_task_completed_dialog</actor_dialog>
<actor_dialog>dm_important_documents</actor_dialog>
<actor_dialog>buy_route</actor_dialog>
<actor_dialog>red_duty_outpost_trader_concern_hostile</actor_dialog>
<actor_dialog>actor_break_dialog</actor_dialog>
</specific_character>
<specific_character id="red_duty_outpost_medic" team_default = "1">
#include "gameplay\profiles\character_desc_dolg_special.xml"
<name>GENERATE_NAME_senior_sergeant</name>
<icon>ui_npc_small_dolg_2_face_2</icon>
<class>red_duty_outpost_medic</class>
<snd_config>characters_voice\human\dolg_1\</snd_config>
<visual>actors\stalker_dolg\stalker_dolg_2_face_2</visual>
<start_dialog>hello_dialog</start_dialog>
<actor_dialog>dm_init_medic</actor_dialog>
<actor_dialog>dm_medic_general</actor_dialog>
<actor_dialog>dm_ordered_task_dialog</actor_dialog>
<actor_dialog>dm_ordered_task_completed_dialog</actor_dialog>
<actor_dialog>actor_break_dialog</actor_dialog>
</specific_character>
<specific_character id="red_duty_outpost_guide" team_default = "1">
#include "gameplay\profiles\character_desc_dolg_special.xml"
<name>GENERATE_NAME_senior_sergeant</name>
<icon>ui_inGame2_neutral_2_gp5</icon>
<class>red_duty_outpost_guide</class>
<snd_config>characters_voice\human\dolg_1\</snd_config>
<visual>actors\stalker_dolg\stalker_dolg_2a_gp5</visual>
<start_dialog>hello_dialog</start_dialog>
<actor_dialog>actor_break_dialog</actor_dialog>
</specific_character>

View File

@ -0,0 +1,84 @@
<?xml version='1.0' encoding="windows-1251"?>
<xml>
#include "gameplay\character_desc_duty_girl.xml"
#include "gameplay\supplies\character_items.xml"
<!-------------------------- Bandit trader in the Truck Cemetery ------------------------>
<specific_character id="trucks_cemetery_bandit_trader" team_default="1">
<name>GENERATE_NAME_bandit</name>
<icon>ui_inGame2_bandit_4</icon>
<map_icon x="1" y="0"></map_icon>
<bio>No information is available.</bio>
<class>trucks_cemetery_bandit_trader</class>
<community>bandit</community><terrain_sect>stalker_terrain</terrain_sect>
<snd_config>characters_voice\human\bandit_2\</snd_config>
<rank>1700</rank>
<money min="1000000" max="1000000" infinitive="1"/>
<reputation>-500</reputation>
<visual>actors\mnp_npc_remeik\trader_band_klatbiche</visual>
<supplies>
[spawn] \n
wpn_beretta \n
ammo_9x19_pbp = 5 \n
#include "gameplay\supplies\character_items.xml"
#include "gameplay\supplies\character_food.xml"
#include "gameplay\supplies\character_drugs.xml"
</supplies>
#include "gameplay\character_criticals.xml"
<actor_dialog>dm_init_trader</actor_dialog>
<actor_dialog>dm_ordered_task_dialog</actor_dialog>
<actor_dialog>dm_ordered_task_completed_dialog</actor_dialog>
<actor_dialog>buy_route</actor_dialog>
<actor_dialog>dm_bribe</actor_dialog>
<actor_dialog>actor_break_dialog</actor_dialog>
</specific_character>
<!------------------------ Bandit technician in the Truck Cemetery ---------------------->
<specific_character id="trucks_cemetery_bandit_mechanic" team_default="1">
<name>GENERATE_NAME_bandit</name>
<icon>ui_inGame2_bandit_4</icon>
<map_icon x="1" y="0"></map_icon>
<bio>No information is available.</bio>
<class>trucks_cemetery_bandit_mechanic</class>
<community>bandit</community><terrain_sect>stalker_terrain</terrain_sect>
<snd_config>characters_voice\human\bandit_2\</snd_config>
<!--mechanic_mode>1</mechanic_mode-->
<rank>1700</rank>
<money min="1000000" max="1000000" infinitive="1"/>
<reputation>0</reputation>
<visual>actors\mnp_npc_remeik\meschanic_band_klatbiche</visual>
<supplies>
[spawn] \n
wpn_spas12 \n
ammo_12x76_zhekan = 4 \n
#include "gameplay\supplies\character_items.xml"
#include "gameplay\supplies\character_food.xml"
#include "gameplay\supplies\character_drugs.xml"
</supplies>
#include "gameplay\character_criticals.xml"
<start_dialog>trucks_cemetery_bandit_mechanic_start</start_dialog>
<actor_dialog>dm_init_trader</actor_dialog>
<actor_dialog>dm_init_mechanic</actor_dialog>
<actor_dialog>dm_ordered_task_dialog</actor_dialog>
<actor_dialog>dm_ordered_task_completed_dialog</actor_dialog>
<actor_dialog>dm_encrypted_pda</actor_dialog>
<actor_dialog>awr_tech_dialog_drink_1</actor_dialog>
<actor_dialog>dm_tech_repair</actor_dialog>
<actor_dialog>actor_break_dialog</actor_dialog>
</specific_character>
</xml>

View File

@ -0,0 +1,152 @@
<dialog id="duty_girl_companion_join_dialog">
<precondition>dialogs_duty_girl.duty_girl_companion_join_dialog_con</precondition>
<init_func>dialogs_duty_girl.duty_girl_companion_join_dialog</init_func>
</dialog>
<dialog id="duty_girl_companion_leave_dialog">
<precondition>dialogs_duty_girl.duty_girl_companion_leave_dialog_con</precondition>
<init_func>dialogs_duty_girl.duty_girl_companion_leave_dialog</init_func>
</dialog>
<dialog id="duty_girl_actor_ask_companion_dialog">
<precondition>dialogs_duty_girl.duty_girl_actor_ask_companion_dialog_con</precondition>
<init_func>dialogs_duty_girl.duty_girl_actor_ask_companion_dialog</init_func>
</dialog>
<dialog id="duty_girl_first_meet">
<dont_has_info>duty_girl_first_meet</dont_has_info>
<init_func>dialogs_duty_girl.duty_girl_first_meet</init_func>
</dialog>
<dialog id="duty_girl_chat">
<has_info>duty_girl_first_meet</has_info>
<phrase_list>
<phrase id="0">
<text>duty_girl_chat_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>duty_girl_chat_1</text>
<next>10</next>
<next>20</next>
<next>30</next>
<next>40</next>
<next>50</next>
</phrase>
<phrase id="10">
<has_info>duty_girl_hunting_chimera_done</has_info>
<text>duty_girl_chat_hunting_chimera_0</text>
<next>11</next>
</phrase>
<phrase id="11">
<text>duty_girl_chat_hunting_chimera_1</text>
<next>50</next>
</phrase>
<phrase id="20">
<has_info>duty_girl_monolith_elite_done</has_info>
<text>duty_girl_chat_monolith_elite_0</text>
<next>21</next>
</phrase>
<phrase id="21">
<text>duty_girl_chat_monolith_elite_1</text>
<next>50</next>
</phrase>
<phrase id="30">
<has_info>duty_girl_capture_the_brirge_done</has_info>
<text>duty_girl_chat_capture_the_brirge_0</text>
<next>31</next>
</phrase>
<phrase id="31">
<text>duty_girl_chat_capture_the_brirge_1</text>
<next>50</next>
</phrase>
<phrase id="40">
<has_info>duty_girl_capture_the_brirge_done</has_info>
<text>duty_girl_chat_capture_the_brirge_2</text>
<next>41</next>
</phrase>
<phrase id="41">
<text>duty_girl_chat_capture_the_brirge_3</text>
<next>50</next>
</phrase>
<phrase id="50">
<text>duty_girl_chat_2</text>
</phrase>
</phrase_list>
</dialog>
<dialog id="duty_girl_no_more_quest_suggest_companion">
<precondition>dialogs_duty_girl.duty_girl_no_more_quest_suggest_companion_con</precondition>
<init_func>dialogs_duty_girl.duty_girl_no_more_quest_suggest_companion</init_func>
</dialog>
<!----------------------------------------------------------------------------------------------------
Quests
------------------------------------------------------------------------------------------------------>
<dialog id="duty_girl_hunting_chimera_init">
<precondition>dialogs_duty_girl.duty_girl_hunting_chimera_init_con</precondition>
<init_func>dialogs_duty_girl.duty_girl_hunting_chimera_init</init_func>
</dialog>
<dialog id="duty_girl_hunting_chimera_move">
<precondition>dialogs_duty_girl.duty_girl_hunting_chimera_move_con</precondition>
<init_func>dialogs_duty_girl.duty_girl_hunting_chimera_move</init_func>
</dialog>
<dialog id="duty_girl_hunting_chimera_done">
<precondition>dialogs_duty_girl.duty_girl_hunting_chimera_done_con</precondition>
<init_func>dialogs_duty_girl.duty_girl_hunting_chimera_done</init_func>
</dialog>
<dialog id="duty_girl_monolith_elite_init">
<precondition>dialogs_duty_girl.duty_girl_monolith_elite_init_con</precondition>
<init_func>dialogs_duty_girl.duty_girl_monolith_elite_init</init_func>
</dialog>
<dialog id="duty_girl_monolith_elite_join">
<precondition>dialogs_duty_girl.duty_girl_monolith_elite_join_con</precondition>
<phrase_list>
<phrase id="0">
<script_text>dialogs_duty_girl.get_phrase_monolith_elite_join_0</script_text>
<next>1</next>
</phrase>
<phrase id="1">
<script_text>dialogs_duty_girl.get_phrase_monolith_elite_join_1</script_text>
<action>dialogs_duty_girl.action_monolith_elite_join</action>
</phrase>
</phrase_list>
</dialog>
<dialog id="duty_girl_monolith_elite_done">
<precondition>dialogs_duty_girl.duty_girl_monolith_elite_done_con</precondition>
<init_func>dialogs_duty_girl.duty_girl_monolith_elite_done</init_func>
</dialog>
<dialog id="duty_girl_loot_stash_init">
<precondition>dialogs_duty_girl.duty_girl_loot_stash_init_con</precondition>
<init_func>dialogs_duty_girl.duty_girl_loot_stash_init</init_func>
</dialog>
<dialog id="duty_girl_capture_the_brirge_init">
<precondition>dialogs_duty_girl.duty_girl_capture_the_brirge_init_con</precondition>
<init_func>dialogs_duty_girl.duty_girl_capture_the_brirge_init</init_func>
</dialog>
<dialog id="duty_girl_capture_the_brirge_join">
<precondition>dialogs_duty_girl.duty_girl_capture_the_brirge_join_con</precondition>
<phrase_list>
<phrase id="0">
<script_text>dialogs_duty_girl.get_phrase_capture_the_brirge_join_0</script_text>
<next>1</next>
</phrase>
<phrase id="1">
<script_text>dialogs_duty_girl.get_phrase_capture_the_brirge_join_1</script_text>
<action>dialogs_duty_girl.action_capture_the_brirge_join</action>
</phrase>
</phrase_list>
</dialog>
<dialog id="duty_girl_capture_the_brirge_done">
<precondition>dialogs_duty_girl.duty_girl_capture_the_brirge_done_con</precondition>
<init_func>dialogs_duty_girl.duty_girl_capture_the_brirge_done</init_func>
</dialog>

View File

@ -0,0 +1,42 @@
<dialog id="red_duty_outpost_trader_concern_hostile">
<init_func>dialogs_duty_girl.red_duty_outpost_trader_concern_hostile</init_func>
</dialog>
<dialog id="meet_guid_duty_outpost">
<init_func>dialogs_duty_girl.meet_guid_duty_outpost</init_func>
</dialog>
<dialog id="travel_guid_duty_outpost">
<init_func>dialogs_duty_girl.travel_guid_duty_outpost</init_func>
</dialog>
<dialog id="travel_guid_duty_outpost_from_others_1000">
<has_info>red_bridge_outpost</has_info>
<init_func>dialogs_duty_girl.travel_guid_duty_outpost_from_others_1000</init_func>
</dialog>
<dialog id="travel_guid_duty_outpost_from_others_2000">
<has_info>red_bridge_outpost</has_info>
<init_func>dialogs_duty_girl.travel_guid_duty_outpost_from_others_2000</init_func>
</dialog>
<dialog id="travel_guid_duty_outpost_from_others_3000">
<has_info>red_bridge_outpost</has_info>
<init_func>dialogs_duty_girl.travel_guid_duty_outpost_from_others_3000</init_func>
</dialog>
<dialog id="travel_guid_duty_outpost_from_others_4000">
<has_info>red_bridge_outpost</has_info>
<init_func>dialogs_duty_girl.travel_guid_duty_outpost_from_others_4000</init_func>
</dialog>
<dialog id="travel_guid_duty_outpost_from_others_5000">
<has_info>red_bridge_outpost</has_info>
<init_func>dialogs_duty_girl.travel_guid_duty_outpost_from_others_5000</init_func>
</dialog>
<dialog id="travel_guid_duty_outpost_from_others_6000">
<has_info>red_bridge_outpost</has_info>
<init_func>dialogs_duty_girl.travel_guid_duty_outpost_from_others_6000</init_func>
</dialog>

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="windows-1251" ?>
<game_dialogs>
#include "gameplay\dialogs_duty_girl.xml"
#include "gameplay\dialogs_duty_outpost.xml"
<dialog id="my_dialog">
<phrase_list>
<phrase id="0"> <!-- NPC -->
<text>npc_phrase</text>
<next>1</next>
</phrase>
<phrase id="1"> <!-- Actor -->
<text>actor_phrase</text>
<action>dialogs.break_dialog</action>
</phrase>
</phrase_list>
</dialog>
<!-- (Bandit Mechanic) -->
<dialog id="trucks_cemetery_bandit_mechanic_start">
<phrase_list>
<phrase id="0">
<text>trucks_cemetery_bandit_mechanic_start_0</text>
</phrase>
</phrase_list>
</dialog>
</game_dialogs>

View File

@ -0,0 +1,20 @@
<character id="stalker_duty_girl">
<class>stalker_duty_girl</class>
<specific_character>stalker_duty_girl</specific_character>
</character>
<character id="red_duty_outpost_trader">
<class>red_duty_outpost_trader</class>
<specific_character>red_duty_outpost_trader</specific_character>
</character>
<character id="red_duty_outpost_medic">
<class>red_duty_outpost_medic</class>
<specific_character>red_duty_outpost_medic</specific_character>
</character>
<character id="red_duty_outpost_guide">
<class>red_duty_outpost_guide</class>
<specific_character>red_duty_outpost_guide</specific_character>
</character>

View File

@ -0,0 +1,363 @@
<?xml version='1.0' encoding="UTF-8"?>
<xml>
#include "gameplay\npc_profile_duty_girl.xml"
<character id="mil_freedom_barman_mlr">
<class>mil_freedom_barman_mlr</class>
<specific_character>mil_freedom_barman_mlr</specific_character>
</character>
<character id="dasc_tech_mlr">
<class>dasc_tech_mlr</class>
<specific_character>dasc_tech_mlr</specific_character>
</character>
<character id="devushka">
<class>devushka</class>
<specific_character>devushka</specific_character>
</character>
<character id="dasc_trade_mlr">
<class>dasc_trade_mlr</class>
<specific_character>dasc_trade_mlr</specific_character>
</character>
<character id="bodyguard_duty_medic_bar_general">
<class>bodyguard_duty_medic_bar_general</class>
<specific_character>bodyguard_duty_medic_bar_general</specific_character>
</character>
<character id="ds_killer_guide_main_base">
<class>ds_killer_guide_main_base</class>
<specific_character>ds_killer_guide_main_base</specific_character>
</character>
<character id="zaton_killer_guide_station">
<class>zaton_killer_guide_station</class>
<specific_character>zaton_killer_guide_station</specific_character>
</character>
<character id="ds_killer_medic_mlr">
<class>ds_killer_medic_mlr</class>
<specific_character>ds_killer_medic_mlr</specific_character>
</character>
<character id="mil_freedom_medic">
<class>mil_freedom_medic</class>
<specific_character>mil_freedom_medic</specific_character>
</character>
<character id="zat_tech_mlr">
<class>zat_tech_mlr</class>
<specific_character>zat_tech_mlr</specific_character>
</character>
<character id="bar_informator_mlr">
<class>bar_informator_mlr</class>
<specific_character>bar_informator_mlr</specific_character>
</character>
<character id="bandit_main_base_medic_mlr">
<class>bandit_main_base_medic_mlr</class>
<specific_character>bandit_main_base_medic_mlr</specific_character>
</character>
<character id="agr_1_6_medic_army_mlr">
<class>agr_1_6_medic_army_mlr</class>
<specific_character>agr_1_6_medic_army_mlr</specific_character>
</character>
<character id="agr_1_6_barman_army_mlr">
<class>agr_1_6_barman_army_mlr</class>
<specific_character>agr_1_6_barman_army_mlr</specific_character>
</character>
<character id="merc_pri_a18_mech_mlr">
<class>merc_pri_a18_mech_mlr</class>
<specific_character>merc_pri_a18_mech_mlr</specific_character>
</character>
<character id="merc_pri_grifon_mlr">
<class>merc_pri_grifon_mlr</class>
<specific_character>merc_pri_grifon_mlr</specific_character>
</character>
<character id="pri_a16_mech_mlr">
<class>pri_a16_mech_mlr</class>
<specific_character>pri_a16_mech_mlr</specific_character>
</character>
<character id="zat_stancia_trader_merc">
<class>zat_stancia_trader_merc</class>
<specific_character>zat_stancia_trader_merc</specific_character>
</character>
<character id="zat_stancia_mech_merc">
<class>zat_stancia_mech_merc</class>
<specific_character>zat_stancia_mech_merc</specific_character>
</character>
<character id="jup_cont_trader_bandit">
<class>jup_cont_trader_bandit</class>
<specific_character>jup_cont_trader_bandit</specific_character>
</character>
<character id="jup_cont_mech_bandit">
<class>jup_cont_mech_bandit</class>
<specific_character>jup_cont_mech_bandit</specific_character>
</character>
<character id="army_south_mechan_mlr">
<class>army_south_mechan_mlr</class>
<specific_character>army_south_mechan_mlr</specific_character>
</character>
<character id="monolith_bridge_trader_mlr">
<class>monolith_bridge_trader_mlr</class>
<specific_character>monolith_bridge_trader_mlr</specific_character>
</character>
<character id="pri_special_trader_mlr">
<class>pri_special_trader_mlr</class>
<specific_character>pri_special_trader_mlr</specific_character>
</character>
<character id="mil_freedom_guid">
<class>mil_freedom_guid</class>
<specific_character>mil_freedom_guid</specific_character>
</character>
<character id="esc_3_16_military_trader">
<class>esc_3_16_military_trader</class>
<specific_character>esc_3_16_military_trader</specific_character>
</character>
<character id="guid_marsh_mlr">
<class>guid_marsh_mlr</class>
<specific_character>guid_marsh_mlr</specific_character>
</character>
<character id="guid_dv_mal_mlr">
<class>guid_dv_mal_mlr</class>
<specific_character>guid_dv_mal_mlr</specific_character>
</character>
<character id="guid_pri_a15_mlr">
<class>guid_pri_a15_mlr</class>
<specific_character>guid_pri_a15_mlr</specific_character>
</character>
<character id="trader_pri_a15_mlr">
<class>trader_pri_a15_mlr</class>
<specific_character>trader_pri_a15_mlr</specific_character>
</character>
<character id="guid_zan_stalker_locman">
<class>guid_zan_stalker_locman</class>
<specific_character>guid_zan_stalker_locman</specific_character>
</character>
<character id="guid_jup_stalker_garik">
<class>guid_jup_stalker_garik</class>
<specific_character>guid_jup_stalker_garik</specific_character>
</character>
<character id="guid_bar_stalker_navigator">
<class>guid_bar_stalker_navigator</class>
<specific_character>guid_bar_stalker_navigator</specific_character>
</character>
<character id="hunter_gar_trader">
<class>hunter_gar_trader</class>
<specific_character>hunter_gar_trader</specific_character>
</character>
<character id="cit_killers_merc_barman_mlr">
<class>cit_killers_merc_barman_mlr</class>
<specific_character>cit_killers_merc_barman_mlr</specific_character>
</character>
<character id="baraholka_trader_night">
<class>baraholka_trader_night</class>
<specific_character>baraholka_trader_night</specific_character>
</character>
<character id="baraholka_trader">
<class>baraholka_trader</class>
<specific_character>baraholka_trader</specific_character>
</character>
<character id="trucks_cemetery_bandit_trader">
<class>trucks_cemetery_bandit_trader</class>
<specific_character>trucks_cemetery_bandit_trader</specific_character>
</character>
<character id="trucks_cemetery_bandit_mechanic">
<class>trucks_cemetery_bandit_mechanic</class>
<specific_character>trucks_cemetery_bandit_mechanic</specific_character>
</character>
<character id="yan_povar_army_mlr">
<class>yan_povar_army_mlr</class>
<specific_character>yan_povar_army_mlr</specific_character>
</character>
<character id="mechanic_army_yan_mlr">
<class>mechanic_army_yan_mlr</class>
<specific_character>mechanic_army_yan_mlr</specific_character>
</character>
<character id="esc_main_base_trader_mlr">
<class>esc_main_base_trader_mlr</class>
<specific_character>esc_main_base_trader_mlr</specific_character>
</character>
<character id="trader_monolith_jup_depo">
<class>trader_monolith_jup_depo</class>
<specific_character>trader_monolith_jup_depo</specific_character>
</character>
<character id="mechanic_monolith_jup_depo">
<class>mechanic_monolith_jup_depo</class>
<specific_character>mechanic_monolith_jup_depo</specific_character>
</character>
<character id="trader_monolith_kbo">
<class>trader_monolith_kbo</class>
<specific_character>trader_monolith_kbo</specific_character>
</character>
<character id="mechanic_monolith_kbo">
<class>mechanic_monolith_kbo</class>
<specific_character>mechanic_monolith_kbo</specific_character>
</character>
<character id="lider_monolith_haron">
<class>lider_monolith_haron</class>
<specific_character>lider_monolith_haron</specific_character>
</character>
<character id="bar_dolg_medic">
<class>bar_dolg_medic</class>
<specific_character>bar_dolg_medic</specific_character>
</character>
<character id="agr_u_bandit_boss">
<class>agr_u_bandit_boss</class>
<specific_character>agr_u_bandit_boss</specific_character>
</character>
<character id="red_greh_trader">
<class>red_greh_trader</class>
<specific_character>red_greh_trader</specific_character>
</character>
<character id="red_greh_tech">
<class>red_greh_tech</class>
<specific_character>red_greh_tech</specific_character>
</character>
<!-- Common -->
<character id="total_duty_one_h">
<class>total_duty_one_h</class>
<specific_character>total_duty_one_h</specific_character>
</character>
<character id="total_freeman_one_h">
<class>total_freeman_one_h</class>
<specific_character>total_freeman_one_h</specific_character>
</character>
<character id="total_stalker_left_one">
<class>total_stalker_left_one</class>
<specific_character>total_stalker_left_one</specific_character>
</character>
<character id="total_stalker_right_one">
<class>total_stalker_right_one</class>
<specific_character>total_stalker_right_one</specific_character>
</character>
<character id="total_group_stalkers_1">
<class>total_group_stalkers_1</class>
<specific_character>total_group_stalkers_1</specific_character>
</character>
<character id="total_group_stalkers_2">
<class>total_group_stalkers_2</class>
<specific_character>total_group_stalkers_2</specific_character>
</character>
<character id="total_group_stalkers_3">
<class>total_group_stalkers_3</class>
<specific_character>total_group_stalkers_3</specific_character>
</character>
<character id="total_group_stalkers_4">
<class>total_group_stalkers_4</class>
<specific_character>total_group_stalkers_4</specific_character>
</character>
<character id="total_group_bandits_1">
<class>total_group_bandits_1</class>
<specific_character>total_group_bandits_1</specific_character>
</character>
<character id="total_group_bandits_2">
<class>total_group_bandits_2</class>
<specific_character>total_group_bandits_2</specific_character>
</character>
<character id="total_group_bandits_3">
<class>total_group_bandits_3</class>
<specific_character>total_group_bandits_3</specific_character>
</character>
<character id="total_group_bandits_4">
<class>total_group_bandits_4</class>
<specific_character>total_group_bandits_4</specific_character>
</character>
<character id="total_stalker_one_n">
<class>total_stalker_one_n</class>
<specific_character>total_stalker_one_n</specific_character>
</character>
<character id="total_soldier_one_n">
<class>total_soldier_one_n</class>
<specific_character>total_soldier_one_n</specific_character>
</character>
<character id="total_stalker_one_with_mutant">
<class>total_stalker_one_with_mutant</class>
<specific_character>total_stalker_one_with_mutant</specific_character>
</character>
<character id="total_duty_one_with_zombies">
<class>total_duty_one_with_zombies</class>
<specific_character>total_duty_one_with_zombies</specific_character>
</character>
<character id="total_group_bandits_with_bloodsucker_1">
<class>total_group_bandits_with_bloodsucker_1</class>
<specific_character>total_group_bandits_with_bloodsucker_1</specific_character>
</character>
<character id="total_group_bandits_with_bloodsucker_2">
<class>total_group_bandits_with_bloodsucker_2</class>
<specific_character>total_group_bandits_with_bloodsucker_2</specific_character>
</character>
<character id="total_two_soldiers_with_burer_1">
<class>total_two_soldiers_with_burer_1</class>
<specific_character>total_two_soldiers_with_burer_1</specific_character>
</character>
<character id="total_two_soldiers_with_burer_2">
<class>total_two_soldiers_with_burer_2</class>
<specific_character>total_two_soldiers_with_burer_2</specific_character>
</character>
</xml>

View File

@ -0,0 +1,99 @@
[duty_outpost_physic_object]
GroupControlSection = spawn_group
$spawn = "physics\destroyable_object"
class = O_DSTR_S
remove_time = 60
script_binding = bind_physic_object.init
[duty_outpost_box_1a]:duty_outpost_physic_object
visual = dynamics\box\box_1a.ogf
fixed_bones = link
[duty_outpost_box_1b]:duty_outpost_physic_object
visual = dynamics\box\box_1b.ogf
fixed_bones = link
[duty_outpost_box_1c]:duty_outpost_physic_object
visual = dynamics\box\box_1c.ogf
fixed_bones = link
[duty_outpost_child_bench]:duty_outpost_physic_object
visual = dynamics\stul\child_bench.ogf
fixed_bones = link
[duty_outpost_taburet_wood_01]:duty_outpost_physic_object
visual = dynamics\stul\taburet_wood_01.ogf
fixed_bones = link
[duty_outpost_konteyner_03b]:duty_outpost_physic_object
visual = dynamics\box\konteyner_03b.ogf
fixed_bones = link
[duty_outpost_sleepbag]:duty_outpost_physic_object
visual = dynamics\equipments\mattress02.ogf
fixed_bones = bone02_(1)
[duty_outpost_transiver]:duty_outpost_physic_object
visual = dynamics\el_tehnika\transiver.ogf
fixed_bones = link
[duty_outpost_rupor]:duty_outpost_physic_object
visual = dynamics\el_tehnika\rupor.ogf
fixed_bones = link
custom_data = scripts\red_forest\red_bridge_outpost_rupor.ltx
[duty_outpost_priemnik_gorizont]:duty_outpost_physic_object
visual = dynamics\el_tehnika\priemnik_gorizont.ogf
fixed_bones = link
custom_data = scripts\red_forest\red_bridge_outpost_radio.ltx
[duty_outpost_light_sharnir]:duty_outpost_physic_object
visual = dynamics\light\light_sharnir_1.ogf
fixed_bones = link,sharnir,provod
custom_data = scripts\red_forest\light_white_12m_glass.ltx
[duty_outpost_med_stolik_01]:duty_outpost_physic_object
visual = dynamics\medical_object\med_stolik_01.ogf
fixed_bones = link,wheel_left_1,wheel_left_2,wheel_right_1,wheel_right_2
[duty_outpost_item_aptechka]:duty_outpost_physic_object
visual = dynamics\equipments\medical\item_aptechka.ogf
fixed_bones = link
[duty_outpost_drug_psyhodelin]:duty_outpost_physic_object
visual = dynamics\equipments\medical\drug_psyhodelin.ogf
fixed_bones = bone01
[duty_outpost_drug_stim1]:duty_outpost_physic_object
visual = dynamics\equipments\medical\stim1.ogf
fixed_bones = bone01
[duty_outpost_drug_stim2]:duty_outpost_physic_object
visual = dynamics\equipments\medical\stim2.ogf
fixed_bones = bone01
[duty_outpost_toolkit_nato]:duty_outpost_physic_object
visual = dynamics\repair\toolkit_nato.ogf
fixed_bones = bone01
[duty_outpost_toolkit_p]:duty_outpost_physic_object
visual = dynamics\repair\toolkit_p.ogf
fixed_bones = bone01
[duty_outpost_toolkit_s]:duty_outpost_physic_object
visual = dynamics\repair\toolkit_s.ogf
fixed_bones = bone01
[duty_outpost_toolkit_wp]:duty_outpost_physic_object
visual = dynamics\repair\toolkit_wp.ogf
fixed_bones = bone01

View File

@ -0,0 +1,43 @@
[dynamic_object_configs]
smart = red_smart_terrain_bridge
condlist_0 = {+red_bridge_outpost} true
[exclusive]
light_tower_1 = duty_outpost_light_sharnir | -114.50,3.50,-257.00 | 0,180,90 | condlist_0
light_tower_2 = duty_outpost_light_sharnir | -114.50,7.75,-257.00 | 0,180,90 | condlist_0
light_tunnel_1 = duty_outpost_light_sharnir | -121.70,2.50,-229.00 | 0,0,90 | condlist_0
light_tunnel_2 = duty_outpost_light_sharnir | -103.00,2.50,-204.62 | 0,90,90 | condlist_0
light_tunnel_3 = duty_outpost_light_sharnir | -105.22,2.50,-186.00 | 0,0,90 | condlist_0
tunnel_1 = duty_outpost_child_bench | -101.50,-0.81,-200.90 | 0,90,0 | condlist_0
tunnel_2 = duty_outpost_taburet_wood_01 | -104.30,-0.81,-183.40 | 0,0,0 | condlist_0
tunnel_3 = duty_outpost_sleepbag | -102.90,-0.81,-182.70 | 0,-90,0 | condlist_0
tunnel_4 = duty_outpost_sleepbag | -101.50,-0.81,-182.70 | 0,-90,0 | condlist_0
tunnel_5 = duty_outpost_sleepbag | -100.10,-0.81,-182.70 | 0,-90,0 | condlist_0
medic_1 = duty_outpost_med_stolik_01 | -104.30,-0.81,-182.70 | 0,90,0 | condlist_0
medic_2 = duty_outpost_item_aptechka | -104.50,0.16,-182.50 | 0,-90,0 | condlist_0
medic_3 = duty_outpost_drug_psyhodelin | -104.10,0.16,-182.50 | 0,180,0 | condlist_0
medic_4 = duty_outpost_drug_stim1 | -104.50,0.16,-182.80 | 0,0,0 | condlist_0
medic_5 = duty_outpost_drug_stim2 | -104.30,0.16,-182.80 | 0,0,0 | condlist_0
medic_6 = duty_outpost_drug_stim2 | -104.10,0.16,-182.80 | 0,0,0 | condlist_0
radio = duty_outpost_priemnik_gorizont | -101.50,-0.81,-202.30 | 0,45,0 | condlist_0
tower_1 = duty_outpost_box_1b | -115.20,0.47,-255.00 | 0,10,0 | condlist_0
tower_2 = duty_outpost_box_1b | -115.20,0.71,-255.00 | 0,10,0 | condlist_0
tower_3 = duty_outpost_box_1b | -116.50,0.47,-254.50 | 0,90,0 | condlist_0
tower_4 = duty_outpost_box_1b | -116.50,0.71,-254.50 | 0,90,0 | condlist_0
tower_5 = duty_outpost_box_1b | -116.50,0.95,-254.50 | 0,90,0 | condlist_0
tower_6 = duty_outpost_box_1b | -117.50,0.47,-254.50 | 0,90,0 | condlist_0
tower_7 = duty_outpost_box_1c | -117.50,0.71,-254.50 | 0,90,0 | condlist_0
tower_8 = duty_outpost_box_1c | -117.50,0.95,-254.50 | 0,90,0 | condlist_0
tower_9 = duty_outpost_transiver | -115.25,1.38,-254.50 | 0,-90,0 | condlist_0
tower_10 = duty_outpost_rupor | -114.50,7.50,-253.63 | 0,90,0 | condlist_0
trader_1 = duty_outpost_toolkit_nato | -114.90,1.29,-256.25 | 0,90,0 | condlist_0
trader_2 = duty_outpost_toolkit_nato | -114.90,1.29,-256.70 | 0,90,0 | condlist_0
trader_3 = duty_outpost_toolkit_p | -114.90,1.02,-256.25 | 0,90,0 | condlist_0
trader_4 = duty_outpost_toolkit_s | -114.90,1.02,-256.70 | 0,90,0 | condlist_0

View File

@ -0,0 +1,7 @@
![ignore_list]
squad_red_duty_outpost_trader
squad_red_duty_outpost_medic
squad_red_duty_outpost_guide
squad_red_duty_outpost_guard_1
squad_red_duty_outpost_guard_2

View File

@ -0,0 +1,21 @@
[fight]
type = npc
actor_stereo = false
npc_prefix = true
path = fight\attack\attack_
avail_communities = bandit, csky, dolg, freedom, army, stalker, monolith, killer, army_npc, isg, renegade
shuffle = rnd
idle = 3,5,100
is_combat_sound = true
[fight_enemy]
type = npc
actor_stereo = false
npc_prefix = true
path = fight\enemy\enemy_
avail_communities = bandit, csky, dolg, freedom, army, stalker, monolith, killer, army_npc, isg, renegade
shuffle = rnd
idle = 3,5,100
is_combat_sound = true

View File

@ -0,0 +1,14 @@
[red_bridge_outpost_radio]
type = 3d
path = radio\_channel_1\track_
shuffle = rnd
idle = 5,15,100
levels = l10_red_forest
[red_bridge_outpost_bar_dolg_speech]
type = 3d
path = characters_voice\scenario\bar\mega_
shuffle = rnd
idle = 5,15,100
levels = l10_red_forest

View File

@ -0,0 +1,52 @@
[squad_duty_girl]:online_offline_group
npc = stalker_duty_girl
faction = dolg
story_id = squad_duty_girl
logic = scripts\squad_duty_girl.ltx
;----------------------------------------------------------------------------------------------------
; Quests
;----------------------------------------------------------------------------------------------------
[squad_duty_girl_hunting_chimera]:online_offline_group
npc = chimera_strong4
faction = monster
story_id = squad_duty_girl_hunting_chimera
logic = scripts\task_duty_girl\squad_duty_girl_hunting_chimera.ltx
[squad_duty_girl_monolith_elite_mono]:online_offline_group
npc_random = sim_default_monolith_4,sim_default_monolith_3
npc_in_squad = 9
faction = monolith
story_id = squad_duty_girl_monolith_elite_mono
logic = scripts\task_duty_girl\squad_duty_girl_monolith_elite.ltx
[squad_duty_girl_monolith_elite_duty]:online_offline_group
npc_random = sim_default_duty_3
npc_in_squad = 8
faction = dolg
story_id = squad_duty_girl_monolith_elite_duty
logic = scripts\task_duty_girl\squad_duty_girl_monolith_elite.ltx
[squad_duty_girl_capture_the_brirge_mono_1]:online_offline_group
npc_random = sim_default_monolith_4,sim_default_monolith_3,sim_default_monolith_3,sim_default_monolith_2
npc_in_squad = 10
faction = monolith
story_id = squad_duty_girl_capture_the_brirge_mono_1
logic = scripts\task_duty_girl\squad_duty_girl_capture_the_brirge.ltx
[squad_duty_girl_capture_the_brirge_mono_2]:squad_duty_girl_capture_the_brirge_mono_1
story_id = squad_duty_girl_capture_the_brirge_mono_2
[squad_duty_girl_capture_the_brirge_duty]:online_offline_group
npc_random = sim_default_duty_3
npc_in_squad = 6
faction = dolg
story_id = squad_duty_girl_capture_the_brirge_duty
logic = scripts\task_duty_girl\squad_duty_girl_capture_the_brirge.ltx
[squad_duty_girl_capture_the_brirge_lone]:online_offline_group
npc_random = sim_default_stalker_3
npc_in_squad = 3
faction = stalker
story_id = squad_duty_girl_capture_the_brirge_lone
logic = scripts\task_duty_girl\squad_duty_girl_capture_the_brirge.ltx

View File

@ -0,0 +1,57 @@
[squad_red_duty_outpost_trader]:online_offline_group
npc = red_duty_outpost_trader
faction = dolg
story_id = squad_red_duty_outpost_trader
logic = scripts\red_forest\squad_red_duty_outpost.ltx
[squad_red_duty_outpost_medic]:online_offline_group
npc = red_duty_outpost_medic
faction = dolg
story_id = squad_red_duty_outpost_medic
logic = scripts\red_forest\squad_red_duty_outpost.ltx
[squad_red_duty_outpost_guide]:online_offline_group
npc = red_duty_outpost_guide
faction = dolg
story_id = squad_red_duty_outpost_guide
logic = scripts\red_forest\squad_red_duty_outpost.ltx
[squad_red_duty_outpost_guard_1]:online_offline_group
npc_random = sim_default_duty_4,sim_default_duty_3,sim_default_duty_3,sim_default_duty_2,sim_default_duty_2,sim_default_duty_1,sim_default_duty_1
npc_in_squad = 7
faction = dolg
story_id = squad_red_duty_outpost_guard_1
target_smart = red_smart_terrain_bridge
[squad_red_duty_outpost_guard_2]:squad_red_duty_outpost_guard_1
story_id = squad_red_duty_outpost_guard_2
[squad_red_duty_outpost_visitor_1]:online_offline_group
npc_random = sim_default_stalker_4,sim_default_stalker_3,sim_default_stalker_2,sim_default_stalker_1
npc_in_squad = 3
faction = stalker
story_id = squad_red_duty_outpost_visitor_1
target_smart = red_smart_terrain_bridge
[squad_red_duty_outpost_visitor_2]:online_offline_group
npc_random = sim_default_stalker_4,sim_default_stalker_3,sim_default_stalker_2,sim_default_stalker_1
npc_in_squad = 3
faction = stalker
story_id = squad_red_duty_outpost_visitor_2
target_smart = red_smart_terrain_bridge
[squad_red_duty_outpost_visitor_3]:online_offline_group
npc_random = sim_default_duty_4,sim_default_duty_3,sim_default_duty_2,sim_default_duty_1
npc_in_squad = 3
faction = dolg
story_id = squad_red_duty_outpost_visitor_3
target_smart = red_smart_terrain_bridge
[squad_red_duty_outpost_visitor_4]:online_offline_group
npc_random = sim_default_csky_4,sim_default_csky_3,sim_default_csky_2,sim_default_csky_1
npc_in_squad = 3
faction = csky
story_id = squad_red_duty_outpost_visitor_4
target_smart = red_smart_terrain_bridge

View File

@ -0,0 +1,67 @@
[squad_lure_prey_controller_1]:online_offline_group
npc = m_controller_normal
faction = monster
story_id = squad_lure_prey_controller_1
logic = scripts\misc_encounter\squad_lure_prey.ltx
[squad_lure_prey_controller_2]:online_offline_group
npc = m_controller_normal
faction = monster
story_id = squad_lure_prey_controller_2
logic = scripts\misc_encounter\squad_lure_prey.ltx
[squad_lure_prey_phantom]:online_offline_group
npc = sim_default_stalker_2
faction = stalker
story_id = squad_lure_prey_phantom
logic = scripts\misc_encounter\squad_lure_prey.ltx
[squad_bloodsucker_val_1]:online_offline_group
npc = bloodsucker_weak,bloodsucker_weak,bloodsucker_weak,bloodsucker_weak,bloodsucker_normal,bloodsucker_normal
faction = monster
story_id = squad_bloodsucker_val_1
logic = scripts\misc_encounter\squad_bloodsucker_val.ltx
on_death = %=script(gameplay_misc_encounter:bloodsucker_val_dead)%
[squad_bloodsucker_val_2]:online_offline_group
npc = bloodsucker_weak,bloodsucker_weak,bloodsucker_weak,bloodsucker_normal,bloodsucker_normal,bloodsucker_normal
faction = monster
story_id = squad_bloodsucker_val_2
logic = scripts\misc_encounter\squad_bloodsucker_val.ltx
on_death = %=script(gameplay_misc_encounter:bloodsucker_val_dead)%
[squad_bloodsucker_val_3]:online_offline_group
npc = bloodsucker_normal,bloodsucker_normal,bloodsucker_normal,bloodsucker_strong,bloodsucker_strong,bloodsucker_strong
faction = monster
story_id = squad_bloodsucker_val_3
logic = scripts\misc_encounter\squad_bloodsucker_val.ltx
on_death = %=script(gameplay_misc_encounter:bloodsucker_val_dead)%
[squad_sleeping_bloodsucker_jup_1]:online_offline_group
npc_random = bloodsucker_weak,bloodsucker_weak,bloodsucker_weak,bloodsucker_normal,bloodsucker_normal,bloodsucker_normal
npc_in_squad = 6
faction = monster
story_id = squad_sleeping_bloodsucker_jup_1
logic = scripts\misc_encounter\squad_sleeping_snork.ltx
[squad_sleeping_bloodsucker_jup_2]:online_offline_group
npc_random = bloodsucker_normal,bloodsucker_normal,bloodsucker_normal,bloodsucker_strong,bloodsucker_strong,bloodsucker_strong
npc_in_squad = 6
faction = monster
story_id = squad_sleeping_bloodsucker_jup_2
logic = scripts\misc_encounter\squad_sleeping_snork.ltx
[squad_sleeping_bloodsucker_jup_3]:online_offline_group
npc_random = bloodsucker_normal,bloodsucker_normal,bloodsucker_normal,bloodsucker_strong,bloodsucker_strong,bloodsucker_strong
npc_in_squad = 6
faction = monster
story_id = squad_sleeping_bloodsucker_jup_3
logic = scripts\misc_encounter\squad_sleeping_snork.ltx
[squad_sleeping_gigant]:online_offline_group
npc_random = gigant_normal
npc_in_squad = 4
faction = monster
story_id = squad_sleeping_gigant
logic = scripts\misc_encounter\squad_sleeping_gigant.ltx

View File

@ -0,0 +1,30 @@
[duty_girl_base]
icon = ui_inGame2_Mesta_evakuatsii
storyline = true
prior = 1000
status_functor = duty_girl_task_status
target_functor = duty_girl_task_target
title_functor = duty_girl_task_target
descr_functor = duty_girl_task_target
[duty_girl_hunting_chimera]:duty_girl_base
on_init = %+duty_girl_hunting_chimera_init%
on_complete = %+duty_girl_hunting_chimera_done%
on_fail = %+duty_girl_hunting_chimera_fail%
[duty_girl_monolith_elite]:duty_girl_base
on_init = %+duty_girl_monolith_elite_init%
on_complete = %+duty_girl_monolith_elite_done%
on_fail = %+duty_girl_monolith_elite_fail%
[duty_girl_loot_stash]:duty_girl_base
on_init = %+duty_girl_loot_stash_init%
on_complete = %+duty_girl_loot_stash_done%
on_fail = %+duty_girl_loot_stash_fail%
[duty_girl_capture_the_brirge]:duty_girl_base
on_init = %+duty_girl_capture_the_brirge_init%
on_complete = %+duty_girl_capture_the_brirge_done%
on_fail = %+duty_girl_capture_the_brirge_fail%

View File

@ -0,0 +1,76 @@
[red_duty_outpost_trader_task_1]
icon = ui_iconsTotal_mutant
storyline = false
prior = 35
repeat_timeout = 21600
stage_complete = 1
title = red_duty_outpost_trader_task_1_name
descr = red_duty_outpost_trader_task_1_text
job_descr = red_duty_outpost_trader_task_1_about
task_complete_descr = red_duty_outpost_trader_task_1_finish
on_job_descr = %=setup_assault_task(red_duty_outpost_trader_task_1)%
precondition = {=validate_assault_task(red_duty_outpost_trader_task_1:2:1:nil:false:true:nil)} true, false
target_functor = assault_task_target_functor
status_functor = assault_task_status_functor
status_functor_params = monster, monster_predatory_day, monster_predatory_night, monster_vegetarian, monster_zombied_day, monster_zombied_night, monster_special
condlist_0 = {!task_giver_alive(red_duty_outpost_trader_task_1)} fail
on_complete = %=reward_random_money(4500:6000) =complete_task_inc_goodwill(50:dolg) =inc_task_stage(red_duty_outpost_trader_task_1)%
on_fail = %=fail_task_dec_goodwill(50:dolg)%
[red_duty_outpost_trader_task_2]
icon = ui_inGame2_Odin_vistrel
storyline = false
prior = 45
repeat_timeout = 21600
stage_complete = 1
title = red_duty_outpost_trader_task_2_name
descr = red_duty_outpost_trader_task_2_text
job_descr = red_duty_outpost_trader_task_2_about
task_complete_descr = red_duty_outpost_trader_task_2_finish
on_job_descr = %=setup_bounty_task(red_duty_outpost_trader_task_2:false:true:bandit:monolith:killer)%
target_functor = general_bounty_task
status_functor = bounty_task
condlist_0 = {!task_giver_alive(red_duty_outpost_trader_task_2)} fail
on_complete = %=reward_random_money(8500:9000) =complete_task_inc_goodwill(50:dolg) =inc_task_stage(red_duty_outpost_trader_task_2) =drx_sl_unregister_task_giver(red_duty_outpost_trader_task_2) =drx_sl_reset_stored_task(red_duty_outpost_trader_task_2)%
on_fail = %=fail_task_dec_goodwill(25:dolg) =drx_sl_unregister_task_giver(red_duty_outpost_trader_task_2) =drx_sl_reset_stored_task(red_duty_outpost_trader_task_2)%
[red_duty_outpost_trader_task_3]
icon = ui_iconsTotal_find_item
storyline = false
prior = 90
repeat_timeout = 21600
stage_complete = 1
title = red_duty_outpost_trader_task_3_name
title_functor = general_fetch_task
descr = red_duty_outpost_trader_task_3_text
descr_functor = general_fetch_task
job_descr = red_duty_outpost_trader_task_3_about
fetch_descr = red_duty_outpost_trader_task_3_about
fetch_func = %=setup_fetch_task(red_duty_outpost_trader_task_3_fetch:mutant_meat:10:10)%
target_functor = general_fetch_task
status_functor = actor_has_fetch_item
task_complete_descr = red_duty_outpost_trader_task_3_finish
condlist_0 = {!task_giver_alive(red_duty_outpost_trader_task_3)} fail
on_complete = %=fetch_reward_and_remove(red_duty_outpost_trader_task_3_fetch:2) =complete_task_inc_goodwill(50:dolg) =inc_task_stage(red_duty_outpost_trader_task_3) =pstor_reset(red_duty_outpost_trader_task_3_fetch)%
on_fail = %=pstor_reset(red_duty_outpost_trader_task_3_fetch)%
[red_duty_outpost_trader_task_4]
icon = ui_iconsTotal_find_item
storyline = false
prior = 90
repeat_timeout = 21600
stage_complete = 1
title = red_duty_outpost_trader_task_4_name
title_functor = general_fetch_task
descr = red_duty_outpost_trader_task_4_text
descr_functor = general_fetch_task
job_descr = red_duty_outpost_trader_task_4_about
fetch_descr = red_duty_outpost_trader_task_4_about
fetch_func = %=setup_fetch_task(red_duty_outpost_trader_task_4_fetch:mutant_parts_rare:1:1)%
target_functor = general_fetch_task
status_functor = actor_has_fetch_item
task_complete_descr = red_duty_outpost_trader_task_4_finish
condlist_0 = {!task_giver_alive(red_duty_outpost_trader_task_4)} fail
on_complete = %=fetch_reward_and_remove(red_duty_outpost_trader_task_4_fetch:2) =complete_task_inc_goodwill(50:dolg) =inc_task_stage(red_duty_outpost_trader_task_4) =pstor_reset(red_duty_outpost_trader_task_4_fetch)%
on_fail = %=pstor_reset(red_duty_outpost_trader_task_4_fetch)%

View File

@ -0,0 +1,130 @@
[section@squad]
target@base = val_smart_terrain_1_2
[section@logic]
logic@krov_a_1
logic@krov_a_2
logic@krov_a_3
logic@krov_a_4
logic@krov_a_5
logic@krov_a_6
logic@krov_b_1
logic@krov_b_2
logic@krov_b_3
logic@krov_b_4
logic@krov_b_5
logic@krov_b_6
logic@krov_c_1
logic@krov_c_2
logic@krov_c_3
logic@krov_c_4
logic@krov_c_5
logic@krov_c_6
;------------------------------
; Logic
;------------------------------
[logic@base]
net_spawn = pt1
[logic@krov_a_1]:logic@base
active = mob_home@krov_a_1
[logic@krov_a_2]:logic@base
active = mob_home@krov_a_2
[logic@krov_a_3]:logic@base
active = mob_home@krov_a_3
[logic@krov_a_4]:logic@base
active = mob_home@krov_a_4
[logic@krov_a_5]:logic@base
active = mob_home@krov_a_5
[logic@krov_a_6]:logic@base
active = mob_home@krov_a_6
[logic@krov_b_1]:logic@base
active = mob_home@krov_b_1
[logic@krov_b_2]:logic@base
active = mob_home@krov_b_2
[logic@krov_b_3]:logic@base
active = mob_home@krov_b_3
[logic@krov_b_4]:logic@base
active = mob_home@krov_b_4
[logic@krov_b_5]:logic@base
active = mob_home@krov_b_5
[logic@krov_b_6]:logic@base
active = mob_home@krov_b_6
[logic@krov_c_1]:logic@base
active = mob_home@krov_c_1
[logic@krov_c_2]:logic@base
active = mob_home@krov_c_2
[logic@krov_c_3]:logic@base
active = mob_home@krov_c_3
[logic@krov_c_4]:logic@base
active = mob_home@krov_c_4
[logic@krov_c_5]:logic@base
active = mob_home@krov_c_5
[logic@krov_c_6]:logic@base
active = mob_home@krov_c_6
;------------------------------
; Scheme
;------------------------------
[mob_home@base]
target = %=mutant_path()%
move_animation = walk
wait_animation = {-me_misc_bloodsucker_val_aggro} bloodsucker_sleep, stand
combat_ignore_cond = {-me_misc_bloodsucker_val_aggro} true
enemy_ignore_cond = {-me_misc_bloodsucker_val_aggro} true
on_sound1 = actor|WPN_shoot|10|0| {-me_misc_bloodsucker_val_aggro} %+me_misc_bloodsucker_val_aggro%
on_sound2 = actor|WPN_hit|5|0| {-me_misc_bloodsucker_val_aggro} %+me_misc_bloodsucker_val_aggro%
on_sound3 = actor|WPN_empty|5|0| {-me_misc_bloodsucker_val_aggro} %+me_misc_bloodsucker_val_aggro%
on_sound4 = actor|WPN_reload|5|0| {-me_misc_bloodsucker_val_aggro} %+me_misc_bloodsucker_val_aggro%
on_sound5 = actor|MST_damage|10|0| {-me_misc_bloodsucker_val_aggro} %+me_misc_bloodsucker_val_aggro%
on_sound6 = actor|MST_die|10|0| {-me_misc_bloodsucker_val_aggro} %+me_misc_bloodsucker_val_aggro%
on_info1 = {-me_misc_bloodsucker_val_aggro =dist_to_actor_le(5) =script(gameplay_misc_encounter:actor_sprint) !script(gameplay_misc_encounter:ray_cast_to_actor_le:5)} %+me_misc_bloodsucker_val_aggro%
[mob_home@krov_a_1]:mob_home@base
pt1 = pos:172.2,0.10,-273.7 dir:0
[mob_home@krov_a_2]:mob_home@base
pt1 = pos:172.9,0.10,-272.3 dir:45
[mob_home@krov_a_3]:mob_home@base
pt1 = pos:171.5,0.10,-271.6 dir:-90
[mob_home@krov_a_4]:mob_home@base
pt1 = pos:172.2,0.10,-270.2 dir:-135
[mob_home@krov_a_5]:mob_home@base
pt1 = pos:171.5,0.10,-268.8 dir:90
[mob_home@krov_a_6]:mob_home@base
pt1 = pos:172.9,0.10,-268.1 dir:45
[mob_home@krov_b_1]:mob_home@base
pt1 = pos:172.9,0.10,-264.6 dir:180
[mob_home@krov_b_2]:mob_home@base
pt1 = pos:175.0,0.10,-264.6 dir:180
[mob_home@krov_b_3]:mob_home@base
pt1 = pos:175.7,0.10,-266.0 dir:90
[mob_home@krov_b_4]:mob_home@base
pt1 = pos:174.3,0.10,-268.8 dir:0
[mob_home@krov_b_5]:mob_home@base
pt1 = pos:174.3,0.10,-271.6 dir:135
[mob_home@krov_b_6]:mob_home@base
pt1 = pos:175.7,0.10,-273.7 dir:90
[mob_home@krov_c_1]:mob_home@base
pt1 = pos:171.5,0.10,-277.9 dir:-45
[mob_home@krov_c_2]:mob_home@base
pt1 = pos:172.9,0.10,-278.6 dir:90
[mob_home@krov_c_3]:mob_home@base
pt1 = pos:174.3,0.10,-278.6 dir:0
[mob_home@krov_c_4]:mob_home@base
pt1 = pos:175.7,0.10,-277.2 dir:0
[mob_home@krov_c_5]:mob_home@base
pt1 = pos:175.0,0.10,-275.8 dir:0
[mob_home@krov_c_6]:mob_home@base
pt1 = pos:172.9,0.10,-276.5 dir:180

View File

@ -0,0 +1,107 @@
[section@squad]
target@base = rad2_prip_teleport
[section@logic]
logic@boss_1
logic@boss_2
logic@bait
;------------------------------
; Logic
;------------------------------
[logic@base]
net_spawn = pt1
[logic@boss_1]:logic@base
suitable = {=check_squad_name(squad_lure_prey_controller_1)} true
active = mob_home@boss_1
on_death = death@boss_1
[logic@boss_2]:logic@base
suitable = {=check_squad_name(squad_lure_prey_controller_2)} true
active = mob_home@boss_2
on_death = death@boss_2
[logic@bait]:logic@base
suitable = {=check_squad_name(squad_lure_prey_phantom)} true
active = {+me_lure_prey_bait_1} beh@bait_1, {+me_lure_prey_bait_2} beh@bait_2, {+me_lure_prey_bait_3} beh@bait_3, {+me_lure_prey_bait_4} beh@bait_4, beh@bait_5
;------------------------------
; Scheme
;------------------------------
[mob_home@boss]
target = %=mutant_path()% nil
before_hit = gameplay_misc_encounter@lure_prey_before_hit
combat_ignore_cond = {-me_lure_prey_argo} %=script(gameplay_misc_encounter:kill_common_enemy)% true
enemy_ignore_cond = {-me_lure_prey_argo} true
[mob_home@boss_1]:mob_home@boss
pt1 = pos:660.8,-43.80,168.7 dir:0
on_info1 = {+me_lure_prey_argo -me_lure_prey_boss} %+me_lure_prey_boss =create_squad(squad_lure_prey_controller_2:rad2_prip_teleport)%
on_info2 = {-me_lure_prey_argo =see_actor()} %+me_lure_prey_argo%
[mob_home@boss_2]:mob_home@boss
pt1 = pos:603.4,-43.80,184.8 dir:-90
[death@boss_1]
on_info1 = {!squad_exist(squad_lure_prey_controller_2) +me_lure_prey_bait_1} %-me_lure_prey_bait_1%
on_info2 = {!squad_exist(squad_lure_prey_controller_2) +me_lure_prey_bait_2} %-me_lure_prey_bait_2%
on_info3 = {!squad_exist(squad_lure_prey_controller_2) +me_lure_prey_bait_3} %-me_lure_prey_bait_3%
on_info4 = {!squad_exist(squad_lure_prey_controller_2) +me_lure_prey_bait_4} %-me_lure_prey_bait_4%
on_info5 = {!squad_exist(squad_lure_prey_controller_2) +me_lure_prey_argo} %-me_lure_prey_argo%
on_info6 = {!squad_exist(squad_lure_prey_controller_2)} %+me_lure_prey_dead%
[death@boss_2]
on_info1 = {!squad_exist(squad_lure_prey_controller_1) +me_lure_prey_bait_1} %-me_lure_prey_bait_1%
on_info2 = {!squad_exist(squad_lure_prey_controller_1) +me_lure_prey_bait_2} %-me_lure_prey_bait_2%
on_info3 = {!squad_exist(squad_lure_prey_controller_1) +me_lure_prey_bait_3} %-me_lure_prey_bait_3%
on_info4 = {!squad_exist(squad_lure_prey_controller_1) +me_lure_prey_bait_4} %-me_lure_prey_bait_4%
on_info5 = {!squad_exist(squad_lure_prey_controller_1) +me_lure_prey_argo} %-me_lure_prey_argo%
on_info6 = {!squad_exist(squad_lure_prey_controller_1)} %+me_lure_prey_dead%
[beh@base]
dont_keep_items = true
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
combat_ignore_keep_when_attacked = true
path_end = loop
walk_dist = 0
jog_dist = 0
run_anim = rush
meet = no_meet
before_hit = invulnerable
combat_ignore_cond = true
enemy_ignore_cond = true
[beh@bait]:beh@base
target = %=animpoint()% nil
on_info3 = %=script(gameplay_misc_encounter:lure_prey_set_stalker)%
on_info4 = {+me_lure_prey_argo =squad_exist(squad_lure_prey_phantom)} %=remove_squad(squad_lure_prey_phantom)%
on_info5 = {!squad_exist(squad_lure_prey_controller_1) =squad_exist(squad_lure_prey_phantom)} %=remove_squad(squad_lure_prey_phantom)%
[beh@bait_1]:beh@bait
pt1 = 999999,hello_wpn | pos:660.1,-43.80,182.0 dir:90
on_info1 = {=dist_to_actor_le(20) -me_lure_prey_argo} %+me_lure_prey_argo%
[beh@bait_2]:beh@bait
pt1 = 999999,hello_wpn | pos:603.4,-43.80,184.8 dir:90
on_info1 = {=dist_to_actor_le(10) -me_lure_prey_bait_1} %+me_lure_prey_bait_1%
on_info2 = {+me_lure_prey_bait_1} %=script(xr_logic_ex:set_position:beh@bait_1:pt1)% beh@bait_1
[beh@bait_3]:beh@bait
pt1 = 999999,hello_wpn | pos:557.9,-42.00,172.9 dir:290
on_info1 = {=dist_to_actor_le(10) -me_lure_prey_bait_2} %+me_lure_prey_bait_2%
on_info2 = {+me_lure_prey_bait_2} %=script(xr_logic_ex:set_position:beh@bait_2:pt1)% beh@bait_2
[beh@bait_4]:beh@bait
pt1 = 999999,hello_wpn | pos:528.5,-39.50,131.6 dir:150
on_info1 = {=dist_to_actor_le(10) -me_lure_prey_bait_3} %+me_lure_prey_bait_3%
on_info2 = {+me_lure_prey_bait_3} %=script(xr_logic_ex:set_position:beh@bait_3:pt1)% beh@bait_3
[beh@bait_5]:beh@bait
pt1 = 999999,hello_wpn | pos:560.0,-44.00,51.8 dir:210
on_info1 = {=dist_to_actor_le(10) -me_lure_prey_bait_4} %+me_lure_prey_bait_4%
on_info2 = {+me_lure_prey_bait_4} %=script(xr_logic_ex:set_position:beh@bait_4:pt1)% beh@bait_4

View File

@ -0,0 +1,128 @@
[section@squad]
target@base = jup_b47
[section@logic]
logic@mutant_1
logic@mutant_2
logic@mutant_3
logic@mutant_4
logic@mutant_5
logic@mutant_6
logic@mutant_7
logic@mutant_8
logic@mutant_9
logic@mutant_10
logic@mutant_11
logic@mutant_12
[test]
logic@mutant_13
logic@mutant_14
logic@mutant_15
logic@mutant_16
logic@mutant_17
logic@mutant_18
;------------------------------
; Logic
;------------------------------
[logic@base]
net_spawn = pt1
[logic@mutant_1]:logic@base
active = mob_home@mutant_1
[logic@mutant_2]:logic@base
active = mob_home@mutant_2
[logic@mutant_3]:logic@base
active = mob_home@mutant_3
[logic@mutant_4]:logic@base
active = mob_home@mutant_4
[logic@mutant_5]:logic@base
active = mob_home@mutant_5
[logic@mutant_6]:logic@base
active = mob_home@mutant_6
[logic@mutant_7]:logic@base
active = mob_home@mutant_7
[logic@mutant_8]:logic@base
active = mob_home@mutant_8
[logic@mutant_9]:logic@base
active = mob_home@mutant_9
[logic@mutant_10]:logic@base
active = mob_home@mutant_10
[logic@mutant_11]:logic@base
active = mob_home@mutant_11
[logic@mutant_12]:logic@base
active = mob_home@mutant_12
[logic@mutant_13]:logic@base
active = mob_home@mutant_13
[logic@mutant_14]:logic@base
active = mob_home@mutant_14
[logic@mutant_15]:logic@base
active = mob_home@mutant_15
[logic@mutant_16]:logic@base
active = mob_home@mutant_16
[logic@mutant_17]:logic@base
active = mob_home@mutant_17
[logic@mutant_18]:logic@base
active = mob_home@mutant_18
;------------------------------
; Scheme
;------------------------------
[mob_home@base]
target = %=mutant_path()%
move_animation = walk
wait_animation = {-me_sleeping_snork_fight} bloodsucker_sleep, stand
combat_ignore_cond = {-me_sleeping_snork_fight} true
enemy_ignore_cond = {-me_sleeping_snork_fight} true
on_sound1 = actor|WPN_shoot|10|0| {-me_sleeping_snork_fight} %+me_sleeping_snork_fight%
on_sound2 = actor|WPN_hit|5|0| {-me_sleeping_snork_fight} %+me_sleeping_snork_fight%
on_sound3 = actor|WPN_empty|5|0| {-me_sleeping_snork_fight} %+me_sleeping_snork_fight%
on_sound4 = actor|WPN_reload|5|0| {-me_sleeping_snork_fight} %+me_sleeping_snork_fight%
on_sound5 = actor|MST_damage|10|0| {-me_sleeping_snork_fight} %+me_sleeping_snork_fight%
on_sound6 = actor|MST_die|10|0| {-me_sleeping_snork_fight} %+me_sleeping_snork_fight%
on_info1 = {-me_sleeping_snork_fight =dist_to_actor_le(5) =script(gameplay_misc_encounter:actor_sprint) !script(gameplay_misc_encounter:ray_cast_to_actor_le:5)} %+me_sleeping_snork_fight%
[mob_home@mutant_1]:mob_home@base
pt1 = pos:398.3,39.34,-191.1 dir:-90
[mob_home@mutant_2]:mob_home@base
pt1 = pos:400.4,39.34,-192.5 dir:45
[mob_home@mutant_3]:mob_home@base
pt1 = pos:398.3,39.37,-195.3 dir:-90
[mob_home@mutant_4]:mob_home@base
pt1 = pos:399.0,39.34,-199.5 dir:-135
[mob_home@mutant_5]:mob_home@base
pt1 = pos:400.4,39.34,-202.3 dir:90
[mob_home@mutant_6]:mob_home@base
pt1 = pos:398.3,39.34,-204.4 dir:45
[mob_home@mutant_7]:mob_home@base
pt1 = pos:401.1,39.34,-205.8 dir:45
[mob_home@mutant_8]:mob_home@base
pt1 = pos:400.4,39.34,-210.7 dir:45
[mob_home@mutant_9]:mob_home@base
pt1 = pos:398.3,39.34,-212.8 dir:45
[mob_home@mutant_10]:mob_home@base
pt1 = pos:400.4,39.34,-214.2 dir:45
[mob_home@mutant_11]:mob_home@base
pt1 = pos:399.0,39.34,-215.6 dir:45
[mob_home@mutant_12]:mob_home@base
pt1 = pos:401.1,39.34,-215.6 dir:45
[mob_home@mutant_13]:mob_home@base
pt1 = pos:172.9,0.10,-268.1 dir:45
[mob_home@mutant_14]:mob_home@base
pt1 = pos:172.9,0.10,-268.1 dir:45
[mob_home@mutant_15]:mob_home@base
pt1 = pos:172.9,0.10,-268.1 dir:45
[mob_home@mutant_16]:mob_home@base
pt1 = pos:172.9,0.10,-268.1 dir:45
[mob_home@mutant_17]:mob_home@base
pt1 = pos:172.9,0.10,-268.1 dir:45
[mob_home@mutant_18]:mob_home@base
pt1 = pos:172.9,0.10,-268.1 dir:45

View File

@ -0,0 +1,14 @@
[logic]
active = ph_idle@base
[ph_idle@base]
on_info = %=script(xr_dynamic_object:light:lights_white_12m_glass:bone_lamp:1)%
[lights_white_12m_glass]
range = 12
color = 4294960053
shadow = true
;volumetric = true
;volumetric_quality = 0.7
;volumetric_distance = 2.5
;volumetric_intensity = 0.6

View File

@ -0,0 +1,377 @@
[logic@base]
net_spawn = pt1
;==================================================
[beh@base]
target = waypoint
path_end = loop
walk_dist = 0
jog_dist = 0
run_anim = patrol
meet = meet@base
[meet@base]
close_snd_hello = {=check_npc_name(monolith)} nil, {=is_wounded} nil, {!is_squad_commander} nil, {=actor_enemy} nil, {=actor_has_weapon} meet_hide_weapon, meet_hello
close_snd_bye = nil
close_anim = nil
close_victim = nil
close_distance = 0
far_anim = nil
far_victim = nil
far_distance = 0
meet_on_talking = false
use = {=is_squad_commander !has_enemy !actor_enemy =dist_to_actor_le(3)} true
[beh@animpoint]:beh@base
target = %=animpoint()% nil
[logic@guard]:logic@base
suitable = {=npc_squad_name(squad_red_duty_outpost_guard) !surge_started()} true
prior = 200
[logic@guard_1]:logic@guard
active = beh@guard_carrier
[logic@guard_2]:logic@guard
active = beh@guard_patrol
[logic@guard_3]:logic@guard
active = beh@guard_truck_1
[logic@guard_4]:logic@guard
active = beh@guard_truck_2
[logic@guard_5]:logic@guard
active = beh@guard_truck_3
[logic@guard_6]:logic@guard
active = beh@guard_truck_4
[logic@guard_7]:logic@guard
active = beh@guard_tower_1
[logic@guard_8]:logic@guard
active = beh@guard_tower_2
[logic@guard_9]:logic@guard
active = beh@guard_bridge_1
[logic@guard_10]:logic@guard
active = beh@guard_bridge_2
[logic@guard_11]:logic@guard
active = beh@guard_bridge_3
[logic@guard_12]:logic@guard
active = beh@guard_path_1
[logic@guard_13]:logic@guard
active = beh@guard_path_2
[logic@guard_14]:logic@guard
active = beh@guard_path_3
[beh@guard]:beh@animpoint
meet = no_meet
[beh@guard_carrier]:beh@guard
pt1 = 10000,dynamite | pos:-104.3,0.00,-239.4 dir:-90
pt2 = 10000,dynamite | pos:-115.5,-0.15,-251.3 dir:180
pt3 = 10000,dynamite | pos:-115.5,0.47,-258.3 dir:180
[beh@guard_patrol]:beh@guard
pt1 = 10000,guard | pos:-111.3,-0.22,-252.7 dir:0
pt2 = 10000,guard | pos:-94.5,0.28,-275.1 dir:-150
[beh@guard_truck_1]:beh@guard
pt1 = 999999,binocular | pos:-101.5,1.75,-249.2 dir:-45
[beh@guard_truck_2]:beh@guard
pt1 = 999999,guard | pos:-100.1,0.06,-246.4 dir:-60
[beh@guard_truck_3]:beh@guard
pt1 = 999999,guard | pos:-116.9,-0.44,-246.4 dir:-90
[beh@guard_truck_4]:beh@guard
pt1 = 999999,animpoint_stay_wall | pos:-101.5,0.02,-240.8 dir:45 animpoint:pos
[beh@guard_tower_1]:beh@guard
pt1 = 10000,guard | pos:-122.5,4.72,-252.7 dir:90
pt2 = 10000,guard | pos:-114.8,4.72,-252.7 dir:-90
[beh@guard_tower_2]:beh@guard
pt1 = 999999,binocular | pos:-122.5,4.72,-261.1 dir:90
[beh@guard_bridge_1]:beh@guard
pt1 = 999999,guard | pos:-125.3,0.27,-272.3 dir:90
[beh@guard_bridge_2]:beh@guard
pt1 = 999999,guard | pos:-120.4,0.18,-265.3 dir:90
[beh@guard_bridge_3]:beh@guard
pt1 = 999999,guard | pos:-112.0,0.27,-273.0 dir:90
[beh@guard_path_1]:beh@guard
pt1 = 999999,guard | pos:-93.1,0.38,-280.7 dir:-150
[beh@guard_path_2]:beh@guard
pt1 = 999999,guard | pos:-102.9,0.12,-281.4 dir:-135
[beh@guard_path_3]:beh@guard
pt1 = 999999,guard | pos:-109.9,-0.18,-287.7 dir:-135
[logic@surge_tower]:logic@base
suitable = {=surge_started() =npc_squad_name(squad_red_duty_outpost_guard)} true
prior = 200
[logic@surge_tower_1]:logic@surge_tower
active = beh@surge_tower_1
[logic@surge_tower_2]:logic@surge_tower
active = beh@surge_tower_2
[logic@surge_tower_3]:logic@surge_tower
active = beh@surge_tower_3
[logic@surge_tower_4]:logic@surge_tower
active = beh@surge_tower_4
[logic@surge_tower_5]:logic@surge_tower
active = beh@surge_tower_5
[logic@surge_tower_6]:logic@surge_tower
active = beh@surge_tower_6
[logic@surge_tower_7]:logic@surge_tower
active = beh@surge_tower_7
[logic@surge_tower_8]:logic@surge_tower
active = beh@surge_tower_8
[logic@surge_tower_9]:logic@surge_tower
active = beh@surge_tower_9
[logic@surge_tower_10]:logic@surge_tower
active = beh@surge_tower_10
[logic@surge_tower_11]:logic@surge_tower
active = beh@surge_tower_11
[logic@surge_tower_12]:logic@surge_tower
active = beh@surge_tower_12
[logic@surge_tower_13]:logic@surge_tower
active = beh@surge_tower_13
[logic@surge_tower_14]:logic@surge_tower
active = beh@surge_tower_14
[beh@surge_tower]:beh@animpoint
run_anim = rush
meet = no_meet
[beh@surge_tower_1]:beh@surge_tower
pt1 = 999999,animpoint_sit | pos:-116.2,4.72,-254.8 dir:180 animpoint:pos
[beh@surge_tower_2]:beh@surge_tower
pt1 = 999999,animpoint_sit | pos:-115.5,4.72,-256.2 dir:90 animpoint:pos
[beh@surge_tower_3]:beh@surge_tower
pt1 = 999999,animpoint_sit | pos:-116.9,4.72,-259.0 dir:0 animpoint:pos
[beh@surge_tower_4]:beh@surge_tower
pt1 = 999999,animpoint_sit | pos:-119.7,4.72,-256.2 dir:-90 animpoint:pos
[beh@surge_tower_5]:beh@surge_tower
pt1 = 999999,animpoint_sit | pos:-119.0,4.72,-254.8 dir:180 animpoint:pos
[beh@surge_tower_6]:beh@surge_tower
pt1 = 999999,animpoint_sit | pos:-119.7,4.72,-259.0 dir:-45 animpoint:pos
[beh@surge_tower_7]:beh@surge_tower
pt1 = 999999,animpoint_sit | pos:-116.2,0.47,-256.2 dir:180 animpoint:pos
[beh@surge_tower_8]:beh@surge_tower
pt1 = 999999,animpoint_sit | pos:-115.5,0.47,-257.6 dir:90 animpoint:pos
[beh@surge_tower_9]:beh@surge_tower
pt1 = 999999,animpoint_sit | pos:-119.0,0.47,-259.0 dir:-90 animpoint:pos
[beh@surge_tower_10]:beh@surge_tower
pt1 = 999999,animpoint_sit | pos:-119.0,0.47,-257.6 dir:-90 animpoint:pos
[beh@surge_tower_11]:beh@surge_tower
pt1 = 999999,guard | pos:-117.6,0.47,-257.6
[beh@surge_tower_12]:beh@surge_tower
pt1 = 999999,guard | pos:-116.9,0.47,-257.6
[beh@surge_tower_13]:beh@surge_tower
pt1 = 999999,guard | pos:-117.6,0.47,-258.3
[beh@surge_tower_14]:beh@surge_tower
pt1 = 999999,guard | pos:-116.9,0.47,-258.3
[logic@visitor]:logic@base
suitable = {+red_bridge_outpost} true
prior = 100
[beh@visitor]:beh@animpoint
[logic@visitor_1]:logic@visitor
active = beh@visitor_1
[logic@visitor_2]:logic@visitor
active = beh@visitor_2
[logic@visitor_3]:logic@visitor
active = beh@visitor_3
[logic@visitor_4]:logic@visitor
active = beh@visitor_4
[logic@visitor_5]:logic@visitor
active = beh@visitor_5
[logic@visitor_6]:logic@visitor
active = beh@visitor_6
[logic@visitor_7]:logic@visitor
active = beh@visitor_7
[logic@visitor_8]:logic@visitor
active = beh@visitor_8
[beh@visitor_1]:beh@visitor
pt1 = 999999,animpoint_sit_all@random,state | pos:-103.6,-0.81,-203.0 dir:0 animpoint:pos
[beh@visitor_2]:beh@visitor
pt1 = 999999,animpoint_sit_normal@random,state | pos:-102.2,-0.81,-201.6 dir:-90 animpoint:pos
[beh@visitor_3]:beh@visitor
pt1 = 999999,animpoint_sit_normal@random,state | pos:-102.2,-0.81,-200.9 dir:-90 animpoint:pos
[beh@visitor_4]:beh@visitor
pt1 = 999999,animpoint_sit_normal@random,state | pos:-102.2,-0.81,-200.2 dir:-90 animpoint:pos
[beh@visitor_5]:beh@visitor
pt1 = 999999,animpoint_sit_all@random,state | pos:-102.2,-0.81,-198.8 dir:135 animpoint:pos
[beh@visitor_6]:beh@visitor
pt1 = 999999,animpoint_sit_all@random,state | pos:-103.6,-0.81,-198.8 dir:180 animpoint:pos
[beh@visitor_7]:beh@visitor
pt1 = 999999,animpoint_sit_all@random,state | pos:-105.0,-0.81,-198.8 dir:225 animpoint:pos
[beh@visitor_8]:beh@visitor
pt1 = 999999,fold_arms | pos:-102.9,-0.81,-198.1 dir:180 animpoint:pos
[logic@visitor_10]:logic@visitor
active = beh@visitor_10
[logic@visitor_11]:logic@visitor
active = beh@visitor_11
[logic@visitor_12]:logic@visitor
active = beh@visitor_12
[logic@visitor_13]:logic@visitor
active = beh@visitor_13
[logic@visitor_14]:logic@visitor
active = beh@visitor_14
[beh@campfire]:beh@visitor
turn_on_campfire = true
[beh@visitor_10]:beh@campfire
pt1 = 999999,animpoint_sit_ass@random@roast,state | pos:-92.4,-0.81,-193.9 look:-93.8,-0.81,-192.5 animpoint:pos
[beh@visitor_11]:beh@campfire
pt1 = 999999,animpoint_sit_ass@random@roast,state | pos:-91.7,-0.81,-191.8 look:-93.8,-0.81,-192.5 animpoint:pos
[beh@visitor_12]:beh@campfire
pt1 = 999999,animpoint_sit_ass@random@roast,state | pos:-93.1,-0.81,-190.4 look:-93.8,-0.81,-192.5 animpoint:pos
[beh@visitor_13]:beh@campfire
pt1 = 999999,animpoint_sit_ass@random@roast,state | pos:-95.2,-0.81,-190.4 look:-93.8,-0.81,-192.5 animpoint:pos
[beh@visitor_14]:beh@campfire
pt1 = 999999,animpoint_stay_wall@random,state | pos:-96.6,-0.81,-193.9 dir:180 animpoint:pos
[logic@customer_1]:logic@visitor
active = beh@customer_1
[logic@customer_2]:logic@visitor
active = beh@customer_2
[beh@customer_1]:beh@visitor
pt1 = 999999,animpoint_sit_normal_weapon,state | pos:-119.0,0.47,-256.2 dir:90 animpoint:pos
[beh@customer_2]:beh@visitor
pt1 = 999999,animpoint_sit_normal_weapon,state | pos:-119.0,0.47,-255.5 dir:90 animpoint:pos
[logic@wounded_1]:logic@visitor
active = beh@wounded_1
[logic@wounded_2]:logic@visitor
active = beh@wounded_2
[logic@wounded_3]:logic@visitor
active = beh@wounded_3
[beh@wounded]:beh@visitor
meet = no_meet
[beh@wounded_1]:beh@wounded
pt1 = 999999,wounded_heavy | pos:-102.9,-0.70,-182.7 dir:90 animpoint:pos
[beh@wounded_2]:beh@wounded
pt1 = 999999,wounded_heavy | pos:-101.5,-0.70,-182.7 dir:90 animpoint:pos
[beh@wounded_3]:beh@wounded
pt1 = 999999,wounded_heavy | pos:-100.1,-0.70,-182.7 dir:90 animpoint:pos
[logic@research]:logic@base
suitable = {-red_bridge_outpost} false, {=is_night()} false, {=npc_community(csky)} true, {=npc_community(ecolog)} true
prior = 110
[logic@research_1]:logic@research
active = beh@research_1
[logic@research_2]:logic@research
active = beh@research_2
[beh@research_1]:beh@visitor
pt1 = 999999,scaner_stand | pos:-128.1,-6.13,-273.0 dir:30
on_info = {=surge_started()} beh@surge_1
[beh@research_2]:beh@visitor
pt1 = 999999,scaner_crouch | pos:-126.7,-5.52,-271.6 dir:60
on_info = {=surge_started()} beh@surge_2
[logic@drunk]:logic@visitor
suitable = {+red_bridge_outpost =is_night()} true
prior = 110
active = beh@drunk
[beh@drunk]:beh@visitor
pt1 = 999999,drunk_behindwall | pos:-102.2,0.04,-236.7 dir:210 animpoint:pos
on_info = {=surge_started()} beh@surge_3
[logic@outside_1]:logic@visitor
active = beh@outside_1
[logic@outside_2]:logic@visitor
active = beh@outside_2
[logic@outside_3]:logic@visitor
active = beh@outside_3
[beh@outside_1]:beh@visitor
pt1 = 999999,animpoint_stay_wall@random,state | pos:-104.2,-0.12,-246.4 dir:-90 animpoint:pos
on_info = {=surge_started()} beh@surge_4
[beh@outside_2]:beh@visitor
pt1 = 999999,animpoint_sit_high@random,state | pos:-104.2,-0.10,-245.0 dir:-90 animpoint:pos
on_info = {=surge_started()} beh@surge_5
[beh@outside_3]:beh@visitor
pt1 = 999999,animpoint_sit_normal@random,state | pos:-105.1,-0.15,-245.0 dir:90 animpoint:pos
on_info = {=surge_started()} beh@surge_6
[beh@surge]:beh@visitor
run_anim = rush
[beh@surge_1]:beh@surge
pt1 = 999999,animpoint_sit | pos:-116.2,-0.64,-225.4 dir:0 animpoint:pos
on_info = {!surge_started()} beh@research_1
[beh@surge_2]:beh@surge
pt1 = 999999,animpoint_sit | pos:-114.8,-0.64,-224.7 dir:90 animpoint:pos
on_info = {!surge_started()} beh@research_2
[beh@surge_3]:beh@surge
pt1 = 999999,animpoint_sit | pos:-114.8,-0.64,-223.3 dir:90 animpoint:pos
on_info = {!surge_started()} beh@drunk
[beh@surge_4]:beh@surge
pt1 = 999999,animpoint_sit | pos:-113.4,-0.64,-219.8 dir:60 animpoint:pos
on_info = {!surge_started()} beh@outside_1
[beh@surge_5]:beh@surge
pt1 = 999999,animpoint_sit | pos:-120.4,-0.64,-223.3 dir:-90 animpoint:pos
on_info = {!surge_started()} beh@outside_2
[beh@surge_6]:beh@surge
pt1 = 999999,animpoint_sit | pos:-120.4,-0.64,-221.9 dir:-90 animpoint:pos
on_info = {!surge_started()} beh@outside_3
[beh@surge_7]:beh@surge
pt1 = 999999,animpoint_sit | pos:-119.7,-0.64,-219.8 dir:-90 animpoint:pos
[beh@surge_8]:beh@surge
pt1 = 999999,animpoint_sit | pos:-119.0,-0.64,-217.7 dir:-90 animpoint:pos
[beh@surge_9]:beh@surge
pt1 = 999999,animpoint_sit | pos:-117.6,-0.64,-216.3 dir:-90 animpoint:pos

View File

@ -0,0 +1,18 @@
[logic]
active = ph_idle@play
[ph_idle@base]
nonscript_usable = true
[ph_idle@play]:ph_idle@base
on_info = %=play_sound(red_bridge_outpost_radio)%
tips = Use
on_use = %=stop_sound()% ph_idle@stop
[ph_idle@stop]:ph_idle@base
tips = Use
on_use = ph_idle@play
[collide]
ignore_static

View File

@ -0,0 +1,14 @@
[logic]
active = {=is_day()} ph_idle@play, ph_idle@stop
[ph_idle@play]
nonscript_usable = false
on_info = {=is_day()} %=play_sound(red_bridge_outpost_bar_dolg_speech)%, %=stop_sound()% ph_idle@stop
[ph_idle@stop]
nonscript_usable = false
on_info = {=is_day()} ph_idle@play
[collide]
ignore_static

View File

@ -0,0 +1,143 @@
[smart_terrain]
squad_id = 11
max_population = 12
respawn_idle = 86400
;faction_controlled = army, bandit, csky, dolg, ecolog, freedom, killer, monolith, stalker, renegade, greh
;default_faction = bandit
;faction_respawn_num = 2
respawn_params = respawn@red_smart_terrain_bridge
[respawn@red_smart_terrain_bridge]
spawn@npc_1
spawn@npc_2
spawn@npc_3
spawn@guard_1
spawn@guard_2
spawn@visitor_1
spawn@visitor_2
spawn@visitor_3
spawn@visitor_4
spawn@outpost
spawn@general
[spawn@npc_1]
spawn_squads = squad_red_duty_outpost_trader
spawn_num = {+red_bridge_outpost !squad_exist(squad_red_duty_outpost_trader)} 1, 0
[spawn@npc_2]
spawn_squads = squad_red_duty_outpost_medic
spawn_num = {+red_bridge_outpost !squad_exist(squad_red_duty_outpost_medic)} 1, 0
[spawn@npc_3]
spawn_squads = squad_red_duty_outpost_guide
spawn_num = {+red_bridge_outpost !squad_exist(squad_red_duty_outpost_guide)} 1, 0
[spawn@guard_1]
spawn_squads = squad_red_duty_outpost_guard_1
spawn_num = {+red_bridge_outpost !squad_exist(squad_red_duty_outpost_guard_1)} 1, 0
[spawn@guard_2]
spawn_squads = squad_red_duty_outpost_guard_2
spawn_num = {+red_bridge_outpost !squad_exist(squad_red_duty_outpost_guard_2)} 1, 0
[spawn@visitor_1]
spawn_squads = squad_red_duty_outpost_visitor_1
spawn_num = {+red_bridge_outpost !squad_exist(squad_red_duty_outpost_visitor_1)} 1, 0
[spawn@visitor_2]
spawn_squads = squad_red_duty_outpost_visitor_2
spawn_num = {+red_bridge_outpost !squad_exist(squad_red_duty_outpost_visitor_2)} 1, 0
[spawn@visitor_3]
spawn_squads = squad_red_duty_outpost_visitor_3
spawn_num = {+red_bridge_outpost !squad_exist(squad_red_duty_outpost_visitor_3)} 1, 0
[spawn@visitor_4]
spawn_squads = squad_red_duty_outpost_visitor_4
spawn_num = {+red_bridge_outpost !squad_exist(squad_red_duty_outpost_visitor_4)} 1, 0
[spawn@outpost]
spawn_squads = stalker_sim_squad_advanced, stalker_sim_squad_veteran, duty_sim_squad_advanced, duty_sim_squad_veteran, csky_sim_squad_advanced, csky_sim_squad_veteran, ecolog_sim_squad_advanced, ecolog_sim_squad_veteran
spawn_num = {+red_bridge_outpost} 2, 0
[spawn@general]
spawn_squads = monolith_sim_squad_novice, monolith_sim_squad_advanced, monolith_sim_squad_veteran
spawn_num = {-red_bridge_outpost} 2, 0
[on_changing_level]
on_info1 = %=script(gameplay_duty_outpost:clean_mess) =script(xr_dynamic_object:dynamic_object:misc\duty_outpost_object.ltx)%
on_info2 = %=script(gameplay_duty_outpost:reinforce_squad:squad_red_duty_outpost_guard_1:1)%
on_info3 = %=script(gameplay_duty_outpost:reinforce_squad:squad_red_duty_outpost_guard_2:1)%
on_info4 = %=script(gameplay_duty_outpost:reinforce_squad:squad_red_duty_outpost_visitor_1:1)%
on_info5 = %=script(gameplay_duty_outpost:reinforce_squad:squad_red_duty_outpost_visitor_2:1)%
on_info6 = %=script(gameplay_duty_outpost:reinforce_squad:squad_red_duty_outpost_visitor_3:1)%
on_info7 = %=script(gameplay_duty_outpost:reinforce_squad:squad_red_duty_outpost_visitor_4:1)%
[exclusive]
guard_1 = red_forest\red_bridge_outpost_logic.ltx
guard_2 = red_forest\red_bridge_outpost_logic.ltx
guard_3 = red_forest\red_bridge_outpost_logic.ltx
guard_4 = red_forest\red_bridge_outpost_logic.ltx
guard_5 = red_forest\red_bridge_outpost_logic.ltx
guard_6 = red_forest\red_bridge_outpost_logic.ltx
guard_7 = red_forest\red_bridge_outpost_logic.ltx
guard_8 = red_forest\red_bridge_outpost_logic.ltx
guard_9 = red_forest\red_bridge_outpost_logic.ltx
guard_10 = red_forest\red_bridge_outpost_logic.ltx
guard_11 = red_forest\red_bridge_outpost_logic.ltx
guard_12 = red_forest\red_bridge_outpost_logic.ltx
guard_13 = red_forest\red_bridge_outpost_logic.ltx
guard_14 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_1 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_2 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_3 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_4 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_5 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_6 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_7 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_8 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_9 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_10 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_11 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_12 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_13 = red_forest\red_bridge_outpost_logic.ltx
surge_tower_14 = red_forest\red_bridge_outpost_logic.ltx
customer_1 = red_forest\red_bridge_outpost_logic.ltx
customer_2 = red_forest\red_bridge_outpost_logic.ltx
wounded_1 = red_forest\red_bridge_outpost_logic.ltx
wounded_2 = red_forest\red_bridge_outpost_logic.ltx
wounded_3 = red_forest\red_bridge_outpost_logic.ltx
research_1 = red_forest\red_bridge_outpost_logic.ltx
research_2 = red_forest\red_bridge_outpost_logic.ltx
drunk = red_forest\red_bridge_outpost_logic.ltx
outside_1 = red_forest\red_bridge_outpost_logic.ltx
outside_2 = red_forest\red_bridge_outpost_logic.ltx
outside_3 = red_forest\red_bridge_outpost_logic.ltx
visitor_1 = red_forest\red_bridge_outpost_logic.ltx
visitor_2 = red_forest\red_bridge_outpost_logic.ltx
visitor_3 = red_forest\red_bridge_outpost_logic.ltx
visitor_4 = red_forest\red_bridge_outpost_logic.ltx
visitor_5 = red_forest\red_bridge_outpost_logic.ltx
visitor_6 = red_forest\red_bridge_outpost_logic.ltx
visitor_7 = red_forest\red_bridge_outpost_logic.ltx
visitor_8 = red_forest\red_bridge_outpost_logic.ltx
visitor_10 = red_forest\red_bridge_outpost_logic.ltx
visitor_11 = red_forest\red_bridge_outpost_logic.ltx
visitor_12 = red_forest\red_bridge_outpost_logic.ltx
visitor_13 = red_forest\red_bridge_outpost_logic.ltx
visitor_14 = red_forest\red_bridge_outpost_logic.ltx

View File

@ -0,0 +1,86 @@
[section@squad]
target@base = red_smart_terrain_bridge
[section@logic]
logic@trader
logic@medic
logic@guide
[logic@base]
post_combat_time = 0,0
combat_type = camper
net_spawn = pt1
dont_keep_items = true
[logic@trader]:logic@base
suitable = {=check_npc_name(red_duty_outpost_trader)} true
level_spot = trader
trade = items\trade\trade_duty.ltx
active = beh@trader
[logic@medic]:logic@base
suitable = {=check_npc_name(red_duty_outpost_medic)} true
level_spot = medic
trade = items\trade\trade_generic_medic.ltx
active = beh@medic
[logic@guide]:logic@base
suitable = {=check_npc_name(red_duty_outpost_guide)} true
level_spot = quest_npc
active = beh@guide
;==================================================
[beh@base]
dont_keep_items = true
gather_items_enabled = false
target = waypoint
path_end = loop
walk_dist = 0
jog_dist = 0
run_anim = patrol
meet = no_meet
before_hit = invulnerable
combat_ignore_cond = {!is_enemy_actor !fighting_dist_le(40)} true
enemy_ignore_cond = {!is_enemy_actor !fighting_dist_le(40)} true
[beh@animpoint]:beh@base
target = %=animpoint()% nil
[beh@trader]:beh@animpoint
pt1 = 10000,fold_arms | pos:-117.6,0.47,-255.5 dir:180 animpoint:pos
meet = meet@base
[beh@medic]:beh@animpoint
pt1 = 10000,animpoint_sit_normal | pos:-103.6,-0.82,-183.4 dir:90 animpoint:pos
meet = meet@base
[beh@guide]:beh@animpoint
pt1 = 10000,binocular | pos:-119.7,4.72,-257.6 dir:90 animpoint:pos
meet = meet@guide
[meet@base]
close_snd_hello = meet_hello
close_snd_bye = nil
close_anim = nil
close_victim = nil
close_distance = 0
far_anim = nil
far_victim = nil
far_distance = 0
meet_on_talking = false
use = true
[meet@no_sound]:meet@base
close_snd_hello = nil
[meet@guide]:meet@base
close_anim = talk_default
close_distance = 3
close_victim = actor

View File

@ -0,0 +1,209 @@
[section@squad]
target@1 = {!has_task(duty_girl_hunting_chimera)} nil, {+duty_girl_hunting_chimera_dead} nil, {-duty_girl_hunting_chimera_move} gar_smart_terrain_6_3, gar_smart_terrain_2_4
target@2 = {=has_task(duty_girl_monolith_elite) !check_task_stage(duty_girl_monolith_elite:3)} mil_smart_terrain_4_5
target@4 = {=has_task(duty_girl_capture_the_brirge) !check_task_stage(duty_girl_capture_the_brirge:3)} red_smart_terrain_5_5
target@z = {=between_time(6:18)} bar_zastava_2, {=between_time(19:23)} bar_dolg_general, bar_dolg_bunker
[section@logic]
logic@idle
logic@drink
logic@guard
logic@surge
logic@sleep
logic@hunt_chimera
logic@monolith_elite
logic@capture_the_brirge
[beh@base]
dont_keep_items = true
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
combat_ignore_keep_when_attacked = true
target = waypoint
path_end = loop
walk_dist = 0
jog_dist = 0
run_anim = patrol
meet = meet@base
danger_ignore = true
[beh@animpoint]:beh@base
target = %=animpoint()% nil
[beh@rush_at_10]
jog_dist = 10
jog_anim = rush
[logic@base]
post_combat_time = 0,0
level_spot = special
net_spawn = pt1
[logic@idle]:logic@base
suitable = true
active = beh@idle
prior = 0
combat_type = camper
[logic@guard]:logic@base
suitable = {=npc_on_level(l05_bar) =between_time(6:18)} true
active = beh@guard
prior = 100
[logic@drink]:logic@base
suitable = {=npc_on_level(l05_bar) =between_time(19:23)} true
active = beh@drink
prior = 100
[logic@surge]:logic@base
suitable = {=npc_on_level(l05_bar) =surge_started} true
active = {=between_time(6:18)} beh@surge_1, beh@surge_2
prior = 400
[logic@sleep]:logic@base
suitable = {=npc_on_level(l05_bar) =between_time(0:5)} true
active = beh@sleep
prior = 500
[beh@idle]:beh@base
target = %=script(xr_logic_ex:state_idle:guard)% nil
meet = meet@idle
[beh@guard]:beh@animpoint,beh@rush_at_10
pt1 = 999999,guard | pos:85.4,0.0,137.9 dir:90
meet = meet@idle
[beh@drink]:beh@animpoint,beh@rush_at_10
pt1 = 999999,animpoint_sit_low@random | pos:207.9,0.00,85.4 dir:135 animpoint:pos
[beh@surge_1]:beh@animpoint
pt1 = 999999,sit_ass | pos:208.6,-0.62,114.1 dir:-90
run_anim = rush
[beh@surge_2]:beh@animpoint
pt1 = 999999,sit_ass | pos:95.2,0.091,103.6 dir:90
run_anim = rush
[beh@sleep]:beh@animpoint,beh@rush_at_10
pt1 = 999999,sleep | pos:218.4,-5.13,123.2 dir:0
meet = meet@sleep
[logic@hunt_chimera]:logic@base
suitable = {=npc_on_level(l02_garbage) =has_task(duty_girl_hunting_chimera) -duty_girl_hunting_chimera_dead} true
active = {-duty_girl_hunting_chimera_move} beh@hunt_chimera_1, beh@hunt_chimera_2
prior = 100
combat_type = camper
[beh@hunt_chimera_1]:beh@animpoint,beh@rush_at_10
pt1 = 999999,use_pda | pos:102.9,3.64,161.0 dir:45
on_info1 = {+duty_girl_hunting_chimera_move !npc_talking} beh@hunt_chimera_2
[beh@hunt_chimera_2]:beh@animpoint
pt1 = 999999,hide_na | pos:-235.2,0.42,11.2 dir:90
run_anim = {=dist_to_beh(30)} sneak_run, {=dist_to_beh(60)} raid, rush
meet = no_meet
on_info1 = {-duty_girl_hunting_chimera_fight -duty_girl_hunting_chimera_hunt_1 =check_time_speech() =reach_beh()} %=speech(duty_girl_hunting_chimera_hunt_1:5) +duty_girl_hunting_chimera_hunt_1%
on_info2 = {-duty_girl_hunting_chimera_fight -duty_girl_hunting_chimera_hunt_2 =check_time_speech() =reach_beh()} %=speech(duty_girl_hunting_chimera_hunt_2:5) +duty_girl_hunting_chimera_hunt_2%
on_info3 = {-duty_girl_hunting_chimera_fight -duty_girl_hunting_chimera_hunt_3 =check_time_speech() =reach_beh()} %=speech(duty_girl_hunting_chimera_hunt_3:5) +duty_girl_hunting_chimera_hunt_3%
[logic@monolith_elite]:logic@base
suitable = {=npc_on_level(l07_military) =has_task(duty_girl_monolith_elite) -duty_girl_monolith_elite_dead} true
active = {-duty_girl_monolith_elite_join} beh@monolith_elite_1, {-duty_girl_monolith_elite_move} beh@monolith_elite_2, beh@monolith_elite_3
prior = 100
combat_type = camper
[beh@monolith_elite_1]:beh@animpoint,beh@rush_at_10
pt1 = 999999,guard_na | pos:-92.4,-20.66,219.8 dir:0
on_info1 = {+duty_girl_monolith_elite_join !npc_talking !has_enemy} beh@monolith_elite_2
on_info2 = {+duty_girl_monolith_elite_move} beh@monolith_elite_3
combat_ignore_cond = {=enemy_squad(squad_duty_girl_monolith_elite)} true, {!fighting_dist_le(40)} true
enemy_ignore_cond = {=enemy_squad(squad_duty_girl_monolith_elite)} true, {!fighting_dist_le(40)} true
[beh@monolith_elite_2]:beh@animpoint,beh@rush_at_10
pt1 = 999999,guard_na | pos:-92.4,-20.66,219.8 dir:0
meet = no_meet
on_info1 = {-duty_girl_monolith_elite_move -duty_girl_monolith_elite_move_1 =check_time_speech() =reach_beh()} %=speech(duty_girl_monolith_elite_move_1:5) +duty_girl_monolith_elite_move_1%
on_info2 = {-duty_girl_monolith_elite_move -duty_girl_monolith_elite_move_2 =check_time_speech() =reach_beh()} %=speech(duty_girl_monolith_elite_move_2:5) +duty_girl_monolith_elite_move_2%
on_info3 = {-duty_girl_monolith_elite_move -duty_girl_monolith_elite_move_3 =check_time_speech() =reach_beh()} %=speech(duty_girl_monolith_elite_move_3:5) +duty_girl_monolith_elite_move_3%
on_info4 = {-duty_girl_monolith_elite_move +duty_girl_monolith_elite_move_3} %+duty_girl_monolith_elite_move%
on_info5 = {+duty_girl_monolith_elite_move} beh@monolith_elite_3
combat_ignore_cond = true
enemy_ignore_cond = true
[beh@monolith_elite_3]:beh@animpoint
pt1 = 999999,hide | pos:-56.0,-19.94,354.9 dir:45
run_anim = assault
meet = no_meet
[logic@capture_the_brirge]:logic@base
suitable = {=npc_on_level(l10_red_forest) =has_task(duty_girl_capture_the_brirge) -duty_girl_capture_the_brirge_dead} true
active = {-duty_girl_capture_the_brirge_join} beh@capture_the_brirge_1, {-duty_girl_capture_the_brirge_move} beh@capture_the_brirge_2, beh@capture_the_brirge_3
prior = 100
combat_type = camper
[beh@capture_the_brirge_1]:beh@animpoint,beh@rush_at_10
pt1 = 999999,guard_na | pos:-15.4,-0.85,-328.3 dir:-90
on_info1 = {+duty_girl_capture_the_brirge_join !npc_talking !has_enemy} beh@capture_the_brirge_2
on_info2 = {+duty_girl_capture_the_brirge_move} beh@capture_the_brirge_3
combat_ignore_cond = {=enemy_squad(squad_duty_girl_capture_the_brirge)} true
enemy_ignore_cond = {=enemy_squad(squad_duty_girl_capture_the_brirge)} true
[beh@capture_the_brirge_2]:beh@animpoint,beh@rush_at_10
pt1 = 999999,guard_na | pos:-15.4,-0.85,-328.3 dir:-90
meet = no_meet
on_info1 = {-duty_girl_capture_the_brirge_move -duty_girl_capture_the_brirge_move_1 =check_time_speech() =reach_beh()} %=speech(duty_girl_capture_the_brirge_move_1:5) +duty_girl_capture_the_brirge_move_1%
on_info2 = {-duty_girl_capture_the_brirge_move -duty_girl_capture_the_brirge_move_2 =check_time_speech() =reach_beh()} %=speech(duty_girl_capture_the_brirge_move_2:5) +duty_girl_capture_the_brirge_move_2%
on_info3 = {-duty_girl_capture_the_brirge_move -duty_girl_capture_the_brirge_move_3 =check_time_speech() =reach_beh()} %=speech(duty_girl_capture_the_brirge_move_3:5) +duty_girl_capture_the_brirge_move_3%
on_info4 = {-duty_girl_capture_the_brirge_move +duty_girl_capture_the_brirge_move_3} %+duty_girl_capture_the_brirge_move%
on_info5 = {+duty_girl_capture_the_brirge_move} beh@capture_the_brirge_3
combat_ignore_cond = true
enemy_ignore_cond = true
[beh@capture_the_brirge_3]:beh@animpoint
pt1 = 999999,hide | pos:-106.4,0.46,-291.2 dir:-30
run_anim = assault
meet = no_meet
[meet@base]
close_snd_hello = meet_hello
close_snd_bye = nil
close_anim = nil
close_victim = nil
close_distance = 0
far_anim = nil
far_victim = nil
far_distance = 0
meet_on_talking = false
use = true
[meet@idle]:meet@base
close_anim = guard_na
close_distance = 3
close_victim = actor
[meet@sleep]:meet@base
close_snd_hello = nil
close_anim = talk_default
close_victim = actor

View File

@ -0,0 +1,341 @@
[section@squad]
target@base = {=check_squad_section(squad_duty_girl_capture_the_brirge_mono)} red_smart_terrain_bridge, red_smart_terrain_5_5
condlist = {+duty_girl_capture_the_brirge_dead !actor_on_level(l10_red_forest)} %=script(task_duty_girl:capture_the_brirge_spawn_outpost) =squad_self_release()%
[section@logic]
logic@monolith_frontline_1
logic@monolith_frontline_2
logic@monolith_frontline_3
logic@monolith_frontline_4
logic@monolith_frontline_5
logic@monolith_frontline_6
logic@monolith_frontline_7
logic@monolith_frontline_8
logic@monolith_frontline_9
logic@monolith_frontline_10
logic@monolith_1
logic@monolith_2
logic@monolith_3
logic@monolith_4
logic@monolith_5
logic@monolith_6
logic@monolith_7
logic@monolith_8
logic@monolith_9
logic@monolith_10
logic@duty_1
logic@duty_2
logic@duty_3
logic@duty_4
logic@duty_5
logic@duty_6
logic@duty_7
logic@duty_8
logic@duty_9
logic@duty_combat_1
logic@duty_combat_2
logic@duty_combat_3
logic@duty_combat_4
logic@duty_combat_5
logic@duty_combat_6
logic@duty_combat_7
logic@duty_combat_8
logic@duty_combat_9
[logic@base]
post_combat_time = 0,0
net_spawn = pt1
[logic@combat_camper]
combat_type = camper
[logic@monolith]:logic@base
suitable = {=check_npc_name(sim_default_monolith)} true
[logic@monolith_frontline]:logic@monolith
prior = 100
[logic@monolith_frontline_1]:logic@monolith_frontline,logic@combat_camper
active = beh@monolith_frontline_1
[logic@monolith_frontline_2]:logic@monolith_frontline
active = beh@monolith_frontline_2
[logic@monolith_frontline_3]:logic@monolith_frontline,logic@combat_camper
active = beh@monolith_frontline_3
[logic@monolith_frontline_4]:logic@monolith_frontline
active = beh@monolith_frontline_4
[logic@monolith_frontline_5]:logic@monolith_frontline
active = beh@monolith_frontline_5
[logic@monolith_frontline_6]:logic@monolith_frontline,logic@combat_camper
active = beh@monolith_frontline_6
[logic@monolith_frontline_7]:logic@monolith_frontline
active = beh@monolith_frontline_7
[logic@monolith_frontline_8]:logic@monolith_frontline
active = beh@monolith_frontline_8
prior = 50
[logic@monolith_frontline_9]:logic@monolith_frontline
active = beh@monolith_frontline_9
prior = 50
[logic@monolith_frontline_10]:logic@monolith_frontline
active = beh@monolith_frontline_10
prior = 50
[logic@monolith_1]:logic@monolith
active = beh@monolith_1
[logic@monolith_2]:logic@monolith
active = beh@monolith_2
[logic@monolith_3]:logic@monolith
active = beh@monolith_3
[logic@monolith_4]:logic@monolith
active = beh@monolith_4
[logic@monolith_5]:logic@monolith
active = beh@monolith_5
[logic@monolith_6]:logic@monolith
active = beh@monolith_6
[logic@monolith_7]:logic@monolith
active = beh@monolith_7
[logic@monolith_8]:logic@monolith
active = beh@monolith_8
[logic@monolith_9]:logic@monolith
active = beh@monolith_9
[logic@monolith_10]:logic@monolith
active = beh@monolith_10
[logic@duty]:logic@base,logic@combat_camper
suitable = {-duty_girl_capture_the_brirge_move =check_npc_name(sim_default_duty)} true
[logic@lone]:logic@base,logic@combat_camper
suitable = {-duty_girl_capture_the_brirge_move =check_npc_name(sim_default_stal)} true
[logic@duty_1]:logic@duty
active = beh@duty_1
[logic@duty_2]:logic@duty
active = beh@duty_2
[logic@duty_3]:logic@duty
active = beh@duty_3
[logic@duty_4]:logic@duty
active = beh@duty_4
[logic@duty_5]:logic@duty
active = beh@duty_5
[logic@duty_6]:logic@duty
active = beh@duty_6
[logic@duty_7]:logic@lone
active = beh@duty_7
[logic@duty_8]:logic@lone
active = beh@duty_8
[logic@duty_9]:logic@lone
active = beh@duty_9
[logic@duty_combat]:logic@base
suitable = {+duty_girl_capture_the_brirge_move =check_npc_name(sim_default_duty)} true
[logic@lone_combat]:logic@base
suitable = {+duty_girl_capture_the_brirge_move =check_npc_name(sim_default_stal)} true
[logic@duty_combat_1]:logic@duty_combat
active = {-duty_girl_capture_the_brirge_dead} beh@duty_combat_1, beh@duty_guard_1
[logic@duty_combat_2]:logic@duty_combat
active = {-duty_girl_capture_the_brirge_dead} beh@duty_combat_2, beh@duty_guard_2
[logic@duty_combat_3]:logic@duty_combat
active = {-duty_girl_capture_the_brirge_dead} beh@duty_combat_3, beh@duty_guard_3
[logic@duty_combat_4]:logic@duty_combat
active = {-duty_girl_capture_the_brirge_dead} beh@duty_combat_4, beh@duty_guard_4
[logic@duty_combat_5]:logic@duty_combat
active = {-duty_girl_capture_the_brirge_dead} beh@duty_combat_5, beh@duty_guard_5
[logic@duty_combat_6]:logic@duty_combat
active = {-duty_girl_capture_the_brirge_dead} beh@duty_combat_6, beh@duty_guard_6
[logic@duty_combat_7]:logic@lone_combat
active = {-duty_girl_capture_the_brirge_dead} beh@duty_combat_7, beh@duty_guard_7
[logic@duty_combat_8]:logic@lone_combat
active = {-duty_girl_capture_the_brirge_dead} beh@duty_combat_8, beh@duty_guard_8
[logic@duty_combat_9]:logic@lone_combat
active = {-duty_girl_capture_the_brirge_dead} beh@duty_combat_9, beh@duty_guard_9
;==================================================
[beh@base]
dont_keep_items = true
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
combat_ignore_keep_when_attacked = true
target = waypoint
path_end = loop
walk_dist = 0
jog_dist = 0
run_anim = patrol
meet = no_meet
before_hit = task_duty_girl@capture_the_brirge_hit
danger_ignore = true
[beh@animpoint]:beh@base
target = %=animpoint()% nil
[beh@combat_camper_stand]
combat_camper_state_fire = threat_fire
combat_camper_state_look = threat
combat_ignore_cond = {!reach_beh()} true, {-duty_girl_capture_the_brirge_move =enemy_squad(squad_duty_girl_capture_the_brirge)} true
[beh@monolith_frontline]:beh@animpoint
run_anim = assault
combat_ignore_cond = {-duty_girl_capture_the_brirge_move =enemy_squad(squad_duty_girl_capture_the_brirge)} true
enemy_ignore_cond = {-duty_girl_capture_the_brirge_move =enemy_squad(squad_duty_girl_capture_the_brirge)} true
;combat_ignore_cond = true
;enemy_ignore_cond = true
[beh@monolith_frontline_1]:beh@monolith_frontline,beh@combat_camper_stand
pt1 = 999999,guard | pos:-101.5,1.75,-249.2 dir:180
[beh@monolith_frontline_2]:beh@monolith_frontline
pt1 = 999999,hide | pos:-102.9,2.73,-249.2 dir:180
[beh@monolith_frontline_3]:beh@monolith_frontline,beh@combat_camper_stand
pt1 = 999999,guard | pos:-121.8,4.72,-261.8 dir:-150
[beh@monolith_frontline_4]:beh@monolith_frontline
pt1 = 999999,hide | pos:-113.4,4.72,-261.8 dir:-150
[beh@monolith_frontline_5]:beh@monolith_frontline
pt1 = 999999,guard | pos:-114.1,0.10,-265.3 dir:-150
[beh@monolith_frontline_6]:beh@monolith_frontline,beh@combat_camper_stand
pt1 = 999999,guard | pos:-110.6,-0.40,-248.5 dir:-150
[beh@monolith_frontline_7]:beh@monolith_frontline
pt1 = 999999,guard | pos:-107.8,-0.30,-242.9 dir:-150
[beh@monolith_frontline_8]:beh@monolith_frontline
pt1 = 999999,hide | pos:-111.3,-0.12,-259.7 dir:-150
[beh@monolith_frontline_9]:beh@monolith_frontline
pt1 = 999999,hide | pos:-113.4,-0.02,-261.8 dir:-150
[beh@monolith_frontline_10]:beh@monolith_frontline
pt1 = 999999,hide | pos:-114.8,-0.19,-251.3 dir:-150
[beh@monolith]:beh@animpoint
run_anim = assault
combat_ignore_cond = {!fighting_dist_le(40)} true, {-duty_girl_capture_the_brirge_move =enemy_squad(squad_duty_girl_capture_the_brirge)} true
enemy_ignore_cond = {!fighting_dist_le(40)} true, {-duty_girl_capture_the_brirge_move =enemy_squad(squad_duty_girl_capture_the_brirge)} true
;combat_ignore_cond = true
;enemy_ignore_cond = true
[beh@monolith_1]:beh@monolith
pt1 = 999999,hide | pos:-98.0,0.00,-235.2 dir:180
[beh@monolith_2]:beh@monolith
pt1 = 999999,hide | pos:-99.4,0.00,-233.8 dir:180
[beh@monolith_3]:beh@monolith
pt1 = 999999,hide | pos:-100.1,0.00,-235.9 dir:180
[beh@monolith_4]:beh@monolith
pt1 = 999999,hide | pos:-101.5,0.00,-236.6 dir:180
[beh@monolith_5]:beh@monolith
pt1 = 999999,hide | pos:-120.4,-0.64,-224.7 dir:180
[beh@monolith_6]:beh@monolith
pt1 = 999999,hide | pos:-120.4,-0.64,-222.6 dir:180
[beh@monolith_7]:beh@monolith
pt1 = 999999,hide | pos:-116.9,-0.64,-225.4 dir:180
[beh@monolith_8]:beh@monolith
pt1 = 999999,hide | pos:-112.7,-0.64,-217.0 dir:180
[beh@monolith_9]:beh@monolith
pt1 = 999999,hide | pos:-114.8,-0.64,-223.3 dir:180
[beh@monolith_10]:beh@monolith
pt1 = 999999,hide | pos:-116.2,-0.64,-220.5 dir:180
[beh@duty]:beh@animpoint
run_anim = rush
combat_ignore_cond = {=is_enemy_actor()} true, {!dist_to_beh(30)} true
[beh@duty_1]:beh@duty
pt1 = 999999,salut | pos:-13.3,-0.80,-326.2 dir:90
on_info = {+duty_girl_capture_the_brirge_move} beh@duty_combat_1
[beh@duty_2]:beh@duty
pt1 = 999999,salut | pos:-13.3,-0.80,-327.6 dir:90
on_info = {+duty_girl_capture_the_brirge_move} beh@duty_combat_2
[beh@duty_3]:beh@duty
pt1 = 999999,salut | pos:-13.3,-0.80,-329.0 dir:90
on_info = {+duty_girl_capture_the_brirge_move} beh@duty_combat_3
[beh@duty_4]:beh@duty
pt1 = 999999,salut | pos:-13.3,-0.80,-330.4 dir:90
on_info = {+duty_girl_capture_the_brirge_move} beh@duty_combat_4
[beh@duty_5]:beh@duty
pt1 = 999999,hide | pos:-9.1,-1.00,-320.6 dir:0
on_info = {+duty_girl_capture_the_brirge_move} beh@duty_combat_5
[beh@duty_6]:beh@duty
pt1 = 999999,hide | pos:-11.9,-1.00,-321.3 dir:30
on_info = {+duty_girl_capture_the_brirge_move} beh@duty_combat_6
[beh@duty_7]:beh@duty
pt1 = 999999,hide | pos:-11.2,3.00,-323.4 dir:30
on_info = {+duty_girl_capture_the_brirge_move} beh@duty_combat_7
[beh@duty_8]:beh@duty
pt1 = 999999,hide | pos:-9.8,-0.98,-333.9 dir:180
on_info = {+duty_girl_capture_the_brirge_move} beh@duty_combat_8
[beh@duty_9]:beh@duty
pt1 = 999999,hide | pos:-19.6,-0.82,-326.9 dir:30
on_info = {+duty_girl_capture_the_brirge_move} beh@duty_combat_9
[beh@duty_combat]:beh@animpoint
combat_ignore_cond = {=is_enemy_actor()} true
run_anim = assault
[beh@duty_combat_1]:beh@duty_combat
pt1 = 999999,hide | pos:-109.9,0.38,-293.3 dir:-30
on_info = {+duty_girl_capture_the_brirge_dead} beh@duty_guard_1
[beh@duty_combat_2]:beh@duty_combat
pt1 = 999999,hide | pos:-108.5,0.40,-292.6 dir:-30
on_info = {+duty_girl_capture_the_brirge_dead} beh@duty_guard_2
[beh@duty_combat_3]:beh@duty_combat
pt1 = 999999,hide | pos:-112.7,-0.22,-287.7 dir:-30
on_info = {+duty_girl_capture_the_brirge_dead} beh@duty_guard_3
[beh@duty_combat_4]:beh@duty_combat
pt1 = 999999,hide | pos:-102.2,0.25,-284.2 dir:-30
on_info = {+duty_girl_capture_the_brirge_dead} beh@duty_guard_4
[beh@duty_combat_5]:beh@duty_combat
pt1 = 999999,hide | pos:-95.2,2.85,-303.1 dir:-30
on_info = {+duty_girl_capture_the_brirge_dead} beh@duty_guard_5
[beh@duty_combat_6]:beh@duty_combat
pt1 = 999999,hide | pos:-84.7,2.27,-294.0 dir:0
on_info = {+duty_girl_capture_the_brirge_dead} beh@duty_guard_6
[beh@duty_combat_7]:beh@duty_combat
pt1 = 999999,hide | pos:-84.0,2.48,-292.6 dir:30
on_info = {+duty_girl_capture_the_brirge_dead} beh@duty_guard_7
[beh@duty_combat_8]:beh@duty_combat
pt1 = 999999,hide | pos:-84.0,2.24,-284.9 dir:30
on_info = {+duty_girl_capture_the_brirge_dead} beh@duty_guard_8
[beh@duty_combat_9]:beh@duty_combat
pt1 = 999999,hide | pos:-91.7,0.12,-271.6 dir:30
on_info = {+duty_girl_capture_the_brirge_dead} beh@duty_guard_9
[beh@duty_guard]:beh@animpoint
combat_ignore_cond = {=is_enemy_actor()} true
[beh@duty_guard_1]:beh@duty_guard
pt1 = 999999,sit_ass | pos:-104.3,0.30,-269.5 look:-105.7,0.30,-270.9
[beh@duty_guard_2]:beh@duty_guard
pt1 = 999999,sit_ass | pos:-104.3,0.30,-270.9 look:-105.7,0.30,-270.9
[beh@duty_guard_3]:beh@duty_guard
pt1 = 999999,sit_ass | pos:-104.3,0.30,-272.3 look:-105.7,0.30,-270.9
[beh@duty_guard_4]:beh@duty_guard
pt1 = 999999,sit_ass | pos:-107.1,0.30,-268.8 look:-105.7,0.30,-270.9
[beh@duty_guard_5]:beh@duty_guard
pt1 = 999999,sit_ass | pos:-107.8,0.30,-270.2 look:-105.7,0.30,-270.9
[beh@duty_guard_6]:beh@duty_guard
pt1 = 999999,sit_ass | pos:-107.8,0.30,-271.6 look:-105.7,0.30,-270.9
[beh@duty_guard_7]:beh@duty_guard
pt1 = 999999,sit_ass | pos:-107.1,0.30,-273.0 look:-105.7,0.30,-270.9
[beh@duty_guard_8]:beh@duty_guard
pt1 = 999999,sit_ass | pos:-105.7,0.30,-273.7 look:-105.7,0.30,-270.9
[beh@duty_guard_9]:beh@duty_guard
pt1 = 999999,sit_ass | pos:-105.0,0.30,-268.8 look:-105.7,0.30,-270.9

View File

@ -0,0 +1,34 @@
[section@squad]
target@base = gar_smart_terrain_2_4
[section@logic]
logic@general
[logic@base]
net_spawn = pt1
[logic@general]:logic@base
active = mob_home@general
;==================================================
[mob_home@base]
target = %=mutant_path%
before_hit = task_duty_girl@hunting_chimera_hit
combat_ignore_cond = {+duty_girl_hunting_chimera_fight} false, {=fighting_dist_le(20)} false, true
enemy_ignore_cond = {+duty_girl_hunting_chimera_fight} false, {=fighting_dist_le(20)} false, true
on_info1 = {-duty_girl_hunting_chimera_fight =see_actor() =dist_to_actor_le(20)} %+duty_girl_hunting_chimera_fight%
on_sound1 = actor|WPN_shoot|30|0| {-duty_girl_hunting_chimera_fight} %+duty_girl_hunting_chimera_fight%
on_sound2 = actor|WPN_hit|10|0| {-duty_girl_hunting_chimera_fight} %+duty_girl_hunting_chimera_fight%
on_sound3 = actor|WPN_empty|10|0| {-duty_girl_hunting_chimera_fight} %+duty_girl_hunting_chimera_fight%
on_sound4 = actor|WPN_reload|10|0| {-duty_girl_hunting_chimera_fight} %+duty_girl_hunting_chimera_fight%
[mob_home@general]:mob_home@base
pt1 = pos:-271.6,0.42,23.8 dir:0
move_animation = run
wait_animation = sleep
on_info = {!dist_to_beh(100)} mob_home@return
[mob_home@return]:mob_home@base
pt1 = pos:-271.6,0.42,23.8 dir:0
on_info = {=dist_to_beh(20)} mob_home@general
combat_ignore_cond = true

View File

@ -0,0 +1,196 @@
[section@squad]
target@base = {=check_squad_section(squad_duty_girl_monolith_elite_mono)} mil_smart_terrain_2_6, mil_smart_terrain_4_5
condlist = {+duty_girl_monolith_elite_dead !actor_on_level(l07_military)} %=squad_self_release()%
[section@logic]
logic@monolith_1
logic@monolith_2
logic@monolith_3
logic@monolith_4
logic@monolith_5
logic@monolith_6
logic@monolith_7
logic@monolith_8
logic@monolith_9
logic@duty_1
logic@duty_2
logic@duty_3
logic@duty_4
logic@duty_5
logic@duty_6
logic@duty_combat_1
logic@duty_combat_2
logic@duty_combat_3
logic@duty_combat_4
logic@duty_combat_5
logic@duty_combat_6
[logic@base]
post_combat_time = 0,0
net_spawn = pt1
[logic@combat_camper]
combat_type = camper
[logic@monolith]:logic@base
suitable = {=check_npc_name(sim_default_monolith)} true
[logic@monolith_1]:logic@monolith,logic@combat_camper
active = beh@monolith_1
[logic@monolith_2]:logic@monolith,logic@combat_camper
active = beh@monolith_2
[logic@monolith_3]:logic@monolith,logic@combat_camper
active = beh@monolith_3
[logic@monolith_4]:logic@monolith
active = beh@monolith_4
[logic@monolith_5]:logic@monolith
active = beh@monolith_5
[logic@monolith_6]:logic@monolith
active = beh@monolith_6
[logic@monolith_7]:logic@monolith
active = beh@monolith_7
[logic@monolith_8]:logic@monolith
active = beh@monolith_8
[logic@monolith_9]:logic@monolith
active = beh@monolith_9
;==================================================
[beh@base]
dont_keep_items = true
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false
combat_ignore_keep_when_attacked = true
target = waypoint
path_end = loop
walk_dist = 0
jog_dist = 0
run_anim = patrol
meet = no_meet
[beh@animpoint]:beh@base
target = %=animpoint()% nil
[beh@monolith]:beh@animpoint
before_hit = task_duty_girl@monolith_elite_hit
run_anim = rush
combat_ignore_cond = {-duty_girl_monolith_elite_move =enemy_squad(squad_duty_girl_monolith_elite)} true
enemy_ignore_cond = {-duty_girl_monolith_elite_move =enemy_squad(squad_duty_girl_monolith_elite)} true
[beh@monolith_1]:beh@monolith
pt1 = 999999,hide | pos:-58.8,-12.53,396.9 dir:180
[beh@monolith_2]:beh@monolith
pt1 = 999999,hide | pos:-80.5,-8.89,404.6 dir:180
[beh@monolith_3]:beh@monolith
pt1 = 999999,hide | pos:-123.2,-14.45,380.1 dir:180
[beh@monolith_4]:beh@monolith
pt1 = 999999,hide | pos:-85.4,-10.55,391.3 dir:180
[beh@monolith_5]:beh@monolith
pt1 = 999999,hide | pos:-87.5,-10.71,391.3 dir:180
[beh@monolith_6]:beh@monolith
pt1 = 999999,hide | pos:-86.1,-10.50,392.0 dir:180
[beh@monolith_7]:beh@monolith
pt1 = 999999,hide | pos:-72.8,-13.48,387.8 dir:180
[beh@monolith_8]:beh@monolith
pt1 = 999999,hide | pos:-69.3,-15.30,387.1 dir:180
[beh@monolith_9]:beh@monolith
pt1 = 999999,hide | pos:-71.4,-14.19,387.8 dir:180
[logic@duty]:logic@base,logic@combat_camper
suitable = {-duty_girl_monolith_elite_move =check_npc_name(sim_default_duty)} true
[logic@duty_1]:logic@duty
active = beh@duty_1
[logic@duty_2]:logic@duty
active = beh@duty_2
[logic@duty_3]:logic@duty
active = beh@duty_3
[logic@duty_4]:logic@duty
active = beh@duty_4
[logic@duty_5]:logic@duty
active = beh@duty_5
[logic@duty_6]:logic@duty
active = beh@duty_6
[logic@duty_combat]:logic@base
suitable = {+duty_girl_monolith_elite_move =check_npc_name(sim_default_duty)} true
[logic@duty_combat_1]:logic@duty_combat
active = {-duty_girl_monolith_elite_dead} beh@duty_combat_1, beh@duty_guard_1
[logic@duty_combat_2]:logic@duty_combat
active = {-duty_girl_monolith_elite_dead} beh@duty_combat_2, beh@duty_guard_2
[logic@duty_combat_3]:logic@duty_combat
active = {-duty_girl_monolith_elite_dead} beh@duty_combat_3, beh@duty_guard_3
[logic@duty_combat_4]:logic@duty_combat
active = {-duty_girl_monolith_elite_dead} beh@duty_combat_4, beh@duty_guard_4
[logic@duty_combat_5]:logic@duty_combat
active = {-duty_girl_monolith_elite_dead} beh@duty_combat_5, beh@duty_guard_5
[logic@duty_combat_6]:logic@duty_combat
active = {-duty_girl_monolith_elite_dead} beh@duty_combat_6, beh@duty_guard_6
[beh@duty]:beh@animpoint
before_hit = task_duty_girl@monolith_elite_hit
run_anim = rush
combat_ignore_cond = {+duty_girl_monolith_elite_move} true
enemy_ignore_cond = {+duty_girl_monolith_elite_move} true
[beh@duty_1]:beh@duty
pt1 = 999999,salut | pos:-93.8,-20.71,221.2 dir:180
[beh@duty_2]:beh@duty
pt1 = 999999,salut | pos:-92.4,-20.58,221.2 dir:180
[beh@duty_3]:beh@duty
pt1 = 999999,salut | pos:-91.0,-20.44,221.2 dir:180
[beh@duty_4]:beh@duty
pt1 = 999999,hide | pos:-97.3,-20.09,226.1 dir:0
[beh@duty_5]:beh@duty
pt1 = 999999,hide | pos:-87.5,-19.15,223.3 dir:0
[beh@duty_6]:beh@duty
pt1 = 999999,hide | pos:-90.3,-20.72,214.9 dir:180
[beh@duty_combat]:beh@animpoint
before_hit = task_duty_girl@monolith_elite_hit
run_anim = assault
[beh@duty_combat_1]:beh@duty_combat
pt1 = 999999,hide | pos:-105.0,-9.60,327.6 dir:0
on_info = {+duty_girl_monolith_elite_dead} beh@duty_guard_1
[beh@duty_combat_2]:beh@duty_combat
pt1 = 999999,hide | pos:-100.1,-10.38,329.0 dir:0
on_info = {+duty_girl_monolith_elite_dead} beh@duty_guard_2
[beh@duty_combat_3]:beh@duty_combat
pt1 = 999999,hide | pos:-83.3,-15.29,329.0 dir:0
on_info = {+duty_girl_monolith_elite_dead} beh@duty_guard_3
[beh@duty_combat_4]:beh@duty_combat
pt1 = 999999,hide | pos:-46.9,-16.30,340.9 dir:0
on_info = {+duty_girl_monolith_elite_dead} beh@duty_guard_4
[beh@duty_combat_5]:beh@duty_combat
pt1 = 999999,hide | pos:-52.5,-17.41,322.7 dir:0
on_info = {+duty_girl_monolith_elite_dead} beh@duty_guard_5
[beh@duty_combat_6]:beh@duty_combat
pt1 = 999999,hide | pos:-37.8,-13.05,332.5 dir:0
on_info = {+duty_girl_monolith_elite_dead} beh@duty_guard_6
[beh@duty_guard_1]:beh@monolith_1
[beh@duty_guard_2]:beh@monolith_2
[beh@duty_guard_3]:beh@monolith_3
[beh@duty_guard_4]:beh@monolith_4
[beh@duty_guard_5]:beh@monolith_5
[beh@duty_guard_6]:beh@monolith_6

View File

@ -0,0 +1,279 @@
<?xml version="1.0" encoding="windows-1251"?>
<string_table>
<string id="stalker_duty_girl_name">
<text>Anna</text>
</string>
<string id="duty_girl_companion_join_0">
<text>I need an extra hand in the next mission. Can you help me?</text>
</string>
<string id="duty_girl_companion_join_1">
<text>Sure. Lead the way.</text>
</string>
<string id="duty_girl_companion_join_2">
<text>Aren't you having a good time with her? Sorry, I'm busy now.</text>
</string>
<string id="duty_girl_companion_leave_0">
<text>I think we should part ways for now.</text>
</string>
<string id="duty_girl_companion_leave_1">
<text>Are you sure?</text>
</string>
<string id="duty_girl_companion_leave_2">
<text>Yes. There is something I must deal with alone.</text>
</string>
<string id="duty_girl_companion_leave_3">
<text>Nevermind. One second thought, two would be better.</text>
</string>
<string id="duty_girl_companion_leave_4">
<text>Alright. Good hunting. I will return to Rostok. Remember to drop by from time to time.</text>
</string>
<string id="duty_girl_actor_ask_companion_0">
<text>We have different enemies and friends. Is there any way for us to hunt together?</text>
</string>
<string id="duty_girl_actor_ask_companion_1_lone">
<text>My presence can convince the Ukrainian troops to leave you alone. But don't try anything stupid. I won't help if you piss them off. In return, make sure anarchists don't give me trouble. Then I think we can get along.</text>
</string>
<string id="duty_girl_actor_ask_companion_1_csky">
<text>My presence can convince the Ukrainian troops to leave you alone. But don't try anything stupid. I won't help if you piss them off. In return, make sure anarchists and mercenaries don't give me trouble. Then I think we can get along.</text>
</string>
<string id="duty_girl_actor_ask_companion_1_army">
<text>I can convince free stalkers and Clear Sky members that you're not a threat. You better act accordingly too. I won't help if you piss them off. Then I think we're fine to get along.</text>
</string>
<string id="duty_girl_actor_ask_companion_1_ecol">
<text>You don't have many enemies, ehh? I think we can get along if you can convince anarchists and mercenaries to not attack me.</text>
</string>
<string id="duty_girl_companion_random_chat_1">
<text>Better stock up more ammo when we can.</text>
</string>
<string id="duty_girl_companion_random_chat_2">
<text>You know, you could leave the Zone. Settle down, start over, marry a girl...</text>
</string>
<string id="duty_girl_companion_random_chat_special_1">
<text>You don't look good. Better treat your wound soon.</text>
</string>
<string id="duty_girl_companion_random_chat_special_2">
<text>You have sight of radiation. Are you okay?</text>
</string>
<string id="duty_girl_companion_random_chat_special_3">
<text>A new day, and we are still alive. That's great.</text>
</string>
<string id="duty_girl_companion_random_chat_special_4">
<text>It's morning. Time to kick some mutant's asses.</text>
</string>
<string id="duty_girl_companion_random_chat_special_5">
<text>Morning. I guess those freedoms are still dreaming of bloodsuckers.</text>
</string>
<string id="duty_girl_companion_random_chat_special_6">
<text>Night is comming. The Zone is even more dangerous now but coming along is opportunity.</text>
</string>
<string id="duty_girl_companion_random_chat_special_7">
<text>Night falls. Should we rest for while?</text>
</string>
<string id="duty_girl_companion_random_chat_special_8">
<text>How many mutants you have killed today?</text>
</string>
<string id="duty_girl_chat_0">
<text>I want to ask you something.</text>
</string>
<string id="duty_girl_chat_1">
<text>Yes?</text>
</string>
<string id="duty_girl_chat_2">
<text>Nevermind.</text>
</string>
<string id="duty_girl_chat_hunting_chimera_0">
<text>You were eager to kill the chimera. It was because of your father?</text>
</string>
<string id="duty_girl_chat_hunting_chimera_1">
<text>Yeah, kind of. You know, most of Duty members, me included, are those who lost their friends, their family to the Zone. Such memories won't be forgotten easily.</text>
</string>
<string id="duty_girl_chat_monolith_elite_0">
<text>Those men seem to follow your commands.</text>
</string>
<string id="duty_girl_chat_monolith_elite_1">
<text>I know medicine and usually help wounded people, so they seem to like me. Or maybe I'm not as strict as other Duty officers.</text>
</string>
<string id="duty_girl_chat_capture_the_brirge_0">
<text>Why did the Monolith want to block the route?</text>
</string>
<string id="duty_girl_chat_capture_the_brirge_1">
<text>They are monolithians. They always prevent people from reaching the center of the Zone. I think those we fought were fresh victims of the Brain Scorcher. Experienced stalkers will try to cross the Brain Scorcher's psy field to reach the center of the Zone. Many things could happen, mutant attacks that break their protection equipment, unable to cross the field on time, etc. The route is dangerous, but at the same time it also leads to new areas that haven't been scanned by anyone.</text>
</string>
<string id="duty_girl_chat_capture_the_brirge_2">
<text>I saw there were some free stalkes joining us in the fight at the bridge.</text>
</string>
<string id="duty_girl_chat_capture_the_brirge_3">
<text>Maybe they were influenced by our action of reopening the route, having their friends stuck in the north, so they came to help. Or maybe they just came for the reward. Regardless, any help is welcome.</text>
</string>
<!----------------------------------------------------------------------------------------------------
Quests
------------------------------------------------------------------------------------------------------>
<string id="duty_girl_first_meet_0">
<text>It has been years since I last saw a girl.</text>
</string>
<string id="duty_girl_first_meet_1">
<text>I guess you will see me around more often.</text>
</string>
<string id="duty_girl_first_meet_2">
<text>I haven't seen you before. Are you a new recruit?</text>
</string>
<string id="duty_girl_first_meet_3">
<text>I joined Duty one year ago. It was a field recruitment. My father was a free stalker and I'm with him. One day, we were attacked by a chimera. I managed to survive by hiding in a truck cabin, but he didn't make it. He was killed when trying to protect me. Then a Duty expedition squad found and rescued me. So I joined them, since I had nowhere else to go and I want to revenge for my father. I have been trained and fighting alongside with them since then. Now our commission is over, we return to the base waiting for the next orders.</text>
</string>
<string id="duty_girl_first_meet_4">
<text>What a sad story. I'm sorry to hear that.</text>
</string>
<string id="duty_girl_first_meet_5">
<text>I'm fine. Hey, you were the guy running around asking for work lately, weren't you? I'm currently in charge of some Duty's special operations. If you need work, I might have some for you.</text>
</string>
<string id="duty_girl_hunting_chimera_init_0">
<text>Do you have any work that I can help?</text>
</string>
<string id="duty_girl_hunting_chimera_init_1">
<text>I'm going to go hunting now. There is a chimera that has been bothering Barman for a while. Join me and I will share you half of the bounty. See me at the Flea Market.</text>
</string>
<string id="duty_girl_hunting_chimera_move_0">
<text>I'm ready.</text>
</string>
<string id="duty_girl_hunting_chimera_move_1">
<text>I just saw it chasing some bandits from distance. I'm glad to see you. It was a big one, I would have to abandon the mission if you didn't come to help. It must has returned to it's lair by now. Follow me and stay close.</text>
</string>
<string id="duty_girl_hunting_chimera_hunt_1">
<text>Look. It is a black chimera.</text>
</string>
<string id="duty_girl_hunting_chimera_hunt_2">
<text>It isn't aware of us. Good.</text>
</string>
<string id="duty_girl_hunting_chimera_hunt_3">
<text>You better make the first shot count.</text>
</string>
<string id="duty_girl_hunting_chimera_hunt_4">
<text>Phew! That was close.</text>
</string>
<string id="duty_girl_hunting_chimera_done_0">
<text>The monster is dead.</text>
</string>
<string id="duty_girl_hunting_chimera_done_1">
<text>You're tougher than I thought. I'm looking for some good fighters for my mission, and you're a good addition. I will explain it in details, but I think you should prepare some better gears. Here, take the reward.</text>
</string>
<string id="duty_girl_monolith_elite_init_0">
<text>Do you have any work that I can help?</text>
</string>
<string id="duty_girl_monolith_elite_init_1">
<text>Yeah. There is one. Quite a dangerous one, I'm afraid. Just recently, a group of monolithians appeared in Army Warehouses blocking the path to the Red Forest. They aren't any monolithians, scouts reported that they are very well armed. People cry to reopen the route so here we are. We will gather at the abandoned house in the Army Warehouse. See you there.</text>
</string>
<string id="duty_girl_monolith_elite_join_0">
<text>I come to join you.</text>
</string>
<string id="duty_girl_monolith_elite_join_1">
<text>Good to see you. Here is your supplies. Prepare yourself and tell me when when you're ready.</text>
</string>
<string id="duty_girl_monolith_elite_join_2">
<text>I'm ready.</text>
</string>
<string id="duty_girl_monolith_elite_move_1">
<text>Buckle up men. It won't be easy.</text>
</string>
<string id="duty_girl_monolith_elite_move_2">
<text>Remember to keep your head down and follow my hand signals.</text>
</string>
<string id="duty_girl_monolith_elite_move_3">
<text>Move.</text>
</string>
<string id="duty_girl_monolith_elite_move_4">
<text>This is it. Good work, men!</text>
</string>
<string id="duty_girl_monolith_elite_move_5">
<text>Damn, he was spotted.</text>
</string>
<string id="duty_girl_monolith_elite_move_6">
<text>Everyone, attack.</text>
</string>
<string id="duty_girl_monolith_elite_done_0">
<text>I come to collect my reward.</text>
</string>
<string id="duty_girl_monolith_elite_done_1">
<text>Yeah, here you are. I knew I can count on you. Your contributions today will be known among Duty men.</text>
</string>
<string id="duty_girl_loot_stash_init_0">
<text>Do you have any work that I can help?</text>
</string>
<string id="duty_girl_loot_stash_init_1">
<text>I haven't got anything yet. But perhaps you would be interested in this. You did well in the recent mission and I think the reward is quite underpaid. These are the coordinates obtained from the PDA of one of the monolith fighters. A stash, no doubt. No one has secured it yet, we have to prepare for the next move. So consider it a bonus for you.</text>
</string>
<string id="duty_girl_loot_stash_init_2">
<text>Thanks.</text>
</string>
<string id="duty_girl_capture_the_brirge_init_0">
<text>Do you have any work that I can help?</text>
</string>
<string id="duty_girl_capture_the_brirge_init_1">
<text>The Monolith has come again. They captured the outpost near the bridge in the Red Forest. We will drive them away, at the same time capture it and establish a forward outpost to maintain the route. Our rallying point is the bus stop in the Red Forest. See you there.</text>
</string>
<string id="duty_girl_capture_the_brirge_join_0">
<text>I come to join you.</text>
</string>
<string id="duty_girl_capture_the_brirge_join_1">
<text>We scouted ahead. Our foe has less skilled fighters, but they come by the number. Spotted around 10 men but I'm sure they have backup hiding around. It will be tougher than the previous fight. Take your supply and be ready.</text>
</string>
<string id="duty_girl_capture_the_brirge_join_2">
<text>I'm ready.</text>
</string>
<string id="duty_girl_capture_the_brirge_move_1">
<text>Be careful, they are even tougher than before.</text>
</string>
<string id="duty_girl_capture_the_brirge_move_2">
<text>Don't advance too far. Stay together.</text>
</string>
<string id="duty_girl_capture_the_brirge_move_3">
<text>Move.</text>
</string>
<string id="duty_girl_capture_the_brirge_move_4">
<text>Looks like that was the last one. Good work, people!</text>
</string>
<string id="duty_girl_capture_the_brirge_move_5">
<text>Damn, he was spotted.</text>
</string>
<string id="duty_girl_capture_the_brirge_move_6">
<text>Everyone, attack.</text>
</string>
<string id="duty_girl_capture_the_brirge_done_0">
<text>I come to collect my reward.</text>
</string>
<string id="duty_girl_capture_the_brirge_done_1">
<text>Thanks for your help. Our men are on the way here and the outpost will be operational soon. My mission is over. I think I will be idle for a while. If you need an extra hand in your missions, you just need to ask.</text>
</string>
</string_table>

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="windows-1251"?>
<string_table>
<string id="duty_girl_hunting_chimera_title">
<text>Hunting Chimera</text>
</string>
<string id="duty_girl_hunting_chimera_descr_1">
<text>I agreed to help Anna hunt a Chimera. See her at the Flea Market.</text>
</string>
<string id="duty_girl_hunting_chimera_descr_2">
<text>I agreed to help Anna hunt a Chimera. We are attacking the monster's lair.</text>
</string>
<string id="duty_girl_hunting_chimera_descr_3">
<text>The monster is dead. Return for reward.</text>
</string>
<string id="duty_girl_monolith_elite_title">
<text>Clean The Route To The North</text>
</string>
<string id="duty_girl_monolith_elite_descr_1">
<text>Duty is about to launch an attack against a highly ranked monolith squad. Any help is welcome with a promise of reward.</text>
</string>
<string id="duty_girl_monolith_elite_descr_2">
<text>The attack has begun. Help Duty to fight against enemies.</text>
</string>
<string id="duty_girl_monolith_elite_descr_3">
<text>The attack was successful. Time to collect my reward.</text>
</string>
<string id="duty_girl_loot_stash_title">
<text>Bonus Reward</text>
</string>
<string id="duty_girl_loot_stash_descr_1">
<text>A stash coordinate was given to me as a bonus for assisting Duty in the previous mission.</text>
</string>
<string id="duty_girl_capture_the_brirge_title">
<text>Capture The Brirge</text>
</string>
<string id="duty_girl_capture_the_brirge_descr_1">
<text>Duty want to capture the brirge in the Red Forest. They are about to strike. Any help is welcome with a promise of reward.</text>
</string>
<string id="duty_girl_capture_the_brirge_descr_2">
<text>The attack has begun. Help Duty to fight against enemies.</text>
</string>
<string id="duty_girl_capture_the_brirge_descr_3">
<text>The attack was successful. Time to collect my reward.</text>
</string>
</string_table>

View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="windows-1251"?>
<string_table>
<string id="red_duty_outpost_trader_concern_hostile_0">
<text>There are stalkers from different communities here. Don't they cause troubles?</text>
</string>
<string id="red_duty_outpost_trader_concern_hostile_1">
<text>Don't worry. The area is under Duty control. Those who are friends of Duty are protected here and fighting is forbidden. You better don't cause troubles for yourself too.</text>
</string>
<string id="red_duty_outpost_trader_task_1_name">
<text>Destroy the Mutants</text>
</string>
<string id="red_duty_outpost_trader_task_1_text">
<text>I've agreed to clear out a lair of mutants for the outpost leader.</text>
</string>
<string id="red_duty_outpost_trader_task_1_about">
<text>There is still a mutant lair that we haven't had any squad to assign. Can you take care of it?</text>
</string>
<string id="red_duty_outpost_trader_task_1_finish">
<text>Good work. Another tick to the task list.</text>
</string>
<string id="red_duty_outpost_trader_task_2_name">
<text>Kill the Stalker</text>
</string>
<string id="red_duty_outpost_trader_task_2_text">
<text>I've agreed to take care of a stalker for the outpost leader.</text>
</string>
<string id="red_duty_outpost_trader_task_2_about">
<text>I have a high priority target that needs removal. He was found attacking local stalkers and scientists. A reward is promised for any one who can take him out.</text>
</string>
<string id="red_duty_outpost_trader_task_2_finish">
<text>I don't like killing but that scum deserves it. Here's the reward.</text>
</string>
<string id="red_duty_outpost_trader_task_3_name">
<text>Find %s</text>
</string>
<string id="red_duty_outpost_trader_task_3_text">
<text>The outpost leader asked me to hunt for a certain amount of mutant meat worth of food. Bring him %s for a reward.</text>
</string>
<string id="red_duty_outpost_trader_task_3_about">
<text>The supply line to our point is very dangerous. I want to focus more on weapons and ammo and less on things that we can secure in the area, such as food. There are a lot of edible mutants around here. Hunt them down and bring back %s. Then I will have a reward for you.</text>
</string>
<string id="red_duty_outpost_trader_task_3_finish">
<text>Yeah, I prefer these than dry MREs. Good work.</text>
</string>
<string id="red_duty_outpost_trader_task_4_name">
<text>Find %s</text>
</string>
<string id="red_duty_outpost_trader_task_4_text">
<text>Some scientists are looking for a rare mutant part called %s.</text>
</string>
<string id="red_duty_outpost_trader_task_4_about">
<text>Some of the scientists keep asking for a %s. It's from a dangerous mutant which my boys usually tear to pieces with bullets and grenades. See if you can secure one.</text>
</string>
<string id="red_duty_outpost_trader_task_4_finish">
<text>Finally, someone bring back a sample in one piece.</text>
</string>
<string id="meet_guid_duty_outpost_list_0">
<text>Where can you escort me?</text>
</string>
<string id="meet_guid_duty_outpost_list_1">
<text>To the Bar in Rostok for one thousand, the Skadovsk in Zaton for two thousand, the Garbage for three thousand, Yantar for four thousand, the Military Base in Agroprom for five thousand, the Rookie Village in the Cordon for six thousand, and the Great Swamp for six thousand.</text>
</string>
<string id="travel_guid_duty_outpost_0">
<text>I need to be led somewhere.</text>
</string>
<string id="travel_guid_duty_outpost_1">
<text>Yeah, where?</text>
</string>
<string id="travel_guid_duty_outpost_2">
<text>To Rostok. %c[d_orange][1000 RU]</text>
</string>
<string id="travel_guid_duty_outpost_3">
<text>To Zaton. %c[d_orange][2000 RU]</text>
</string>
<string id="travel_guid_duty_outpost_4">
<text>To the Garbage. %c[d_orange][3000 RU]</text>
</string>
<string id="travel_guid_duty_outpost_5">
<text>To Yantar. %c[d_orange][4000 RU]</text>
</string>
<string id="travel_guid_duty_outpost_6">
<text>To Agroprom. %c[d_orange][5000 RU]</text>
</string>
<string id="travel_guid_duty_outpost_7">
<text>To the Cordon. %c[d_orange][6000 RU]</text>
</string>
<string id="travel_guid_duty_outpost_8">
<text>To the Great Swamp. %c[d_orange][6000 RU]</text>
</string>
<string id="travel_guid_duty_outpost_9">
<text>I've changed my mind.</text>
</string>
<string id="travel_guid_duty_outpost_from_others_0">
<text>Do you know the Duty Outpost in the Red Forest? I want to go there.</text>
</string>
<string id="travel_guid_duty_outpost_from_others_1">
<text>Yes. It will be %c[d_orange]%s RU%c[255,160,160,190].</text>
</string>
<string id="travel_guid_duty_outpost_from_others_2">
<text>Bring me there. %c[d_orange][%s RU]</text>
</string>
<string id="travel_guid_duty_outpost_from_others_3">
<text>I've changed my mind.</text>
</string>
</string_table>

View File

@ -0,0 +1,279 @@
<?xml version="1.0" encoding="windows-1251"?>
<string_table>
<string id="stalker_duty_girl_name">
<text>Анна</text>
</string>
<string id="duty_girl_companion_join_0">
<text>Мне не помешала бы поддержка в поле. Составишь компанию?</text>
</string>
<string id="duty_girl_companion_join_1">
<text>Конечно. Веди.</text>
</string>
<string id="duty_girl_companion_join_2">
<text>А с ней ты разве не хорошо проводишь время? Извини, я сейчас занята.</text>
</string>
<string id="duty_girl_companion_leave_0">
<text>Думаю, нам надо разойтись.</text>
</string>
<string id="duty_girl_companion_leave_1">
<text>Ты уверен?</text>
</string>
<string id="duty_girl_companion_leave_2">
<text>Да. Дальше я пойду один.</text>
</string>
<string id="duty_girl_companion_leave_3">
<text>Нет, я передумал. Если так подумать, лучше держаться вместе.</text>
</string>
<string id="duty_girl_companion_leave_4">
<text>Ладно. Удачной охоты. Я вернусь на Росток. Не забывай заглядывать время от времени.</text>
</string>
<string id="duty_girl_actor_ask_companion_0">
<text>У нас разные враги и друзья. Нам это не помешает?</text>
</string>
<string id="duty_girl_actor_ask_companion_1_lone">
<text>Мое присутствие поможет убедить военных оставить вас в покое. Но не делай глупостей. Я не стану тебе помогать, если ты их разозлишь. В свою очередь, позаботься о том, чтобы анархисты не доставляли мне проблем. Тогда, думаю, мы сможем поладить.</text>
</string>
<string id="duty_girl_actor_ask_companion_1_csky">
<text>Мое присутствие может убедить военных оставить вас в покое. Но не делай глупостей. Я не стану тебе помогать, если ты их разозлишь. В свою очередь, позаботься о том, чтобы анархисты и наёмники не доставляли мне проблем. Тогда, думаю, мы сможем поладить.</text>
</string>
<string id="duty_girl_actor_ask_companion_1_army">
<text>Я могу убедить одиночек и "Чистое небо", что ты не представляешь угрозы. Тебе лучше вести себя соответственно. Я не стану помогать, если ты их разозлишь. Тогда, думаю, мы сможем поладить.</text>
</string>
<string id="duty_girl_actor_ask_companion_1_ecol">
<text>А у тебя не так уж много врагов, а? Думаю, мы сможем поладить, если ты сможешь убедить анархистов и наемников не нападать на меня.</text>
</string>
<string id="duty_girl_companion_random_chat_1">
<text>Лучше запастись патронами, когда будет возможность.</text>
</string>
<string id="duty_girl_companion_random_chat_2">
<text>Знаешь, ты ведь можешь уехать из Зоны. Остепениться, начать все сначала, на девушке жениться...</text>
</string>
<string id="duty_girl_companion_random_chat_special_1">
<text>Ты неважно выглядишь. Надо поскорее обработать рану.</text>
</string>
<string id="duty_girl_companion_random_chat_special_2">
<text>Ты получил дозу радиации. Нормально себя чувствуешь?</text>
</string>
<string id="duty_girl_companion_random_chat_special_3">
<text>Начинается новый день, а мы все еще живы. Есть место оптимизму!</text>
</string>
<string id="duty_girl_companion_random_chat_special_4">
<text>Уже утро. Пришло время надирать мутантам задницы.</text>
</string>
<string id="duty_girl_companion_random_chat_special_5">
<text>С добрым утром. А эти из "Свободы", наверное, всё ещё сны про сосычей досматривают.</text>
</string>
<string id="duty_girl_companion_random_chat_special_6">
<text>Ночь надвигается. Зона теперь еще опаснее, но и возможностей становится больше.</text>
</string>
<string id="duty_girl_companion_random_chat_special_7">
<text>Ночь надвигается. Может, отдохнем немного?</text>
</string>
<string id="duty_girl_companion_random_chat_special_8">
<text>Сколько мутантов ты убил сегодня?</text>
</string>
<string id="duty_girl_chat_0">
<text>Мне надо тебе кое-что сказать...</text>
</string>
<string id="duty_girl_chat_1">
<text>Что такое?</text>
</string>
<string id="duty_girl_chat_2">
<text>Нет, неважно.</text>
</string>
<string id="duty_girl_chat_hunting_chimera_0">
<text>Ты так стремилась убить эту химеру. Это все из-за твоего отца?</text>
</string>
<string id="duty_girl_chat_hunting_chimera_1">
<text>Да, вроде того. Понимаешь, большинство ребят в "Долге", я в том числе - это те, кто потерял в Зоне своих друзей, родных. Такие вещи непросто забываются.</text>
</string>
<string id="duty_girl_chat_monolith_elite_0">
<text>Эти ребята, похоже, следуют твоим приказам.</text>
</string>
<string id="duty_girl_chat_monolith_elite_1">
<text>Я разбираюсь в медицине и обычно помогаю раненым, так что, похоже, я им нравлюсь. А может, я не такая строгая, как другие офицеры в "Долге".</text>
</string>
<string id="duty_girl_chat_capture_the_brirge_0">
<text>Зачем монолитовцам перекрывать маршрут?</text>
</string>
<string id="duty_girl_chat_capture_the_brirge_1">
<text>Они монолитовцы. Они всегда мешают другим добраться до центра Зоны. Думаю, те, с кем мы сражались, были недавними жертвами Выжигателя мозгов. Опытные сталкеры иногда пытаюстся пройти через пси-поле Выжигателя мозгов, чтобы достичь центра Зоны. Многое может случиться: мутанты нападут и повредят защитное оборудование, не смогут вовремя пройти через поле, ещё что. Маршрут опасен, но зато он ведет к новым, малоизученным территориям.</text>
</string>
<string id="duty_girl_chat_capture_the_brirge_2">
<text>В схватке у моста я заметил, что к нам присоединились несколько одиночек.</text>
</string>
<string id="duty_girl_chat_capture_the_brirge_3">
<text>Может быть, их заинтересовала наша операция по восстановлению маршрута, их друзья застряли на севере, поэтому они пришли помочь. А может, просто в погоне за наживой. В любом случае, мы рады всякой помощи.</text>
</string>
<!----------------------------------------------------------------------------------------------------
Quests
------------------------------------------------------------------------------------------------------>
<string id="duty_girl_first_meet_0">
<text>Ого! Я уже давно не видал девушек.</text>
</string>
<string id="duty_girl_first_meet_1">
<text>Ну, меня ты, похоже, будешь видеть часто.</text>
</string>
<string id="duty_girl_first_meet_2">
<text>Я тебя раньше не видел. Ты из новобранцев?</text>
</string>
<string id="duty_girl_first_meet_3">
<text>Я вступила в "Долг" год назад. Набирали в полевых условиях. Мой отец был вольным сталкером, а я путешествовала с ним. Однажды на нас напала химера. Мне удалось выжить, спрятавшись в кабине грузовика, но он погиб. Погиб, пытаясь защитить меня. Затем экспедиционный отряд "Долга" нашёл меня и спас. Я присоединилась к ним, потому что мне просто некуда было больше податься и я хотела отомстить за своего отца. С тех пор я тренировалась и сражалась бок о бок с ними. А теперь наше задание выполнено, мы возвращаемся на базу и ожидаем дальнейших приказов.</text>
</string>
<string id="duty_girl_first_meet_4">
<text>Тяжкая история. Сочувствую.</text>
</string>
<string id="duty_girl_first_meet_5">
<text>Я справлюсь. Эй, это ведь ты в последнее время носишься вокруг и ищешь работу? Я сейчас отвечаю за некоторые боевые операции "Долга". Если нужна работа, у меня, может, найдется что-нибудь для тебя.</text>
</string>
<string id="duty_girl_hunting_chimera_init_0">
<text>Есть для меня задания?</text>
</string>
<string id="duty_girl_hunting_chimera_init_1">
<text>Я собираюсь на охоту. Есть одна химера, которая давно беспокоит Бармена. Пойдёшь со мной - получишь половину награды. Встретимся на Барахолке.</text>
</string>
<string id="duty_girl_hunting_chimera_move_0">
<text>Я готов.</text>
</string>
<string id="duty_girl_hunting_chimera_move_1">
<text>Я только что видела, как она преследовала бандитов. Хорошо, что ты объявился. Здоровенная тварь, мне пришлось бы бросить задание, если бы ты не подоспел. Похоже, она уже вернулась в свое логово. Иди за мной и не отставай.</text>
</string>
<string id="duty_girl_hunting_chimera_hunt_1">
<text>Смотри! Это чёрная химера!</text>
</string>
<string id="duty_girl_hunting_chimera_hunt_2">
<text>Нас не учуяла. Хорошо.</text>
</string>
<string id="duty_girl_hunting_chimera_hunt_3">
<text>Смотри не промахнись.</text>
</string>
<string id="duty_girl_hunting_chimera_hunt_4">
<text>Фуф! Ещё бы чуть-чуть и всё.</text>
</string>
<string id="duty_girl_hunting_chimera_done_0">
<text>Тварь издохла.</text>
</string>
<string id="duty_girl_hunting_chimera_done_1">
<text>А ты крепче, чем кажешься. Я ищу хороших бойцов для одной боевой операции, и ты неплохо впишешься. Подробности я расскажу на базе, и думаю, тебе стоит подготовить снаряжение получше. Держи свою награду.</text>
</string>
<string id="duty_girl_monolith_elite_init_0">
<text>Есть для меня задания?</text>
</string>
<string id="duty_girl_monolith_elite_init_1">
<text>Да. Есть одно. И, боюсь, довольно опасное. Совсем недавно группа монолитовцев появилась на Армейских складах, заблокировав проход к Рыжему лесу. Разведка докладывает, что они вооружены самым лучшим образом. Сталкеры просят снова открыть путь в лес, и эта задача падает на нас. Мы собираемся в заброшенном доме на Армейских складах. Встретимся там.</text>
</string>
<string id="duty_girl_monolith_elite_join_0">
<text>Готов присоединиться к операции.</text>
</string>
<string id="duty_girl_monolith_elite_join_1">
<text>Рада тебя видеть. Бери припасы. Сообщай, когда будешь готов.</text>
</string>
<string id="duty_girl_monolith_elite_join_2">
<text>Я готов.</text>
</string>
<string id="duty_girl_monolith_elite_move_1">
<text>Приготовиться! Будет жарко.</text>
</string>
<string id="duty_girl_monolith_elite_move_2">
<text>Не высовываемся и следуем моим командам.</text>
</string>
<string id="duty_girl_monolith_elite_move_3">
<text>Вперёд!</text>
</string>
<string id="duty_girl_monolith_elite_move_4">
<text>Вот и всё. Отличная работа!</text>
</string>
<string id="duty_girl_monolith_elite_move_5">
<text>Чёрт, заметили.</text>
</string>
<string id="duty_girl_monolith_elite_move_6">
<text>В атаку!</text>
</string>
<string id="duty_girl_monolith_elite_done_0">
<text>Я за наградой.</text>
</string>
<string id="duty_girl_monolith_elite_done_1">
<text>Вот, держи. Я знала, что на тебя можно положиться. "Долг" не забудет твой вклад в общее дело.</text>
</string>
<string id="duty_girl_loot_stash_init_0">
<text>Есть для меня задания?</text>
</string>
<string id="duty_girl_loot_stash_init_1">
<text>Пока ничего. Но кое-что узнать тебе будет, наверное, интересно. Ты отлично показал себя на последнем задании, и мне кажется, награда не была соответствующей. Вот координаты с КПК одного из монолитовцев. Вне всяких сомнений, это тайник. Из наших никто его не обыскивал, времени мало, готовимся к другим операциям. Считай это своего рода премией.</text>
</string>
<string id="duty_girl_loot_stash_init_2">
<text>Спасибо.</text>
</string>
<string id="duty_girl_capture_the_brirge_init_0">
<text>Есть задания для меня?</text>
</string>
<string id="duty_girl_capture_the_brirge_init_1">
<text>Снова объявился "Монолит". Захватили стратегическую точку у моста в Рыжем лесу. Выкурим их оттуда и разобьём передовой форпост для охраны маршрута. Точка сбора - автобусная остановка в Рыжем лесу. Встретимся там.</text>
</string>
<string id="duty_girl_capture_the_brirge_join_0">
<text>Готов присоединиться к операции.</text>
</string>
<string id="duty_girl_capture_the_brirge_join_1">
<text>Мы провели рекогносцировку. У противника менее тренированные бойцы, чем в прошлый раз, но берут числом. Мы насчитали около десятка, однако, я уверена, что в засаде сидит ещё столько же. Бой будет пожарче предыдущего. Держи припасы. Проверяй снаряжение и высупаем.</text>
</string>
<string id="duty_girl_capture_the_brirge_join_2">
<text>Я готов.</text>
</string>
<string id="duty_girl_capture_the_brirge_move_1">
<text>Осторожнее, этот бой будет не из простых.</text>
</string>
<string id="duty_girl_capture_the_brirge_move_2">
<text>Вперёд не лезем! Держим строй!</text>
</string>
<string id="duty_girl_capture_the_brirge_move_3">
<text>Вперёд!</text>
</string>
<string id="duty_girl_capture_the_brirge_move_4">
<text>Похоже, последний. Хорошая работа, бойцы!</text>
</string>
<string id="duty_girl_capture_the_brirge_move_5">
<text>Чёрт, заметили!</text>
</string>
<string id="duty_girl_capture_the_brirge_move_6">
<text>В атаку!</text>
</string>
<string id="duty_girl_capture_the_brirge_done_0">
<text>Я за наградой.</text>
</string>
<string id="duty_girl_capture_the_brirge_done_1">
<text>Спасибо за помощь. Наши силы уже выдвинулись на позицию, скоро мы установим здесь форпост. Свою боевую задачу я выполнила. Думаю, отдохну немного. Если тебе нужна какая помощь в Зоне, вызываюсь добровольцем.</text>
</string>
</string_table>

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="windows-1251"?>
<string_table>
<string id="duty_girl_hunting_chimera_title">
<text>Îõîòà íà õèìåðó</text>
</string>
<string id="duty_girl_hunting_chimera_descr_1">
<text>ß ñîãëàñèëñÿ ïîìî÷ü Àííå îõîòèòüñÿ íà õèìåðó. Âñòðå÷àåìñÿ íà Áàðàõîëêå.</text>
</string>
<string id="duty_girl_hunting_chimera_descr_2">
<text>ß ñîãëàñèëñÿ ïîìî÷ü Àííå îõîòèòüñÿ íà õèìåðó. Àòàêóåì ëîãîâî ìîíñòðà.</text>
</string>
<string id="duty_girl_hunting_chimera_descr_3">
<text>Òâàðü ìåðòâà. Âðåìÿ âîçâðàøàòüñÿ çà íàãðàäîé.</text>
</string>
<string id="duty_girl_monolith_elite_title">
<text>Î÷èñòèòü ïóòü íà ñåâåð</text>
</string>
<string id="duty_girl_monolith_elite_descr_1">
<text>"Äîëã" ñîáèðàåòñÿ àòàêîâàòü ýëèòíûé îòðÿä "Ìîíîëèòà". Îíè ðàäû ëþáîé ïîìîùè è ãîòîâû äàòü íàãðàäó çà íå¸.</text>
</string>
<string id="duty_girl_monolith_elite_descr_2">
<text>Àòàêà íà÷àëàñü. Íóæíî ïîìî÷ü "Äîëãó" ñðàæàòüñÿ ñ ïðîòèâíèêîì.</text>
</string>
<string id="duty_girl_monolith_elite_descr_3">
<text>Îïåðàöèÿ çàâåðøèëàñü óñïåøíî. Âðåìÿ èäòè çà íàãðàäîé.</text>
</string>
<string id="duty_girl_loot_stash_title">
<text>Ïðåìèÿ</text>
</string>
<string id="duty_girl_loot_stash_descr_1">
<text> êà÷åñòâå ïðåìèè çà ïîìîùü "Äîëãó" â âûïîëíåíèè áîåâîé îïåðàöèè ìíå âûäàëè êîîðäèíàòû òàéíèêà.</text>
</string>
<string id="duty_girl_capture_the_brirge_title">
<text>Çàõâàò ìîñòà</text>
</string>
<string id="duty_girl_capture_the_brirge_descr_1">
<text>"Äîëãó" íåîáõîäèìî çàõâàòèòü ìîñò â Ðûæåì ëåñó. Îíè ãîòîâû àòàêîâàòü. Îíè ðàäû ëþáîé ïîìîùè è ãîòîâû äàòü íàãðàäó çà íå¸.</text>
</string>
<string id="duty_girl_capture_the_brirge_descr_2">
<text>Àòàêà íà÷àëàñü. Íóæíî ïîìî÷ü "Äîëãó" ñðàæàòüñÿ ñ ïðîòèâíèêîì.</text>
</string>
<string id="duty_girl_capture_the_brirge_descr_3">
<text>Îïåðàöèÿ çàâåðøèëàñü óñïåøíî. Âðåìÿ èäòè çà íàãðàäîé.</text>
</string>
</string_table>

View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="windows-1251"?>
<string_table>
<string id="red_duty_outpost_trader_concern_hostile_0">
<text>Çäåñü ñòàëêåðû èç ðàçíûõ ãðóïïèðîâîê. Íåïðèÿòíîñòè áûâàþò?</text>
</string>
<string id="red_duty_outpost_trader_concern_hostile_1">
<text>Íå áåñïîêîéñÿ. Îáëàñòü ïîä êîíòðîëåì "Äîëãà". Äðóçüÿ "Äîëãà" çäåñü ïîä çàùèòîé è ëþáàÿ âðàæäåáíîñòü ïîä çàïðåòîì. Îò òåáÿ, íàäåþñü, òîæå íåïðèÿòíîñòåé íå áóäåò.</text>
</string>
<string id="red_duty_outpost_trader_task_1_name">
<text>Óíè÷òîæèòü ìóòàíòîâ</text>
</string>
<string id="red_duty_outpost_trader_task_1_text">
<text>ß ñîãëàñèëñÿ ïîìî÷ü êîìàíäèðó ôîðïîñòà ðàçîáðàòüñÿ ñ ìóòàíòàìè.</text>
</string>
<string id="red_duty_outpost_trader_task_1_about">
<text> îêðóãå åñòü ãíåçäî ìóòàíòîâ, ê êîòîðîìó ìû åù¸ íå ñìîãëè îòïðàâèòü îòðÿä. Âîçüì¸øüñÿ?</text>
</string>
<string id="red_duty_outpost_trader_task_1_finish">
<text>Õîðîøàÿ ðàáîòà. Åù¸ îäíà ãàëî÷êà â æóðíàëå.</text>
</string>
<string id="red_duty_outpost_trader_task_2_name">
<text>Ëèêâèäèðîâàòü ñòàëêåðà</text>
</string>
<string id="red_duty_outpost_trader_task_2_text">
<text>ß ñîãëàñèëñÿ ïîìî÷ü êîìàíäèðó ôîðïîñòà ëèêâèäèðîâàòü ñòàëêåðà.</text>
</string>
<string id="red_duty_outpost_trader_task_2_about">
<text>Åñòü âàæíàÿ öåëü, êîòîðóþ íåîáõîäèìî óíè÷òîæèòü. Îäèí ñóáúåêò íàïàäàåò íà ìåñòíûõ ñòàëêåðîâ è ó÷¸íûõ. Çà ëèêâèäàöèþ äàííîãî ñóáúåêòà íàçíà÷åíà íàãðàäà.</text>
</string>
<string id="red_duty_outpost_trader_task_2_finish">
<text>Íå ëþáëþ óáèéñòâà, íî ýòîò ïîäîíîê çàñëóæèë ñâî¸. Âîò òâîÿ íàãðàäà.</text>
</string>
<string id="red_duty_outpost_trader_task_3_name">
<text>Íàéòè %s</text>
</string>
<string id="red_duty_outpost_trader_task_3_text">
<text>Êîìàíäèð ôîðïîñòà ïîïðîñèë ïîîõîòèòüñÿ íà ìóòàíòîâ è ñîáðàòü íåìíîãî ìÿñà. Ìíå íóæíî ïðèíåñòè %s. Çà âûïîëíåíèå çàäàíèÿ îáåùàíî âîçíàãðàæäåíèå.</text>
</string>
<string id="red_duty_outpost_trader_task_3_about">
<text>Ëèíèÿ ñíàáæåíèÿ ê íàøåìó ôîðïîñòó î÷åíü îïàñíà.  ïðèîðèòåòå îðóæèå è ïàòðîíû, ïðîâèàíò ðåøåíî äîáûâàòü â ïîëåâûõ óñëîâèÿõ.  îêðóãå ìíîãî ìóòàíòîâ, ìÿñî êîòîðûõ ïðèãîäíî â ïèùó. Ñåé÷àñ ìíå íóæíî %s. Çà âûïîëíåíèå çàäàíèÿ ïîëàãàåòñÿ âîçíàãðàæäåíèå.</text>
</string>
<string id="red_duty_outpost_trader_task_3_finish">
<text>Óæ ëó÷øå ýòî, ÷åì ñóõïàéêè. Îòëè÷íàÿ ðàáîòà.</text>
</string>
<string id="red_duty_outpost_trader_task_4_name">
<text>Íàéòè %s</text>
</string>
<string id="red_duty_outpost_trader_task_4_text">
<text>Ó÷¸íûì ñîâåðøåííî íåîáõîäèìî ïðåäîñòàâèòü %s äëÿ ïðîâåäåíèÿ èññëåäîâàíèé.</text>
</string>
<string id="red_duty_outpost_trader_task_4_about">
<text>Äà ó÷¸íûå òóò âñ¸ õîòÿò èçó÷èòü %s. Ìîè áîéöû îáû÷íî ðàçáèðàþòñÿ ñ ìóòàíòàìè æ¸ñòêî è "îáðàçöîâ" îò íèõ îñòà¸òñÿ ìàëî. Ïîñìîòðèì, ñìîæåøü ëè òû ðàçäîáûòü, ÷òî íóæíî.</text>
</string>
<string id="red_duty_outpost_trader_task_4_finish">
<text>Íàêîíåö õîòü êòî-òî ñìîã îñòàâèòü îò òâàðè êóñîê äîñòàòî÷íîãî ðàçìåðà.</text>
</string>
<string id="meet_guid_duty_outpost_list_0">
<text>Êóäà ìîæåøü ìåíÿ îòâåñòè?</text>
</string>
<string id="meet_guid_duty_outpost_list_1">
<text>Äî Áàðà íà "Ðîñòêå" çà òûñÿ÷ó, äî "Ñêàäîâñêà" íà Çàòîíå çà äâå òûñÿ÷è, äî Ñâàëêè çà òðè òûñÿ÷è, äî ßíòàðÿ çà îäíó, ê âîåííûì íà Àãðîïðîìå çà ïÿòü òûñÿ÷, äî Äåðåâíè íîâè÷êîâ íà Êîðäîíå çà øåñòü òûñÿ÷, è äî Áîëîò çà øåñòü òûñÿ÷.</text>
</string>
<string id="travel_guid_duty_outpost_0">
<text>Ìíå íóæåí ïðîâîäíèê.</text>
</string>
<string id="travel_guid_duty_outpost_1">
<text>Êóäà òåáÿ îòâåñòè?</text>
</string>
<string id="travel_guid_duty_outpost_2">
<text>Íà "Ðîñòîê". %c[d_orange][1000 ðóáëåé]</text>
</string>
<string id="travel_guid_duty_outpost_3">
<text>Íà Çàòîí. %c[d_orange][2000 ðóáëåé]</text>
</string>
<string id="travel_guid_duty_outpost_4">
<text>Íà Ñâàëêó. %c[d_orange][3000 ðóáëåé]</text>
</string>
<string id="travel_guid_duty_outpost_5">
<text>Íà ßíòàðü. %c[d_orange][4000 ðóáëåé]</text>
</string>
<string id="travel_guid_duty_outpost_6">
<text>Íà Àãðîïðîì. %c[d_orange][5000 ðóáëåé]</text>
</string>
<string id="travel_guid_duty_outpost_7">
<text>Íà Êîðäîí. %c[d_orange][6000 ðóáëåé]</text>
</string>
<string id="travel_guid_duty_outpost_8">
<text>Íà Áîëîòà. %c[d_orange][6000 ðóáëåé]</text>
</string>
<string id="travel_guid_duty_outpost_9">
<text>ß ïåðåäóìàë.</text>
</string>
<string id="travel_guid_duty_outpost_from_others_0">
<text>Çíàåøü äîðîãó äî ôîðïîñòà "Äîëãà" â Ðûæåì Ëåñó? Ìíå íàäî òóäà.</text>
</string>
<string id="travel_guid_duty_outpost_from_others_1">
<text>Äà. Çà %c[d_orange]%s ðóáëåé%c[255,160,160,190] ïðîâåäó.</text>
</string>
<string id="travel_guid_duty_outpost_from_others_2">
<text>Âåäè. %c[d_orange][%s ðóáëåé]</text>
</string>
<string id="travel_guid_duty_outpost_from_others_3">
<text>ß ïåðåäóìàë.</text>
</string>
</string_table>

View File

@ -0,0 +1,10 @@
<w>
<file name="ui\ui_npc_unique_duty_girl">
<texture id="ui_npc_duty_girl" x="0" y="0" width="123" height="87" />
</file>
<file name="ui\ui_npc_unique_duty_girl_message">
<texture id="ui_npc_duty_girl_msg_image" x="0" y="0" width="83" height="47"/>
</file>
</w>

Binary file not shown.

View File

@ -0,0 +1,624 @@
local HI = has_alife_info
local GI = give_info
local DI = disable_info
local GT = game.translate_string
function NI(str)
return not (has_alife_info(str))
end
local saved_dialog
function add_dialog(p_id,id,phrase_id,cond,act)
if not ( saved_dialog ) then
return
end
local phrase = saved_dialog:AddPhrase(phrase_id,tostring(id),tostring(p_id),-10000)
if not ( phrase ) then
return
end
local phrase_script = phrase:GetPhraseScript()
if ( cond ) then
if ( type(cond) == "table" ) then
for key, value in pairs(cond) do
if (utils_data.findfunction(value,_G)) then
phrase_script:AddPrecondition(value)
else
printe("!ERROR dialog_manager | No such function exists '%s'",value)
end
end
else
if (utils_data.findfunction(cond,_G)) then
phrase_script:AddPrecondition(cond)
else
printe("!ERROR dialog_manager | No such function exists '%s'",cond)
end
end
end
if ( act ) then
if ( type(act) == "table" ) then
for key, value in pairs(act) do
if (utils_data.findfunction(value,_G)) then
phrase_script:AddAction(value)
else
printe("!ERROR dialog_manager | No such function exists '%s'",value)
end
end
else
if (utils_data.findfunction(act,_G)) then
phrase_script:AddAction(act)
else
printe("!ERROR dialog_manager | No such function exists '%s'",act)
end
end
end
return phrase_script
end
--[[----------------------------------------------------------------------------------------------------
General
------------------------------------------------------------------------------------------------------]]
function duty_girl_companion_join_dialog_con(a,b,dialog_name,pre_pid,cur_pid)
if (NI("duty_girl_capture_the_brirge_done")) then
return false
end
if (dialogs_axr_companion.is_actor_companion(a,b)) then
return false
end
return true
end
function duty_girl_companion_join_dialog(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_companion_join_0")
add_dialog(0,1,"duty_girl_companion_join_1","dialogs_duty_girl.duty_girl_companion_join_1_con","dialogs_axr_companion.become_actor_companion")
add_dialog(0,2,"duty_girl_companion_join_2","dialogs_duty_girl.duty_girl_companion_join_2_con")
end
function duty_girl_companion_join_1_con(a,b)
return not duty_girl_companion_join_2_con(a,b)
end
function duty_girl_companion_join_2_con(a,b)
local npc = get_story_object("devushka")
if (npc and npc:alive() and dialogs_axr_companion.is_actor_companion(db.actor,npc)) then
return true
end
return false
end
function duty_girl_companion_leave_dialog_con(a,b,dialog_name,pre_pid,cur_pid)
if (dialogs_axr_companion.is_actor_companion(a,b)) then
return true
end
return false
end
function duty_girl_companion_leave_dialog(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_companion_leave_0")
add_dialog(0,1,"duty_girl_companion_leave_1")
add_dialog(1,2,"duty_girl_companion_leave_2")
add_dialog(1,3,"duty_girl_companion_leave_3")
add_dialog(2,4,"duty_girl_companion_leave_4",nil,"dialogs_axr_companion.remove_companions_from_squad")
end
function duty_girl_actor_ask_companion_dialog_con(a,b,dialog_name,pre_pid,cur_pid)
local str = db.actor and character_community(db.actor) or ""
if (str and string.find(str,"dolg")) then
return false
end
return true
end
function duty_girl_actor_ask_companion_dialog(dialog)
end
function duty_girl_first_meet(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_first_meet_0")
add_dialog(0,1,"duty_girl_first_meet_1")
add_dialog(1,2,"duty_girl_first_meet_2")
add_dialog(2,3,"duty_girl_first_meet_3")
add_dialog(3,4,"duty_girl_first_meet_4")
add_dialog(4,5,"duty_girl_first_meet_5",nil,"dialogs_duty_girl.GI_duty_girl_first_meet")
end
--[[----------------------------------------------------------------------------------------------------
Quests
------------------------------------------------------------------------------------------------------]]
--[[----------------------------------------------------------------------------------------------------
duty_girl_hunting_chimera
------------------------------------------------------------------------------------------------------]]
function duty_girl_hunting_chimera_init_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_hunting_chimera_done") or HI("duty_girl_hunting_chimera_fail")) then
return false
end
return HI("duty_girl_first_meet") and NI("duty_girl_hunting_chimera_init")
end
function duty_girl_hunting_chimera_init(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_hunting_chimera_init_0")
add_dialog(0,1,"duty_girl_hunting_chimera_init_1",nil,"dialogs_duty_girl.duty_girl_hunting_chimera")
end
function duty_girl_hunting_chimera_move_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_hunting_chimera_done") or HI("duty_girl_hunting_chimera_fail")) then
return false
end
local npc = dialogs.who_is_npc(a,b)
return HI("duty_girl_hunting_chimera_init") and NI("duty_girl_hunting_chimera_move") and xr_conditions.npc_on_level(db.actor,npc,{"l02_garbage"})
end
function duty_girl_hunting_chimera_move(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_hunting_chimera_move_0")
add_dialog(0,1,"duty_girl_hunting_chimera_move_1",nil,"dialogs_duty_girl.GI_duty_girl_hunting_chimera_move")
end
function duty_girl_hunting_chimera_done_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_hunting_chimera_done") or HI("duty_girl_hunting_chimera_fail")) then
return false
end
return HI("duty_girl_hunting_chimera_dead") and NI("duty_girl_hunting_chimera_reward")
end
function duty_girl_hunting_chimera_done(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_hunting_chimera_done_0")
local action = {
"dialogs_duty_girl.give_money_8000",
"dialogs_duty_girl.GI_duty_girl_hunting_chimera_reward",
}
add_dialog(0,1,"duty_girl_hunting_chimera_done_1",nil,action)
end
--[[----------------------------------------------------------------------------------------------------
duty_girl_monolith_elite
------------------------------------------------------------------------------------------------------]]
function duty_girl_monolith_elite_init_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_monolith_elite_done") or HI("duty_girl_monolith_elite_fail")) then
return false
end
local npc = dialogs.who_is_npc(a,b)
return HI("duty_girl_hunting_chimera_done") and NI("duty_girl_monolith_elite_init") and xr_conditions.npc_on_level(db.actor,npc,{"l05_bar"})
end
function duty_girl_monolith_elite_init(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_monolith_elite_init_0")
add_dialog(0,1,"duty_girl_monolith_elite_init_1",nil,"dialogs_duty_girl.duty_girl_monolith_elite")
end
function duty_girl_monolith_elite_join_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_monolith_elite_done") or HI("duty_girl_monolith_elite_fail")) then
return false
end
local npc = dialogs.who_is_npc(a,b)
return HI("duty_girl_monolith_elite_init") and NI("duty_girl_monolith_elite_join") and xr_conditions.npc_on_level(db.actor,npc,{"l07_military"})
end
function duty_girl_monolith_elite_done_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_monolith_elite_done") or HI("duty_girl_monolith_elite_fail")) then
return false
end
return HI("duty_girl_monolith_elite_dead") and NI("duty_girl_monolith_elite_reward")
end
function duty_girl_monolith_elite_done(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_monolith_elite_done_0")
local action = {
"dialogs_duty_girl.give_money_12000",
"dialogs_duty_girl.GI_duty_girl_monolith_elite_reward",
}
add_dialog(0,1,"duty_girl_monolith_elite_done_1",nil,action)
end
--[[----------------------------------------------------------------------------------------------------
duty_girl_loot_stash
------------------------------------------------------------------------------------------------------]]
function duty_girl_loot_stash_init_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_loot_stash_done")) then
return false
end
local npc = dialogs.who_is_npc(a,b)
return HI("duty_girl_monolith_elite_done") and NI("duty_girl_loot_stash_init") and xr_conditions.npc_on_level(db.actor,npc,{"l05_bar"})
end
function duty_girl_loot_stash_init(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_loot_stash_init_0")
add_dialog(0,1,"duty_girl_loot_stash_init_1",nil,"dialogs_duty_girl.duty_girl_loot_stash")
add_dialog(1,2,"duty_girl_loot_stash_init_2")
end
--[[----------------------------------------------------------------------------------------------------
duty_girl_capture_the_brirge
------------------------------------------------------------------------------------------------------]]
function duty_girl_capture_the_brirge_init_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_capture_the_brirge_done")) then
return false
end
local npc = dialogs.who_is_npc(a,b)
return HI("duty_girl_loot_stash_done") and NI("duty_girl_capture_the_brirge_init") and xr_conditions.npc_on_level(db.actor,npc,{"l05_bar"})
end
function duty_girl_capture_the_brirge_init(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_capture_the_brirge_init_0")
add_dialog(0,1,"duty_girl_capture_the_brirge_init_1",nil,"dialogs_duty_girl.duty_girl_capture_the_brirge")
end
function duty_girl_capture_the_brirge_join_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_capture_the_brirge_done") or HI("duty_girl_capture_the_brirge_fail")) then
return false
end
local npc = dialogs.who_is_npc(a,b)
return HI("duty_girl_capture_the_brirge_init") and NI("duty_girl_capture_the_brirge_join") and xr_conditions.npc_on_level(db.actor,npc,{"l10_red_forest"})
end
function duty_girl_capture_the_brirge_done_con(a,b,dialog_name,pre_pid,cur_pid)
if (HI("duty_girl_capture_the_brirge_done") or HI("duty_girl_capture_the_brirge_fail")) then
return false
end
return HI("duty_girl_capture_the_brirge_dead") and NI("duty_girl_capture_the_brirge_reward")
end
function duty_girl_capture_the_brirge_done(dialog)
saved_dialog = dialog
add_dialog("",0,"duty_girl_capture_the_brirge_done_0")
local action = {
"dialogs_duty_girl.give_money_20000",
"dialogs_duty_girl.GI_duty_girl_capture_the_brirge_reward",
}
add_dialog(0,1,"duty_girl_capture_the_brirge_done_1",nil,action)
end
--[[----------------------------------------------------------------------------------------------------
Others
------------------------------------------------------------------------------------------------------]]
function red_duty_outpost_trader_concern_hostile(dialog)
saved_dialog = dialog
add_dialog("",0,"red_duty_outpost_trader_concern_hostile_0")
add_dialog(0,1,"red_duty_outpost_trader_concern_hostile_1")
end
function meet_guid_duty_outpost(dialog)
saved_dialog = dialog
add_dialog("",0,"meet_guid_duty_outpost_list_0")
add_dialog(0,1,"meet_guid_duty_outpost_list_1")
end
function travel_guid_duty_outpost(dialog)
saved_dialog = dialog
local action = {}
add_dialog("",0,"travel_guid_duty_outpost_0")
add_dialog(0,1,"travel_guid_duty_outpost_1")
action = { "dialogs_duty_girl.lost_money_1000","dialogs_mlr.l05_bar_guid" }
add_dialog(1,2,"travel_guid_duty_outpost_2","dialogs_duty_girl.have_money_1000",action)
action = { "dialogs_duty_girl.lost_money_2000","dialogs_mlr.zaton_guid" }
add_dialog(1,3,"travel_guid_duty_outpost_3","dialogs_duty_girl.have_money_2000",action)
action = { "dialogs_duty_girl.lost_money_3000","dialogs_mlr.garbage_guid" }
add_dialog(1,4,"travel_guid_duty_outpost_4","dialogs_duty_girl.have_money_3000",action)
action = { "dialogs_duty_girl.lost_money_4000","dialogs_mlr.yantar_guid" }
add_dialog(1,5,"travel_guid_duty_outpost_5","dialogs_duty_girl.have_money_4000",action)
action = { "dialogs_duty_girl.lost_money_5000","dialogs_mlr.agroprom_guid_military" }
add_dialog(1,6,"travel_guid_duty_outpost_6","dialogs_duty_girl.have_money_5000",action)
action = { "dialogs_duty_girl.lost_money_6000","dialogs_mlr.escape_village_guid" }
add_dialog(1,7,"travel_guid_duty_outpost_7","dialogs_duty_girl.have_money_6000",action)
action = { "dialogs_duty_girl.lost_money_6000","dialogs_mlr.marsh_guid" }
add_dialog(1,8,"travel_guid_duty_outpost_8","dialogs_duty_girl.have_money_6000",action)
add_dialog(1,9,"travel_guid_duty_outpost_9")
end
function travel_guid_duty_outpost_from_others_1(str)
return strformat(game.translate_string("travel_guid_duty_outpost_from_others_1"),str)
end
function travel_guid_duty_outpost_from_others_2(str)
return strformat(game.translate_string("travel_guid_duty_outpost_from_others_2"),str)
end
function travel_guid_duty_outpost_from_others_1000(dialog)
saved_dialog = dialog
local txt, action = "", {}
add_dialog("",0,"travel_guid_duty_outpost_from_others_0")
txt = travel_guid_duty_outpost_from_others_1(1000)
add_dialog(0,1,txt)
txt = travel_guid_duty_outpost_from_others_2(1000)
action = {"dialogs_duty_girl.lost_money_1000","dialogs_duty_girl.change_lvl_to_duty_outpost"}
add_dialog(1,2,txt,"dialogs_duty_girl.have_money_1000",action)
add_dialog(1,3,"travel_guid_duty_outpost_from_others_3")
end
function travel_guid_duty_outpost_from_others_2000(dialog)
saved_dialog = dialog
local txt, action = "", {}
add_dialog("",0,"travel_guid_duty_outpost_from_others_0")
txt = travel_guid_duty_outpost_from_others_1(2000)
add_dialog(0,1,txt)
txt = travel_guid_duty_outpost_from_others_2(2000)
action = {"dialogs_duty_girl.lost_money_2000","dialogs_duty_girl.change_lvl_to_duty_outpost"}
add_dialog(1,2,txt,"dialogs_duty_girl.have_money_2000",action)
add_dialog(1,3,"travel_guid_duty_outpost_from_others_3")
end
function travel_guid_duty_outpost_from_others_3000(dialog)
saved_dialog = dialog
local txt, action = "", {}
add_dialog("",0,"travel_guid_duty_outpost_from_others_0")
txt = travel_guid_duty_outpost_from_others_1(3000)
add_dialog(0,1,txt)
txt = travel_guid_duty_outpost_from_others_2(3000)
action = {"dialogs_duty_girl.lost_money_3000","dialogs_duty_girl.change_lvl_to_duty_outpost"}
add_dialog(1,2,txt,"dialogs_duty_girl.have_money_3000",action)
add_dialog(1,3,"travel_guid_duty_outpost_from_others_3")
end
function travel_guid_duty_outpost_from_others_4000(dialog)
saved_dialog = dialog
local txt, action = "", {}
add_dialog("",0,"travel_guid_duty_outpost_from_others_0")
txt = travel_guid_duty_outpost_from_others_1(4000)
add_dialog(0,1,txt)
txt = travel_guid_duty_outpost_from_others_2(4000)
action = {"dialogs_duty_girl.lost_money_4000","dialogs_duty_girl.change_lvl_to_duty_outpost"}
add_dialog(1,2,txt,"dialogs_duty_girl.have_money_4000",action)
add_dialog(1,3,"travel_guid_duty_outpost_from_others_3")
end
function travel_guid_duty_outpost_from_others_5000(dialog)
saved_dialog = dialog
local txt, action = "", {}
add_dialog("",0,"travel_guid_duty_outpost_from_others_0")
txt = travel_guid_duty_outpost_from_others_1(5000)
add_dialog(0,1,txt)
txt = travel_guid_duty_outpost_from_others_2(5000)
action = {"dialogs_duty_girl.lost_money_5000","dialogs_duty_girl.change_lvl_to_duty_outpost"}
add_dialog(1,2,txt,"dialogs_duty_girl.have_money_5000",action)
add_dialog(1,3,"travel_guid_duty_outpost_from_others_3")
end
function travel_guid_duty_outpost_from_others_6000(dialog)
saved_dialog = dialog
local txt, action = "", {}
add_dialog("",0,"travel_guid_duty_outpost_from_others_0")
txt = travel_guid_duty_outpost_from_others_1(6000)
add_dialog(0,1,txt)
txt = travel_guid_duty_outpost_from_others_2(6000)
action = {"dialogs_duty_girl.lost_money_6000","dialogs_duty_girl.change_lvl_to_duty_outpost"}
add_dialog(1,2,txt,"dialogs_duty_girl.have_money_6000",action)
add_dialog(1,3,"travel_guid_duty_outpost_from_others_3")
end
--[[----------------------------------------------------------------------------------------------------
Task
------------------------------------------------------------------------------------------------------]]
function duty_girl_hunting_chimera()
task_manager.get_task_manager():give_task("duty_girl_hunting_chimera")
end
function duty_girl_monolith_elite()
task_manager.get_task_manager():give_task("duty_girl_monolith_elite")
end
function duty_girl_loot_stash()
task_manager.get_task_manager():give_task("duty_girl_loot_stash")
end
function duty_girl_capture_the_brirge()
task_manager.get_task_manager():give_task("duty_girl_capture_the_brirge")
end
--[[----------------------------------------------------------------------------------------------------
Info
------------------------------------------------------------------------------------------------------]]
function GI_duty_girl_first_meet(a,b)
return GI("duty_girl_first_meet")
end
function GI_duty_girl_hunting_chimera_move(a,b)
return GI("duty_girl_hunting_chimera_move")
end
function GI_duty_girl_hunting_chimera_reward(a,b)
return GI("duty_girl_hunting_chimera_reward")
end
function GI_duty_girl_monolith_elite_join(a,b)
return GI("duty_girl_monolith_elite_join")
end
function GI_duty_girl_monolith_elite_reward(a,b)
return GI("duty_girl_monolith_elite_reward")
end
function GI_duty_girl_capture_the_brirge_reward(a,b)
return GI("duty_girl_capture_the_brirge_reward")
end
--[[----------------------------------------------------------------------------------------------------
Phrases
------------------------------------------------------------------------------------------------------]]
function get_phrase_monolith_elite_join_0(a,b)
return NI("duty_girl_monolith_elite_supply") and
GT("duty_girl_monolith_elite_join_0") or
GT("duty_girl_monolith_elite_join_2")
end
function get_phrase_monolith_elite_join_1(a,b)
return NI("duty_girl_monolith_elite_supply") and
GT("duty_girl_monolith_elite_join_1") or " "
end
function action_monolith_elite_join(a,b)
if NI("duty_girl_monolith_elite_supply") then
give_item_monolith_elite_supply(a,b)
else
GI("duty_girl_monolith_elite_join")
dialogs.break_dialog(a,b)
end
end
function get_phrase_capture_the_brirge_join_0(a,b)
return NI("duty_girl_capture_the_brirge_supply") and
GT("duty_girl_capture_the_brirge_join_0") or
GT("duty_girl_capture_the_brirge_join_2")
end
function get_phrase_capture_the_brirge_join_1(a,b)
return NI("duty_girl_capture_the_brirge_supply") and
GT("duty_girl_capture_the_brirge_join_1") or " "
end
function action_capture_the_brirge_join(a,b)
if NI("duty_girl_capture_the_brirge_supply") then
give_item_capture_the_brirge_join(a,b)
else
GI("duty_girl_capture_the_brirge_join")
dialogs.break_dialog(a,b)
end
end
--[[----------------------------------------------------------------------------------------------------
Utilites
------------------------------------------------------------------------------------------------------]]
function give_money_8000(a,b)
return dialogs.relocate_money_to_actor(a,b,8000)
end
function give_money_12000(a,b)
return dialogs.relocate_money_to_actor(a,b,12000)
end
function give_money_20000(a,b)
return dialogs.relocate_money_to_actor(a,b,20000)
end
function have_money_1000(a,b)
return mlr_utils.have_money(1000)
end
function have_money_2000(a,b)
return mlr_utils.have_money(2000)
end
function have_money_3000(a,b)
return mlr_utils.have_money(3000)
end
function have_money_4000(a,b)
return mlr_utils.have_money(4000)
end
function have_money_5000(a,b)
return mlr_utils.have_money(5000)
end
function have_money_6000(a,b)
return mlr_utils.have_money(6000)
end
function lost_money_1000(a,b)
return dialogs.relocate_money_from_actor(a,b,1000)
end
function lost_money_2000(a,b)
return dialogs.relocate_money_from_actor(a,b,2000)
end
function lost_money_3000(a,b)
return dialogs.relocate_money_from_actor(a,b,3000)
end
function lost_money_4000(a,b)
return dialogs.relocate_money_from_actor(a,b,4000)
end
function lost_money_5000(a,b)
return dialogs.relocate_money_from_actor(a,b,5000)
end
function lost_money_6000(a,b)
return dialogs.relocate_money_from_actor(a,b,6000)
end
local function give_items(p)
if not(p and is_not_empty(p)) then return end
for sec,num in pairs(p) do
if (sec and num) then
if (IsItem("ammo",sec)) then
alife_create_item(sec,db.actor,{ammo = num})
else
for k=1,num do
alife_create_item(sec,db.actor)
end
end
news_manager.relocate_item(db.actor,"in",sec,num)
end
end
end
function give_item_monolith_elite_supply(a,b)
give_items({bandage = 5, medkit_army = 3})
GI("duty_girl_monolith_elite_supply")
end
function give_item_capture_the_brirge_join(a,b)
give_items({bandage = 5, medkit_army = 3})
GI("duty_girl_capture_the_brirge_supply")
end
function change_lvl_to_duty_outpost(a,b)
if (db.actor:is_talking()) then
db.actor:stop_talk()
end
local smart = SIMBOARD.smarts_by_names["red_smart_terrain_bridge"]
if (smart) then
ChangeLevel(vector():set(-118,5,-256),smart.m_level_vertex_id,smart.m_game_vertex_id,vector():set(0,0,-1),true)
end
end

View File

@ -0,0 +1,136 @@
local HI = has_alife_info
local GI = give_info
local DI = disable_info
function NI(str)
return not (has_alife_info(str))
end
--[[----------------------------------------------------------------------------------------------------
Main
------------------------------------------------------------------------------------------------------]]
function duty_girl_init()
if (NI("duty_girl_init")) then
if not (get_story_se_object("squad_duty_girl")) then
local smart = SIMBOARD.smarts_by_names["bar_dolg_general"]
local squad = SIMBOARD:create_squad(smart,"squad_duty_girl")
--[[
if (squad) then
for k in squad:squad_members() do
local se = k.id and alife():object(k.id)
if (se) then
local sim = alife()
for i=1,65534 do
local wpn = sim:object(i)
if (wpn and wpn.parent_id and (wpn.parent_id == se.id) and string.find(wpn:name(),"wpn_"))then
safe_release_manager.release(wpn)
end
end
alife():create("wpn_groza",se.position,se.m_level_vertex_id,se.m_game_vertex_id,se.id)
end
end
end
--]]
end
if (get_story_se_object("squad_duty_girl")) then
GI("duty_girl_init")
end
end
end
function anna_no_hip_allowed()
local ann = get_story_se_object("stalker_duty_girl")
if (ann and alife():has_info(ann.id,"npcx_is_companion")) then
local hip = get_story_se_object("devushka")
if (hip and alife():has_info(hip.id,"npcx_is_companion")) then
local npc = db.storage[ann.id] and db.storage[ann.id].object or level.object_by_id(ann.id)
if (npc) then
dialogs_axr_companion.remove_companions_from_squad(db.actor,npc)
end
end
else
return true
end
end
function actor_on_first_update()
duty_girl_init()
CreateTimeEvent(AC_ID,"anna_no_hip_allowed",1000,anna_no_hip_allowed)
end
function npcs_friendly_to_community(npc_1,npc_2,com)
local com_1 = npc_1 and character_community(npc_1)
local com_2 = npc_2 and character_community(npc_2)
if (com_1 and com_2 and (not game_relations.is_factions_enemies(com_1,com)) and (not game_relations.is_factions_enemies(com_2,com))) then
return true
end
return false
end
function npc_on_before_hit(npc,shit,bone_id,flags)
if (npc and string.find(npc:name(),"stalker_duty_girl")) then
flags.ret_value = false
end
end
function on_enemy_eval(npc,ene,flags)
if (npc:has_info("npcx_is_companion") or ene:has_info("npcx_is_companion")) then
local com = character_community(db.actor)
if (com and npcs_friendly_to_community(npc,ene,com)) then
flags.override = true
flags.result = false
end
end
end
--[[
function npc_on_choose_weapon(npc,cur_wpn,flags)
if not (npc and unique_character_storage[npc:section()] and unique_character_storage[npc:section()].weapon) then
return
end
local wpn_section = unique_character_storage[npc:section()].weapon
if not (wpn_section and (wpn_section ~= "") and (wpn_section ~= "nil")) then
return
end
if (cur_wpn and (cur_wpn:section() == wpn_section)) then
return
end
local function itr(npc,itm)
if (itm and (itm:section() ~= wpn_section) and IsWeapon(itm)) then
local se = alife():object(itm:id())
if (se) then
safe_release_manager.release(se)
end
end
end
npc:iterate_inventory(itr,npc)
if (npc:object(wpn_section)) then
return
end
alife():create(wpn_section,npc:position(),npc:level_vertex_id(),npc:game_vertex_id(),npc:id())
end
--]]
--[[----------------------------------------------------------------------------------------------------
Registers
------------------------------------------------------------------------------------------------------]]
function on_game_start()
RegisterScriptCallback("actor_on_first_update",actor_on_first_update)
RegisterScriptCallback("npc_on_before_hit",npc_on_before_hit)
RegisterScriptCallback("on_enemy_eval",on_enemy_eval)
--RegisterScriptCallback("npc_on_choose_weapon",npc_on_choose_weapon)
end
--[[----------------------------------------------------------------------------------------------------
Debug
------------------------------------------------------------------------------------------------------]]
--[[
cmd = debug_cmd_list.command_get_list()
function cmd.chan()
duty_girl_init()
end
--]]

View File

@ -0,0 +1,149 @@
local HI = has_alife_info
local GI = give_info
local DI = disable_info
function NI(str)
return not (has_alife_info(str))
end
local storage_data = {}
function reinforce_squad(actor,obj,p)
local squad = p and p[1] and get_story_se_object(p[1])
local smart = squad and squad.smart_id and db.smart_terrain_by_id[squad.smart_id]
if not (squad and smart) then
return
end
local lst = ini_sys:r_string_ex(squad:section_name(),"npc_random")
lst = lst and parse_names(lst)
local str = ini_sys:r_string_ex(squad:section_name(),"npc_in_squad")
str = str and str_explode(str,",")
local num = str and (tonumber(str[2]) or tonumber(str[1]))
--printf("GhenTuong: refill_squad %s",squad:section_name())
if (lst and num) then
local n = tonumber(p[2]) or 1
for k=1,n do
if (squad:npc_count() < num) then
local sec = lst[math.random(#lst)]
local commander = alife_object(squad:commander_id())
if (sec and ini_sys:section_exist(sec) and commander) then
local pos = commander.position
local vid = commander.m_level_vertex_id
local gid = commander.m_game_vertex_id
local id = squad:add_squad_member(sec,pos,vid,gid)
local se = id and alife_object(id)
if (se) then
smart:register_npc(se)
SIMBOARD:setup_squad_and_group(se)
end
squad:update()
end
end
end
end
end
function clean_mess(actor,smart,p)
if (HI("duty_outpost_clean_mess")) then
return
end
local zone = db.zone_by_name["red_smart_terrain_bridge_surge_hide_a1"]
if (smart and zone) then
local section_list = {
["physic_destroyable_object"] = true,
["explosive_barrel_low"] = true,
["explosive_hide"] = true,
}
for id=1,65534 do
local se = alife():object(id)
if (se and section_list[se:section_name()] and simulation_objects.is_on_the_same_level(se,smart) and zone:inside(se.position)) then
safe_release_manager.release(se)
printf("Release [%s]",se:name())
end
end
GI("duty_outpost_clean_mess")
end
end
function play_sound(actor,obj,p)
if (p and p[1]) then
local snd = xr_sound.set_sound_play(obj:id(),p[1])
if (snd and tonumber(p[2]) and (snd.volume ~= tonumber(p[2]))) then
snd.volume = tonumber(p[2])
end
end
end
function level_is_red_forest()
return (level.name() == "l05_bar")
end
function npcs_friendly_to_community(npc_1,npc_2,com)
local com_1 = npc_1 and character_community(npc_1)
local com_2 = npc_2 and character_community(npc_2)
--printf("GhenTuong: %s %s %s %s %s",com_1,com_2,com,game_relations.is_factions_enemies(com_1,com),game_relations.is_factions_enemies(com_2,com))
if (com_1 and com_2 and (not game_relations.is_factions_enemies(com_1,com)) and (not game_relations.is_factions_enemies(com_2,com))) then
return true
end
return false
end
function npc_on_before_hit(npc,shit,bone_id,flags)
if not (HI("red_bridge_outpost") and level_is_red_forest()) then
return
end
if (storage_data.actor_crime) then
return
end
if (shit and shit.draftsman) then
if (shit.draftsman:id() == AC_ID) then
if (npcs_friendly_to_community(npc,shit.draftsman,"dolg")) then
storage_data.actor_crime = true
end
end
end
end
function on_enemy_eval(npc,ene,flags)
if not (HI("red_bridge_outpost") and level_is_red_forest()) then
return
end
if not (IsStalker(npc) and IsStalker(ene)) then
return
end
if (npcs_friendly_to_community(npc,ene,"dolg")) then
if (storage_data.actor_crime and (ene:id() == AC_ID)) then
return
end
flags.override = true
flags.result = false
end
end
function save_state(m_data)
m_data.gameplay_duty_outpost_storage_data = storage_data
end
function load_state(m_data)
storage_data = m_data.gameplay_duty_outpost_storage_data or {}
end
function on_level_changing()
storage_data.actor_crime = nil
end
--[[----------------------------------------------------------------------------------------------------
Registers
------------------------------------------------------------------------------------------------------]]
function on_game_start()
RegisterScriptCallback("save_state",save_state)
RegisterScriptCallback("load_state",load_state)
RegisterScriptCallback("on_level_changing",on_level_changing)
RegisterScriptCallback("npc_on_before_hit",npc_on_before_hit)
RegisterScriptCallback("on_enemy_eval",on_enemy_eval)
end

View File

@ -0,0 +1,230 @@
local HI = has_alife_info
local GI = give_info
local DI = disable_info
function NI(str)
return not (has_alife_info(str))
end
function create_squad(smart_name,section)
local smart = SIMBOARD.smarts_by_names[smart_name]
if (smart and not get_story_se_object(section)) then
SIMBOARD:create_squad(smart,section)
end
return get_story_se_object(section)
end
function kill_common_enemy(enemy,npc,p)
if (xr_conditions.is_enemy_actor_or_companion(enemy,npc,p)) then
return
end
if (get_object_story_id(enemy:id())) then
return
end
local squad = get_object_squad(enemy)
if (squad and squad.common and (not get_object_story_id(squad.id))) then
local function itr(npc_id,ene_id)
local obj = npc_id and level.object_by_id(npc_id)
local ene = ene_id and level.object_by_id(ene_id)
if (obj and obj:alive() and ene and ene:alive()) then
local h = hit()
h.power = 1
h.direction = vector():set(0,-1,0)
h.bone = "bip01_spine"
h.draftsman = obj
h.impulse = 0
h.type = hit.wound
ene:hit(h)
end
return true
end
CreateTimeEvent(npc:id(),"kill_common_enemy" .. enemy:id(),0,itr,npc:id(),enemy:id())
end
end
function actor_sprint(actor,npc,p)
if (IsMoveState("mcSprint")) then
return true
end
return false
end
function ray_cast_to_actor_le(actor,npc,p)
local act_pos = db.actor and db.actor:position()
local npc_pos = npc and npc:position()
if (act_pos and npc_pos and tonumber(p[1])) then
local dir = vector():set((act_pos):sub(npc_pos)):normalize()
local pick = ray_pick()
pick:set_position(vector():set(npc_pos.x,npc_pos.y+0.5,npc_pos.z))
pick:set_direction(dir)
pick:set_ignore_object(db.actor)
pick:set_flags(2)
pick:set_range(tonumber(p[1])+5)
pick:query()
local distance = pick:get_distance()
if (distance and (distance < tonumber(p[1]))) then
return true
end
end
return false
end
--[[----------------------------------------------------------------------------------------------------
Quests
------------------------------------------------------------------------------------------------------]]
function lure_prey_init()
if (NI("me_lure_prey_init")) then
local smart = SIMBOARD.smarts_by_names["rad2_prip_teleport"]
if (smart) then
SIMBOARD:create_squad(smart,"squad_lure_prey_controller_1")
SIMBOARD:create_squad(smart,"squad_lure_prey_phantom")
local p = vector():set(663.0,-43.60,169.5)
alife():create("merc_outfit",vec_add(p,vector():set(-0.2,0.0,0.0)),smart.m_level_vertex_id,smart.m_game_vertex_id)
alife():create("helm_m40",vec_add(p,vector():set(-0.2,0.0,0.4)),smart.m_level_vertex_id,smart.m_game_vertex_id)
alife():create("wpn_lr300",vec_add(p,vector():set(0.2,0.0,0.0)),smart.m_level_vertex_id,smart.m_game_vertex_id)
alife():create("ammo_5.56x45_fmj",vec_add(p,vector():set(0.6,0.0,0.3)),smart.m_level_vertex_id,smart.m_game_vertex_id)
alife():create("ammo_5.56x45_fmj",vec_add(p,vector():set(0.6,0.0,0.1)),smart.m_level_vertex_id,smart.m_game_vertex_id)
alife():create("ammo_5.56x45_fmj",vec_add(p,vector():set(0.6,0.0,-0.1)),smart.m_level_vertex_id,smart.m_game_vertex_id)
alife():create("ammo_5.56x45_fmj",vec_add(p,vector():set(0.4,0.0,0.3)),smart.m_level_vertex_id,smart.m_game_vertex_id)
alife():create("ammo_5.56x45_fmj",vec_add(p,vector():set(0.4,0.0,0.1)),smart.m_level_vertex_id,smart.m_game_vertex_id)
alife():create("ammo_5.56x45_fmj",vec_add(p,vector():set(0.4,0.0,-0.1)),smart.m_level_vertex_id,smart.m_game_vertex_id)
alife():create("grenade_f1",vec_add(p,vector():set(0.6,0.0,-0.3)),smart.m_level_vertex_id,smart.m_game_vertex_id)
alife():create("grenade_f1",vec_add(p,vector():set(0.6,0.0,-0.3)),smart.m_level_vertex_id,smart.m_game_vertex_id)
end
GI("me_lure_prey_init")
end
end
function lure_prey_before_hit(npc,shit,bone_id,flags)
if (shit.draftsman and (shit.draftsman:id() == AC_ID)) then
if (NI("me_lure_prey_argo")) then
GI("me_lure_prey_argo")
end
return
end
flags.ret_value = false
end
function lure_prey_set_stalker(actor,npc,p)
if (db.actor and npc) then
local com_1 = db.actor:character_community()
local com_2 = npc:character_community()
if (com_1 and com_2 and not string.find(com_1,com_2)) then
local str = string.gsub(com_1,"actor_","")
npc:set_character_community(str)
end
end
end
--[[----------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------]]
function bloodsucker_val_init()
if (NI("me_bloodsucker_val_init")) then
local smart = SIMBOARD.smarts_by_names["val_smart_terrain_1_2"]
if (smart) then
SIMBOARD:create_squad(smart,"squad_bloodsucker_val_1")
SIMBOARD:create_squad(smart,"squad_bloodsucker_val_2")
SIMBOARD:create_squad(smart,"squad_bloodsucker_val_3")
end
GI("me_bloodsucker_val_init")
end
end
function bloodsucker_val_actor_sprint(actor,npc,p)
if not (IsMoveState("mcSprint")) then
return false
end
local pos = db.actor and db.actor:position()
if not (pos) then
return false
end
if not (170 < pos.x and pos.x < 177) then
return false
end
if not (-280 < pos.z and pos.z < -263) then
return false
end
return true
end
function bloodsucker_val_dead(actor,obj,p)
if (obj) then
local sec = {"squad_bloodsucker_val_1","squad_bloodsucker_val_2","squad_bloodsucker_val_3"}
for i,v in pairs (sec) do
if (string.find(obj:section_name(),v)) then
for ii,vv in pairs(sec) do
if (not string.find(obj:section_name(),vv) and get_story_se_object(vv)) then
return
end
end
if (NI("me_bloodsucker_val_dead")) then
GI("me_bloodsucker_val_dead")
end
return
end
end
end
end
--[[----------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------]]
function sleeping_snork_init()
if (NI("me_sleeping_snork_init")) then
create_squad("jup_b47","squad_sleeping_bloodsucker_jup_1")
create_squad("jup_b47","squad_sleeping_bloodsucker_jup_2")
--create_squad("jup_b47","squad_sleeping_bloodsucker_jup_3")
GI("me_sleeping_snork_init")
end
end
--[[----------------------------------------------------------------------------------------------------
Registers
------------------------------------------------------------------------------------------------------]]
function actor_on_first_update()
lure_prey_init()
bloodsucker_val_init()
end
function on_game_start()
RegisterScriptCallback("actor_on_first_update",actor_on_first_update)
end
--[[----------------------------------------------------------------------------------------------------
Debug
------------------------------------------------------------------------------------------------------]]
--[[
cmd = debug_cmd_list.command_get_list()
function cmd.misc1()
lure_prey_init()
story_mercenary_leader()
end
function cmd.misc2()
bloodsucker_val_init()
end
function cmd.misc2kill1()
xr_effects.kill_squad(nil,nil,{"squad_bloodsucker_val_1"})
end
function cmd.misc2kill2()
xr_effects.kill_squad(nil,nil,{"squad_bloodsucker_val_2"})
end
function cmd.misc2kill3()
xr_effects.kill_squad(nil,nil,{"squad_bloodsucker_val_3"})
end
function cmd.misc3()
sleeping_snork_init()
end
function cmd.misc3kill()
xr_effects.kill_squad(nil,nil,{"squad_sleeping_snork_1"})
xr_effects.kill_squad(nil,nil,{"squad_sleeping_snork_2"})
xr_effects.kill_squad(nil,nil,{"squad_sleeping_snork_3"})
end
--]]

View File

@ -0,0 +1,303 @@
local STEP_SIZE = 5
local STEP_SIZE_OFFLINE = 1
local _mej = {
['logic@bar_zastava_guard_1_walk'] = "logic@duty_guard1",
['logic@bar_zastava_guard_2_walk'] = "logic@duty_guard2",
['logic@bar_zastava_guard_3_walk'] = "logic@duty_guard3",
['logic@bar_zastava_guard_4_walk'] = "logic@duty_guard4",
['logic@bar_zastava_guard_5_walk'] = "logic@duty_guard5",
['logic@bar_zastava_guard_6_walk'] = "logic@duty_guard6",
['logic@bar_zastava_guard_7_walk'] = "logic@duty_guard7",
['logic@bar_zastava_guard_8_walk'] = "logic@duty_guard8",
['logic@bar_zastava_guard_9_walk'] = "logic@duty_guard9",
['logic@follower_bar_zastava_guard_1_walk'] = "logic@duty_guard1",
['logic@follower_bar_zastava_guard_2_walk'] = "logic@duty_guard2",
['logic@follower_bar_zastava_guard_4_walk'] = "logic@duty_guard4",
['logic@follower_bar_zastava_guard_5_walk'] = "logic@duty_guard5",
['logic@follower_bar_zastava_guard_6_walk'] = "logic@duty_guard6",
['logic@follower_bar_zastava_guard_7_walk'] = "logic@duty_guard7",
['logic@follower_bar_zastava_guard_8_walk'] = "logic@duty_guard8",
}
local function allowed(a)
-- printf('allowed: %s',a.section)
if not _mej[a.section] then
return true
end
for k in pairs(db.storage) do
if tonumber(k) and db.storage[k] and db.storage[k].section_logic == _mej[a.section] then
-- printf('[%s] disallowed because [%s] (%s) taken', a.section, db.storage[k].section_logic, _mej[a.section])
return false
end
end
return true
end
local function job_avail_to_npc(npc_info, job, smart)
--[[
if (smart.dead_time[job.section]) then
return false
end
--]]
local precond = gulag_general.get_job_precondition(job)
if (precond) then
return allowed({ section = job.section}) and precond(npc_info.se_obj, smart, job, npc_info)
end
return true
end
function smart_terrain.se_smart_terrain:unregister_npc(obj)
--utils_data.debug_write(strformat("%s:%s:unregister_npc %s",self:name(),self.id,obj and obj:name()))
self.arriving_npc[obj.id] = nil
if (obj.clear_smart_terrain) then
obj:clear_smart_terrain()
end
self:clear_job(obj.id,true)
---[[GhenTuong: ----------------------------------------
if (xr_logic_ex and xr_logic_ex.ignore_smart_job and xr_logic_ex.ignore_smart_job(obj)) then
return
end
------------------------------------------------------]]
local st = db.storage[obj.id]
if (st and st.object) then
local cls = obj.clsid and obj:clsid()
if not (cls) then
return
end
local stype = IsStalker(nil,cls) and 0 or IsMonster(nil,cls) and 1 or IsHelicopter(nil,cls) and 3 or nil
if not (stype) then
return
end
xr_logic.initialize_obj(st.object, st, false, db.actor, stype)
end
--printf("self.npc_info[obj.id] = nil !!! obj.id=%s [%s]", obj.id,obj:name())
end
function smart_terrain.se_smart_terrain:select_npc_job(npc_info,now,surge_started)
if (self.disabled or not self.is_on_actor_level) then
return
end
---[[GhenTuong: ----------------------------------------
if (xr_logic_ex and xr_logic_ex.ignore_smart_job and xr_logic_ex.ignore_smart_job(npc_info and npc_info.se_obj)) then
return
end
------------------------------------------------------]]
--utils_data.debug_write(strformat("%s:select_npc_job %s",self:name()))
if not (npc_info and npc_info.se_obj and npc_info.stype) then
return printf("%s no npc_info!",self:name())
end
-- reference job table according to race
local jobs = npc_info.stype == 0 and self.stalker_jobs or npc_info.stype == 1 and self.monster_jobs or npc_info.stype == 3 and self.heli_jobs
if not (jobs) then
return printf("%s no job table for %s [stype = %s]",self:name(),npc_info.se_obj:name(),npc_info.stype)
end
local new_job
local npc_by_job_section = self.npc_by_job_section
-- If the NPC has an existing job link, validate it and iterate job table
-- for a higher priority job according to defined STEP_SIZE
if (npc_info.job) then
-- Make sure current job is still available
if (npc_by_job_section[npc_info.job.section] == npc_info.se_obj.id) then
-- Make sure current job is still available
if (job_avail_to_npc(npc_info,npc_info.job,self)) then
if (npc_info.current_index == nil or now) then
npc_info.current_index = 1
end
local get_job_prior = gulag_general.get_job_prior
local itr_job
local npc_id
local step = 1
while (new_job == nil and step <= (now and #jobs or st and STEP_SIZE or STEP_SIZE_OFFLINE)) do
step = step + 1
if (npc_info.current_index > #jobs) then
npc_info.current_index = 1
break
end
-- Step through job table one step at a time looking for a higher prior job
itr_job = jobs[npc_info.current_index]
npc_info.current_index = npc_info.current_index + 1
npc_id = npc_by_job_section[itr_job.section]
-- Check empty job
--if (npc_id == nil or npc_id == npc_info.se_obj.id) then
if (npc_id == nil) then
-- Find only higher priority jobs if already linked to a job
if (get_job_prior(itr_job) > get_job_prior(npc_info.job)) then
if (job_avail_to_npc(npc_info, itr_job, self)) then
-- Only take this higher priority job if when there is either no surge or if job is not in surge cover during surge; takes exclusive no matter what
if (itr_job.exclusive or not xr_conditions.surge_started() or not surge_manager.job_in_surge_cover(npc_info.se_obj,npc_info.job)) then
new_job = itr_job
npc_info.current_index = 1
end
end
end
end
end
else
-- Job is no longer available, unlink job info
for sec,npcid in pairs(npc_by_job_section) do
if (npcid == npc_info.se_obj.id) then
npc_by_job_section[sec] = nil
end
end
npc_info.job = nil
npc_info.current_index = 1
end
else
-- Job is not linked properly, npc_id doesn't match owner se_obj
for sec,npcid in pairs(npc_by_job_section) do
if (npcid == npc_info.se_obj.id) then
npc_by_job_section[sec] = nil
end
end
npc_info.job = nil
npc_info.current_index = 1
end
end
if not (npc_info.job) then
if (npc_info.current_index == nil or now) then
npc_info.current_index = 1
end
local itr_job,npc_id
local step = 1
local st = db.storage[npc_info.se_obj.id]
local STEP_SIZE_NO_JOB = #jobs
while (new_job == nil and step <= (now and STEP_SIZE_NO_JOB or st and STEP_SIZE_NO_JOB or STEP_SIZE_OFFLINE)) do
step = step + 1
if (npc_info.current_index > STEP_SIZE_NO_JOB) then
npc_info.current_index = 1
break
end
-- Step through job table one step at a time looking for a high prior job
itr_job = jobs[npc_info.current_index]
npc_info.current_index = npc_info.current_index + 1
npc_id = npc_by_job_section[itr_job.section]
-- validate existing job link
if (npc_id and not self.npc_info[npc_id]) then
npc_by_job_section[itr_job.section] = nil
end
-- Check empty job or re-take current job
if (npc_id == nil or npc_id == npc_info.se_obj.id) and (job_avail_to_npc(npc_info, itr_job, self)) then
new_job = itr_job
npc_info.current_index = 1
end
end
if not (new_job) then
return
end
end
local id = npc_info.se_obj.id
-- newly selected job
if (new_job and new_job ~= npc_info.job) then
-- Unassign npc_id from old job and unreference job section
for sec,npcid in pairs(npc_by_job_section) do
if (npcid == id) then
npc_by_job_section[sec] = nil
end
end
-- setup table that references NPCs by their job section
npc_by_job_section[new_job.section] = id
-- link up NPC info and references
npc_info.job = new_job
npc_info.begin_job = false
-- grab storage and ensure object is online.
local st = self.online and db.storage[id]
-- If NPC has storage, it is online, so switch logic
if (st and st.object) then
--xr_logic.switch_to_section(st.object, self.ltx, "nil")
npc_info.begin_job = true
empty_table(db.offline_objects[id])
self:setup_logic(st.object)
return true
end
end
if (npc_info.begin_job ~= true and npc_info.job) then
-- grab storage and ensure object is online.
local st = self.online and db.storage[id]
-- If NPC has storage it is online, so switch logic
if (st and st.object) then
npc_info.begin_job = true
empty_table(db.offline_objects[id])
self:setup_logic(st.object)
return true
end
end
end
function smart_terrain.setup_gulag_and_logic_on_spawn(obj, st, se_obj, stype, loaded)
--utils_data.debug_write(strformat("smart_terrain.setup_gulag_and_logic_on_spawn %s",obj and obj:name()))
local sim = alife()
---[[GhenTuong: ----------------------------------------
if (xr_logic_ex and xr_logic_ex.ignore_smart_job and xr_logic_ex.ignore_smart_job(se_obj)) then
return
end
------------------------------------------------------]]
-- Expedite arrival and job assignment
local smart = se_obj.m_smart_terrain_id and se_obj.m_smart_terrain_id ~= 65535 and sim:object(se_obj.m_smart_terrain_id)
if (smart and smart:clsid() == clsid.smart_terrain) then
local npc_info = smart.npc_info[se_obj.id]
if (npc_info) then
if not (npc_info.job) then
smart:select_npc_job(npc_info,true)
local smart_task = smart.npc_info[se_obj.id].job and smart.npc_info[se_obj.id].job.alife_task
if (smart_task) then
db.spawned_vertex_by_id[se_obj.id] = smart_task:level_vertex_id()
end
elseif (npc_info.job) then
-- if already job begin then don't spawn at job
local smart_task = npc_info.begin_job ~= true and npc_info.job and npc_info.job.alife_task or nil
if (smart_task) then
db.spawned_vertex_by_id[se_obj.id] = smart_task:level_vertex_id()
end
npc_info.begin_job = true
empty_table(db.offline_objects[se_obj.id])
smart:setup_logic(obj)
end
return
end
end
xr_logic.initialize_obj(obj, st, loaded, db.actor, stype)
end

View File

@ -0,0 +1,553 @@
local HI = has_alife_info
local GI = give_info
local DI = disable_info
function NI(str)
return not (has_alife_info(str))
end
--[[----------------------------------------------------------------------------------------------------
duty_girl_hunting_chimera
------------------------------------------------------------------------------------------------------]]
function duty_girl_hunting_chimera_status(tsk,task_id)
local sec = "squad_duty_girl_hunting_chimera"
if (tsk.stage == 0) then
if (HI("duty_girl_hunting_chimera_move")) then
local smart = SIMBOARD.smarts_by_names["gar_smart_terrain_2_4"]
local squad = SIMBOARD:create_squad(smart,sec)
tsk.stage = 1
end
end
if (tsk.stage == 1) then
local squad = get_story_se_object(sec)
if not (squad) then
local function message()
local npc = get_story_object("stalker_duty_girl")
if (npc and db.actor) then
if (NI("duty_girl_hunting_chimera_hunt_4") and xr_conditions.check_time_speech(db.actor,npc)) then
GI("duty_girl_hunting_chimera_hunt_4")
xr_effects.speech(db.actor,npc,{"duty_girl_hunting_chimera_hunt_4",5})
end
end
if (HI("duty_girl_hunting_chimera_hunt_4")) then
return true
end
end
local npc = get_story_object("stalker_duty_girl")
if (npc) then
CreateTimeEvent(npc:id(),"speech",0,message)
end
tsk.stage = 2
end
end
if (tsk.stage == 2) then
if (NI("duty_girl_hunting_chimera_dead")) then
GI("duty_girl_hunting_chimera_dead")
end
if (HI("duty_girl_hunting_chimera_reward")) then
return "complete"
end
end
end
function duty_girl_hunting_chimera_target(task_id,field,p,tsk)
if (field == "title") then
return task_id.."_"..field
end
if (field == "descr") then
if (tsk.stage == 0) then
return task_id.."_"..field.."_1"
end
if (tsk.stage == 1) then
return task_id.."_"..field.."_2"
end
if (tsk.stage == 2) then
return task_id.."_"..field.."_3"
end
end
if (field == "target") then
if (tsk.stage == 0) then
local obj = SIMBOARD.smarts_by_names["gar_smart_terrain_6_3"]
return obj and obj.id
end
if (tsk.stage == 1) or (tsk.stage == 2) then
local obj = get_story_se_object("squad_duty_girl")
return obj and obj.id
end
end
end
function hunting_chimera_hit(npc,shit,bone_id,flags)
if (shit and shit.draftsman and IsStalker(shit.draftsman)) then
if (shit.draftsman:id() == AC_ID) then
if (NI("duty_girl_hunting_chimera_fight")) then
GI("duty_girl_hunting_chimera_fight")
end
return
end
if (shit.draftsman:has_info("npcx_is_companion") or string.find(shit.draftsman:name(),"stalker_duty_girl")) then
if (NI("duty_girl_hunting_chimera_fight")) then
GI("duty_girl_hunting_chimera_fight")
end
shit.power = shit.power / 2
return
end
end
flags.ret_value = false
end
--[[----------------------------------------------------------------------------------------------------
duty_girl_monolith_elite
------------------------------------------------------------------------------------------------------]]
function duty_girl_monolith_elite_status(tsk,task_id)
if (tsk.stage == 0) then
SIMBOARD:create_squad(SIMBOARD.smarts_by_names["mil_smart_terrain_2_6"],"squad_duty_girl_monolith_elite_mono")
SIMBOARD:create_squad(SIMBOARD.smarts_by_names["mil_smart_terrain_4_5"],"squad_duty_girl_monolith_elite_duty")
tsk.stage = 1
end
if (tsk.stage == 1) or (tsk.stage == 2) then
local squad = get_story_se_object("squad_duty_girl_monolith_elite_mono")
local mem_num = squad and squad:npc_count() or 0
if (mem_num ~= 0) then
-- Player attack without order
if (mem_num < 8) then
if (NI("duty_girl_monolith_elite_move")) then
GI("duty_girl_monolith_elite_move")
if (NI("duty_girl_monolith_elite_join")) then
GI("duty_girl_monolith_elite_join")
end
local function message()
local npc = get_story_object("stalker_duty_girl")
if (npc and db.actor) then
if (NI("duty_girl_monolith_elite_move_5") and xr_conditions.check_time_speech(db.actor,npc)) then
GI("duty_girl_monolith_elite_move_5")
xr_effects.speech(db.actor,npc,{"duty_girl_monolith_elite_move_5",5})
end
if (NI("duty_girl_monolith_elite_move_6") and xr_conditions.check_time_speech(db.actor,npc)) then
GI("duty_girl_monolith_elite_move_6")
xr_effects.speech(db.actor,npc,{"duty_girl_monolith_elite_move_6",5})
end
end
if (HI("duty_girl_monolith_elite_move_6")) then
return true
end
end
local npc = get_story_object("stalker_duty_girl")
if (npc) then
CreateTimeEvent(npc:id(),"speech",0,message)
end
end
end
else
-- Squad is killed
local function message()
local npc = get_story_object("stalker_duty_girl")
if (npc and db.actor) then
if (NI("duty_girl_monolith_elite_move_4") and xr_conditions.check_time_speech(db.actor,npc)) then
GI("duty_girl_monolith_elite_move_4")
xr_effects.speech(db.actor,npc,{"duty_girl_monolith_elite_move_4",5})
end
end
if (HI("duty_girl_monolith_elite_move_4")) then
return true
end
end
local npc = get_story_object("stalker_duty_girl")
if (npc) then
CreateTimeEvent(npc:id(),"speech",0,message)
end
tsk.stage = 3
end
if (tsk.stage == 1) then
if (HI("duty_girl_monolith_elite_move")) then
tsk.stage = 2
end
end
end
if (tsk.stage == 3) then
if (NI("duty_girl_monolith_elite_dead")) then
GI("duty_girl_monolith_elite_dead")
end
if (HI("duty_girl_monolith_elite_reward")) then
return "complete"
end
end
end
function duty_girl_monolith_elite_target(task_id,field,p,tsk)
if (field == "title") then
return task_id.."_"..field
end
if (field == "descr") then
if (tsk.stage == 0) or (tsk.stage == 1) then
return task_id.."_"..field.."_1"
end
if (tsk.stage == 2) then
return task_id.."_"..field.."_2"
end
if (tsk.stage == 3) then
return task_id.."_"..field.."_3"
end
end
if (field == "target") then
if (tsk.stage == 0) or (tsk.stage == 1) then
local obj = get_story_se_object("squad_duty_girl")
local sqd = get_story_se_object("squad_duty_girl_monolith_elite_duty")
if (obj and sqd and simulation_objects.is_on_the_same_level(obj,sqd)) then
return obj.id
end
return sqd and sqd.id
end
if (tsk.stage == 2) then
local obj = SIMBOARD.smarts_by_names["mil_smart_terrain_2_6"]
return obj and obj.id
end
if (tsk.stage == 3) then
local obj = get_story_se_object("squad_duty_girl")
return obj and obj.id
end
end
end
function monolith_elite_hit(npc,shit,bone_id,flags)
if (shit and shit.draftsman and IsStalker(shit.draftsman)) then
if (shit.draftsman:id() == AC_ID) then
return
end
if (IsStalker(shit.draftsman) and shit.draftsman:has_info("npcx_is_companion") or string.find(shit.draftsman:name(),"stalker_duty_girl")) then
shit.power = shit.power / 4
return
end
local squad = get_object_squad(shit.draftsman)
if (squad and string.find(squad:section_name(),"squad_duty_girl_monolith_elite")) then
if (string.find(npc:name(),"monolith")) then
shit.power = shit.power / 4
else
shit.power = shit.power / 2
end
return
end
end
flags.ret_value = false
end
--[[----------------------------------------------------------------------------------------------------
duty_girl_loot_stash
------------------------------------------------------------------------------------------------------]]
function duty_girl_loot_stash_status(tsk,task_id)
if (tsk.stage == 0) then
local tbl = {
"detector_advanced",
"vodka","vodka",
"bandage","bandage","bandage","bandage","bandage",
"medkit","medkit","medkit","medkit","medkit",
"ammo_5.56x45_fmj","ammo_5.56x45_fmj","ammo_5.56x45_fmj","ammo_5.56x45_fmj","ammo_5.56x45_fmj","ammo_5.56x45_fmj"
}
local sm = SIMBOARD.smarts_by_names["val_smart_terrain_1_2"]
local pos = vector():set(175.7,1,-278.6)
if (sm) then
for i,v in pairs(tbl) do
alife():create(v,pos,sm.m_level_vertex_id,sm.m_game_vertex_id)
end
local se = alife():create("wpn_lr300",pos,sm.m_level_vertex_id,sm.m_game_vertex_id)
if (se) then
save_var(db.actor,task_id,se.id)
end
end
tsk.stage = 1
end
if (tsk.stage == 1) then
local id = load_var(db.actor,task_id)
local se = id and alife():object(id)
if not (se and IsWeapon(se) and string.find(se:name(),"wpn_lr300") and (se.parent_id == 65535)) then
return "complete"
end
end
end
function duty_girl_loot_stash_target(task_id,field,p,tsk)
if (field == "title") then
return task_id.."_"..field
end
if (field == "descr") then
return task_id.."_"..field.."_1"
end
if (field == "target") then
local id = load_var(db.actor,task_id)
local se = id and alife():object(id)
return se and se.id
end
end
--[[----------------------------------------------------------------------------------------------------
duty_girl_capture_the_brirge
------------------------------------------------------------------------------------------------------]]
function duty_girl_capture_the_brirge_status(tsk,task_id)
if (tsk.stage == 0) then
SIMBOARD:create_squad(SIMBOARD.smarts_by_names["red_smart_terrain_bridge"],"squad_duty_girl_capture_the_brirge_mono_1")
SIMBOARD:create_squad(SIMBOARD.smarts_by_names["red_smart_terrain_bridge"],"squad_duty_girl_capture_the_brirge_mono_2")
SIMBOARD:create_squad(SIMBOARD.smarts_by_names["red_smart_terrain_5_5"],"squad_duty_girl_capture_the_brirge_duty")
SIMBOARD:create_squad(SIMBOARD.smarts_by_names["red_smart_terrain_5_5"],"squad_duty_girl_capture_the_brirge_lone")
tsk.stage = 1
end
if (tsk.stage == 1) or (tsk.stage == 2) then
local squad_1 = get_story_se_object("squad_duty_girl_capture_the_brirge_mono_1")
local squad_2 = get_story_se_object("squad_duty_girl_capture_the_brirge_mono_2")
local mem_num = (squad_1 and squad_1:npc_count() or 0) + (squad_2 and squad_2:npc_count() or 0)
if (mem_num ~= 0) then
-- Player attack without order
if (mem_num < 20) then
if (NI("duty_girl_capture_the_brirge_move")) then
GI("duty_girl_capture_the_brirge_move")
if (NI("duty_girl_capture_the_brirge_join")) then
GI("duty_girl_capture_the_brirge_join")
end
local function message()
local npc = get_story_object("stalker_duty_girl")
if (npc and db.actor) then
if (NI("duty_girl_capture_the_brirge_move_5") and xr_conditions.check_time_speech(db.actor,npc)) then
GI("duty_girl_capture_the_brirge_move_5")
xr_effects.speech(db.actor,npc,{"duty_girl_capture_the_brirge_move_5",5})
end
if (NI("duty_girl_capture_the_brirge_move_6") and xr_conditions.check_time_speech(db.actor,npc)) then
GI("duty_girl_capture_the_brirge_move_6")
xr_effects.speech(db.actor,npc,{"duty_girl_capture_the_brirge_move_6",5})
end
end
if (HI("duty_girl_capture_the_brirge_move_6")) then
return true
end
end
local npc = get_story_object("stalker_duty_girl")
if (npc) then
CreateTimeEvent(npc:id(),"speech",0,message)
end
end
end
else
-- Squad is killed
local function message()
local npc = get_story_object("stalker_duty_girl")
if (npc and db.actor) then
if (NI("duty_girl_capture_the_brirge_move_4") and xr_conditions.check_time_speech(db.actor,npc)) then
GI("duty_girl_capture_the_brirge_move_4")
xr_effects.speech(db.actor,npc,{"duty_girl_capture_the_brirge_move_4",5})
end
end
if (HI("duty_girl_capture_the_brirge_move_4")) then
return true
end
end
local npc = get_story_object("stalker_duty_girl")
if (npc) then
CreateTimeEvent(npc:id(),"speech",0,message)
end
tsk.stage = 3
end
if (tsk.stage == 1) then
if (HI("duty_girl_capture_the_brirge_move")) then
tsk.stage = 2
end
end
end
if (tsk.stage == 3) then
if (NI("red_bridge_outpost")) then
GI("red_bridge_outpost")
end
if (NI("duty_girl_capture_the_brirge_dead")) then
GI("duty_girl_capture_the_brirge_dead")
end
if (HI("duty_girl_capture_the_brirge_reward")) then
return "complete"
end
end
end
function duty_girl_capture_the_brirge_target(task_id,field,p,tsk)
if (field == "title") then
return task_id.."_"..field
end
if (field == "descr") then
if (tsk.stage == 0) or (tsk.stage == 1) then
return task_id.."_"..field.."_1"
end
if (tsk.stage == 2) then
return task_id.."_"..field.."_2"
end
if (tsk.stage == 3) then
return task_id.."_"..field.."_3"
end
end
if (field == "target") then
if (tsk.stage == 0) or (tsk.stage == 1) then
local obj = get_story_se_object("squad_duty_girl")
local sqd = get_story_se_object("squad_duty_girl_capture_the_brirge_duty")
if (obj and sqd and simulation_objects.is_on_the_same_level(obj,sqd)) then
return obj.id
end
return sqd and sqd.id
end
if (tsk.stage == 2) then
local obj = SIMBOARD.smarts_by_names["red_smart_terrain_bridge"]
return obj and obj.id
end
if (tsk.stage == 3) then
local obj = get_story_se_object("squad_duty_girl")
return obj and obj.id
end
end
end
function capture_the_brirge_hit(npc,shit,bone_id,flags)
if (shit and shit.draftsman and IsStalker(shit.draftsman)) then
local npc_squad = get_object_squad(npc)
local hit_squad = (shit.draftsman:id() ~= AC_ID) and get_object_squad(shit.draftsman)
if (npc_squad and string.find(npc_squad:section_name(),"squad_duty_girl_capture_the_brirge_mono")) then
if (shit.draftsman:id() == AC_ID) then
return
end
if (shit.draftsman:has_info("npcx_is_companion") or string.find(shit.draftsman:name(),"stalker_duty_girl")) then
shit.power = shit.power / 3
return
end
if (hit_squad and string.find(hit_squad:section_name(),"squad_duty_girl_capture_the_brirge")) then
shit.power = shit.power / 3
return
end
else
if (hit_squad and string.find(hit_squad:section_name(),"squad_duty_girl_capture_the_brirge")) then
shit.power = shit.power / 3
return
end
end
end
flags.ret_value = false
end
function capture_the_brirge_spawn_outpost(actor,squad,p)
local lst = {
"squad_red_duty_outpost_trader",
"squad_red_duty_outpost_medic",
"squad_red_duty_outpost_guide",
"squad_red_duty_outpost_guard_1",
"squad_red_duty_outpost_guard_2",
"squad_red_duty_outpost_visitor_1",
"squad_red_duty_outpost_visitor_2",
"squad_red_duty_outpost_visitor_3",
"squad_red_duty_outpost_visitor_4"
}
for k,sec in pairs(lst) do
if not (get_story_se_object(sec)) then
SIMBOARD:create_squad(SIMBOARD.smarts_by_names["red_smart_terrain_bridge"],sec)
end
end
end
--[[----------------------------------------------------------------------------------------------------
Main
------------------------------------------------------------------------------------------------------]]
task_status_functor.duty_girl_task_status = function(tsk,task_id)
if not (task_id and tsk) then
return
end
return _G["task_duty_girl"][task_id .. "_status"](tsk,task_id)
end
task_functor.duty_girl_task_target = function(task_id,field,p,tsk)
if not (task_id and tsk) then
return
end
return _G["task_duty_girl"][task_id .. "_target"](task_id,field,p,tsk)
end
--[[----------------------------------------------------------------------------------------------------
Debug
------------------------------------------------------------------------------------------------------]]
---[[
cmd = debug_cmd_list.command_get_list()
function cmd.redbase()
if (NI("red_bridge_outpost")) then
GI("red_bridge_outpost")
end
xr_dynamic_object.dynamic_object(db.actor,db.actor,{"misc\\duty_outpost_object.ltx"})
capture_the_brirge_spawn_outpost()
end
function cmd.d1()
gameplay_duty_girl.duty_girl_init()
task_manager.get_task_manager():give_task("duty_girl_hunting_chimera")
end
function cmd.d1kill()
local squad_1 = get_story_se_object("squad_duty_girl_hunting_chimera")
if (squad_1) then
alife_release(squad_1)
end
end
function cmd.d1skip()
gameplay_duty_girl.duty_girl_init()
GI("duty_girl_hunting_chimera_done")
end
function cmd.d2()
gameplay_duty_girl.duty_girl_init()
task_manager.get_task_manager():give_task("duty_girl_monolith_elite")
end
function cmd.d2kill()
local squad_1 = get_story_se_object("squad_duty_girl_monolith_elite_mono")
if (squad_1) then
alife_release(squad_1)
end
end
function cmd.d3()
task_manager.get_task_manager():give_task("duty_girl_loot_stash")
end
function cmd.d3skip()
gameplay_duty_girl.duty_girl_init()
GI("duty_girl_loot_stash_done")
end
function cmd.d4()
gameplay_duty_girl.duty_girl_init()
task_manager.get_task_manager():give_task("duty_girl_capture_the_brirge")
end
function cmd.d4kill()
local squad_1 = get_story_se_object("squad_duty_girl_capture_the_brirge_mono_1")
local squad_2 = get_story_se_object("squad_duty_girl_capture_the_brirge_mono_2")
if (squad_1) then
alife_release(squad_1)
end
if (squad_2) then
alife_release(squad_2)
end
end
--]]

View File

@ -0,0 +1,197 @@
local dynamic_object_storage = {}
function dynamic_object(actor,obj,p)
local ini = p and p[1] and ini_file(p[1])
local smart_name = ini and ini:r_string_ex("dynamic_object_configs","smart")
local smart = smart_name and SIMBOARD.smarts_by_names[smart_name]
if not (smart) then
return
end
if not (dynamic_object_storage[smart_name]) then
dynamic_object_storage[smart_name] = {}
end
local lst = dynamic_object_storage[smart_name]
local n = ini:line_count("exclusive")
for k=0,n-1 do
local r,i,v = ini:r_line("exclusive",k)
local s = get_object_config(v)
if (i and s) then
local idx = lst[i]
local sec = s.sec
local pos = s.pos
local ang = s.ang
local con = s.con and ini:r_string_to_condlist("dynamic_object_configs",s.con,"true")
if (xr_logic.pick_section_from_condlist(db.actor,obj,con) == "true") then
local se = idx and tonumber(idx.id) and alife():object(tonumber(idx.id))
if (se and string.find(se:name(),sec)) then
-- Correct. Update object.
se.position = vector():set(pos)
se.angle = vector():set(ang)
else
-- Wrong object or doesn't exit. Try to delete the old object and create a new one.
if (se and idx.sec and string.find(se:name(),idx.sec)) then
alife_release(se)
end
local new_se = alife():create(sec,pos,smart.m_level_vertex_id,smart.m_game_vertex_id)
if (new_se) then
new_se.angle = vector():set(ang)
lst[i] = {id = tonumber(new_se.id),sec = tostring(sec)}
--printf("GhenTuong: dynamic_object create %s [%s]",new_se.id,new_se:name())
end
end
else
if (idx) then
local se = tonumber(idx.id) and alife():object(tonumber(idx.id))
if (se and idx.sec and string.find(se:name(),idx.sec)) then
--printf("GhenTuong: dynamic_object delete %s [%s]",se.id,se:name())
alife_release(se)
end
lst[i] = nil
end
end
end
end
for i,idx in pairs(lst) do
if (i and idx) then
if not (ini:line_exist("exclusive",i)) then
local se = idx and tonumber(idx.id) and alife():object(tonumber(idx.id))
if (se and idx.sec and string.find(se:name(),idx.sec)) then
--printf("GhenTuong: dynamic_object delete %s [%s]",se.id,se:name())
alife_release(se)
end
lst[i] = nil
end
else
lst[i] = nil
end
end
end
--[[
if not (ini:section_exist("exclusive") and ini:line_exist("exclusive",i)) then
return
end
local v = ini:r_string_ex("exclusive",i)
--]]
function get_object_config(v)
local str = v and str_explode(v,"|")
local sec = str[1] and (str[1] ~= "") and (str[1] ~= "nil") and tostring(str[1])
local tp = str[2] and str_explode(str[2],",") or nil
local td = str[3] and str_explode(str[3],",") or nil
local pox = tp and tonumber(tp[1])
local poy = tp and tonumber(tp[2])
local poz = tp and tonumber(tp[3])
local rox = td and tonumber(td[1]) and math.rad(tonumber(td[1]))
local roy = td and tonumber(td[2]) and math.rad(tonumber(td[2]))
local roz = td and tonumber(td[3]) and math.rad(tonumber(td[3]))
local con = str[4] or "nil"
if not (pox and poy and poz and rox and roy and roz and con) then
return
end
return {sec = sec, pos = vector():set(pox,poy,poz), ang = vector():set(rox,roy,roz), con = con}
end
function get_object(smart_name,index)
local idx = dynamic_object_storage_loaded and dynamic_object_storage[smart_name] and dynamic_object_storage[smart_name][index]
return idx and {id = tonumber(idx.id),sec = tostring(idx.sec)}
end
--[[----------------------------------------------------------------------------------------------------
Lighting
p[1] action
p[2] sec
p[3] bone
------------------------------------------------------------------------------------------------------]]
function light(actor,obj,p)
local sec = p[1]
local pos = p[2] and obj:bone_position(p[2]) or obj:position()
local st = db.storage[obj:id()]
if not (st and sec and pos) then
return
end
if (st.dynamic_light) then
--Switch
if (st.dynamic_light.light) then
local new_state = (tonumber(p[3]) == 1) and true or false
if (st.dynamic_light.light.enabled ~= new_state) then
st.dynamic_light.light.enabled = new_state
st.dynamic_light.light:update()
end
--Position
st.dynamic_light.light:set_position(pos)
end
else
st.dynamic_light = {}
st.dynamic_light.light = script_light()
st.dynamic_light.sec = tostring(sec)
if (st.dynamic_light.light) then
local ini = st.ini
local n = ini:line_count(sec)
for k=0,n-1 do
local result,i,v = ini:r_line(sec,k)
--Basic
if (i == "range") then
st.dynamic_light.light.range = tonumber(v)
end
if (i == "color") then
st.dynamic_light.light.color = (tonumber(v) and fcolor():set(tonumber(v)))
end
if (i == "shadow") then
st.dynamic_light.light.shadow = (v == "true")
end
--Volumetric
if (i == "volumetric") then
st.dynamic_light.light.volumetric = (v == "true")
end
if (i == "volumetric_quality") then
st.dynamic_light.light.volumetric_quality = tonumber(v)
end
if (i == "volumetric_distance") then
st.dynamic_light.light.volumetric_distance = tonumber(v)
end
if (i == "volumetric_intensity") then
st.dynamic_light.light.volumetric_intensity = tonumber(v)
end
--Texture/Light animation
if (i == "texture") then
st.dynamic_light.light.texture = tostring(v)
end
if (i == "lanim") then
st.dynamic_light.light.lanim = tostring(v)
end
if (i == "lanim_brightness") then
st.dynamic_light.light.lanim_brightness = tonumber(v)
end
end
st.dynamic_light.light:set_position(pos)
st.dynamic_light.light:update()
end
end
end
function save_state(m_data)
m_data.xr_dynamic_object_storage = dynamic_object_storage
end
function load_state(m_data)
dynamic_object_storage = m_data.xr_dynamic_object_storage or {}
end
function on_game_start()
RegisterScriptCallback("save_state",save_state)
RegisterScriptCallback("load_state",load_state)
end

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More