Quote

I've played a bit through and haven't run into anything that didn't work. Keep in mind I'm using the version prior to the one you have on Nexus now.

Sounds good! Your version contains one or two minor issues I fixed in the Nexus version. Vendors removed trade items of the same template as items in the transport container for example.

Quote
1. I'd suggest adding an in-game readme in a file like the "orders" you get in your inventory.

That's a good idea. Some functions are not self-explaining and it would be good to have a quick way to read up about them.

Originally Posted by SniperHF
You should make the logistics and crafting books go into your inventory automatically

Originally Posted by FrauBlake
instead, which is called once after character creation in DOSStart/CYS_General.txt (where money and books are added).
Since it's called only once, no DB_LogisticsStart(1) would be required.

I liked the idea of gathering up all the stuff from the beach, so the new items are more than just icons in the inventory and get more attention at the start. Is it the necessarity to pick them up or the risk to miss an item?
I'd add them via CYS_General as I did with the backpacks.

Quote
3. One of the problems I'm having with the logistics book is forgetting which player is 1 and which player is 2. Maybe you could set a statement when you start the transfer dialog which has each character say which number they are via CharacterDisplayText. Or perhaps put a node on the player selection screen which you can press called "Player Identify" which does the same.

Yes. Maybe I can implement a Me in the dialog (since only main characters can start the dialog there's always one player and Me).

Quote
4. For this one "- crafting with external objects - water, oil and ooze barrel, well, oven, anvil - is possible for companions: they will remember your dialog orders, walk to the required object, re-check resources (no exploits) and create the items"
What's the reason the player can't do it? You can usually make the player do anything a companion can if you use CharacterFreeze. Is it because the GUI pops up by default when a PC "uses" an external object?

I wanted to conserve the feeling of controlling the two main characters and it would require Osiris to execute some actions and more nasty char-Osiris communication. Currently I use scriptframes in character script that characters execute after the dialog ended. They have to check non-global items in range (doesn't seem to be possible in Osiris) and do some actions under certain conditions (e. g. looking for and sitting on a chair while waiting for the oven to finish). Would be quite complicated.

This is what the char script does:

Code
INIT

EXTERN INT:%Oven = 0
EXTERN INT:%SmithOven = 0
EXTERN INT:%WaterBarrel = 0
EXTERN INT:%OozeBarrel = 0
EXTERN INT:%OilBarrel = 0
EXTERN INT:%Well = 0
EXTERN INT:%Anvil = 0

STORY

SCRIPTFRAME CraftingActions
VARS
	ITEMTEMPLATE:_OvenTemp = "FUR_Poor_Oven_A_f44b2969-8d36-4e62-95cd-2849a11ae95a"
	ITEMTEMPLATE:_DungeonSmithTemp = "2m_DungeonPrison_A_Smith_Fireplace_A_Item_b7f00fad-8fd6-47c5-bbc7-2b71e15e795a"
	ITEMTEMPLATE:_SmithTemp = "LTS_Smith_Fireplace_A_1f66bf28-48ac-4be8-8714-93f22212a1c6"
	ITEMTEMPLATE:_WellTemp = "Hum_Well_A_e9cfca4c-5564-47e0-85c2-c5387bbdca35"
	ITEMTEMPLATE:_WellSnowTemp = "Hum_Well_A_Snow_9a9153f2-d0dd-45f1-a6fb-e9fed68aba4a"
	ITEMTEMPLATE:_AnvilTemp = "TOOL_Smith_Anvil_A_4fcd8129-ad8c-46ff-9373-329387e5b214"
	ITEMTEMPLATE:_AnvilBTemp = "TOOL_Smith_Anvil_B_4869c1fe-1529-40a1-95c2-569bbdac47f4"
	ITEMTEMPLATE:_OilBarrelTemp = "CONT_Barrel_Oil_A_1b34b32c-e96c-404e-90cc-054cb549c558"
	ITEMTEMPLATE:_WaterBarrelTemp = "CONT_Barrel_A_Water_59b25792-1cc2-4364-92eb-89aca8fb8425"
	ITEMTEMPLATE:_OozeBarrelTemp = "CONT_Barrel_Ooze_A_0ae0668f-418c-46c4-bcbb-1683aa3c68e3"
	ITEMTEMPLATE:_Seat1 = "FUR_Citz_Chair_A_3d1892b1-0b6b-4f25-9a70-6c107fdd3294"
	ITEMTEMPLATE:_Seat2 = "FUR_Poor_Chair_A_f5115ada-4145-42b7-94bf-80fee29674a8"
	ITEMTEMPLATE:_Seat3 = "FUR_Poor_Chair_B_0c784122-2da8-42ef-865f-a70c802b1a75"
	ITEMTEMPLATE:_Seat4 = "FUR_Poor_Chair_C_32b6925a-bf33-44c2-96d3-22b432785f80"
	ITEMTEMPLATE:_Seat5 = "FUR_Rich_Chair_A_f0a87e0e-f895-4463-8d38-7ebe5853d5c9"
	ITEMTEMPLATE:_Seat6 = "FUR_Poor_Bar_Stool_A_f5bcacd2-2d39-442b-b566-23b667ee961b"
	ITEMTEMPLATE:_Seat7 = "FUR_Poor_Bar_Stool_B_dcd2f731-17ea-46bb-896a-198a72754d9b"
	ITEM:_CraftingItem
	ITEM:_Seat
	INT:_WalkOrRun
	INT:_Ability
	INT:_Effect
	INT:_IntValue
	FLOAT:_Chance = 0.3 
	FLOAT:_Attribute
	FLOAT3:_position
	CHARACTER:_Player
ACTIONS
	IF "c1&c2"
		GetVar(_IntValue,__Me,"Well")
		IsEqual(_IntValue,1)
	THEN
		IF "c1|c2"
			ItemGet(_CraftingItem,__Me,15,Random,null,_WellTemp)
			ItemGet(_CraftingItem,__Me,15,Random,null,_WellSnowTemp)
		THEN	
			CharacterMoveTo(_CraftingItem,0,0,0,1,1.1)
			Sleep(1)
			IF "c1"
				IsRandom(0.15)
			THEN				
				CharacterPlayAnimation("use_inspect")
				Sleep(1)
			ENDIF
			CharacterPlayAnimation("use_craft")
			IF "c1"
				IsRandom(0.2)
			THEN
				CreateSurfaceAt(__Me,Water,1,4)
			ENDIF			
			CharacterEvent(__Me,"Well")
			SetVar(__Me,"Well",INT:0)
			Sleep(1.5)
		ELSE
			DisplayText(__Me,"WellNotFound",3) 
			SetVar(__Me,"Well",INT:0)			
			Sleep(3)
		ENDIF
	ENDIF
	IF "c1&c2"
		GetVar(_IntValue,__Me,"Oven")
		IsEqual(_IntValue,1)
	THEN
		IF "c1"
			ItemGet(_CraftingItem,__Me,15,Random,null,_OvenTemp)			
		THEN	
			CharacterMoveTo(_CraftingItem,0,0,0,0.7,0.8)
			Sleep(1)
			IF "c1"
				IsRandom(0.15)
			THEN				
				CharacterPlayAnimation("use_inspect")
				Sleep(1)
			ENDIF
			CharacterPlayAnimation("use_craft")
			Sleep(2)
			PlayLoopEffectAt(_Effect,_CraftingItem,"FX_Env_Smoke_Small_A")
			IF "c1&(c2|c3|c4|c5|c6|c7|c8)"
				IsRandom(0.1)
				ItemGet(_Seat,__Me,12,Random,null,_Seat1)
				ItemGet(_Seat,__Me,12,Random,null,_Seat2)
				ItemGet(_Seat,__Me,12,Random,null,_Seat3)
				ItemGet(_Seat,__Me,12,Random,null,_Seat4)
				ItemGet(_Seat,__Me,12,Random,null,_Seat5)
				ItemGet(_Seat,__Me,12,Random,null,_Seat6)
				ItemGet(_Seat,__Me,12,Random,null,_Seat7)
			THEN
				CharacterMoveTo(_Seat)
				Sleep(1)
				CharacterUseItem(_Seat)
				Sleep(8)
				GetRandom(_WalkOrRun,0,1)				
				CharacterMoveTo(_CraftingItem,_WalkOrRun)
				Sleep(1)
			ELSE
				Sleep(5)
			ENDIF
			IF "c1"
				IsRandom(0.3)
			THEN				
				CharacterPlayAnimation("use_inspect")
				Sleep(1)
			ENDIF
			CharacterPlayAnimation("use_craft")
			StopLoopEffect(_Effect)
			Sleep(1)
			CharacterPlayAnimation("use_loot")
			CharacterEvent(__Me,"Oven")
			SetVar(__Me,"Oven",INT:0)
			Sleep(1.5)
		ELSE
			DisplayText(__Me,"OvenNotFound",3)
			SetVar(__Me,"Oven",INT:0)
			Sleep(3)
		ENDIF
	ENDIF
	IF "c1&c2"
		GetVar(_IntValue,__Me,"SmithOven")
		IsEqual(_IntValue,1)
	THEN
		IF "c1|c2"
			ItemGet(_CraftingItem,__Me,15,Random,null,_DungeonSmithTemp)
			ItemGet(_CraftingItem,__Me,15,Random,null,_SmithTemp)
		THEN	
			CharacterMoveTo(_CraftingItem)
			Sleep(1)
			IF "c1"
				IsRandom(0.15)
			THEN				
				CharacterPlayAnimation("use_inspect")
				Sleep(1)
			ENDIF
			CharacterPlayAnimation("use_craft")
			GetPosition(_CraftingItem,_position)
			Add(_position,{0;1;0})
			PlayLoopEffectAt(_Effect,_position,"FX_GP_Bomber_Sparks")
			/*IF "c1&c2" 							
				CharacterGetStat(_Attribute,__Me,Dexterity)
				IsGreaterThen(_Attribute,8)
			THEN
				Subtract(_chance,0.15)
			ENDIF
			IF "c1&c2"
				CharacterGetAbility(_Ability,__Me,Repair)
				IsGreaterThen(_Ability,1)
			THEN
				Subtract(_chance,0.1)
			ENDIF
			IF "c1"
				IsRandom(_Chance)
			THEN
				CreateSurfaceAt(__Me,Fire,1,4)
			ENDIF
			Set(_Chance,0.3)*/
			Sleep(5)
			CharacterPlayAnimation("use_craft")
			StopLoopEffect(_Effect)
			Sleep(2)
			CharacterPlayAnimation("use_loot")
			CharacterEvent(__Me,"SmithOven")
			SetVar(__Me,"SmithOven",INT:0)
			Sleep(1)
		ELSE
			DisplayText(__Me,"SmithNotFound",3) 
			SetVar(__Me,"SmithOven",INT:0)
			Sleep(3)
		ENDIF
	ENDIF
	IF "c1&c2"
		GetVar(_IntValue,__Me,"Anvil")
		IsEqual(_IntValue,1)
	THEN
		IF "c1|c2"
			ItemGet(_CraftingItem,__Me,15,Random,null,_AnvilTemp)
			ItemGet(_CraftingItem,__Me,15,Random,null,_AnvilBTemp)
		THEN	
			CharacterMoveTo(_CraftingItem)
			Sleep(1)
			IF "c1"
				IsRandom(0.1)
			THEN				
				CharacterPlayAnimation("use_inspect")
				Sleep(1)
			ENDIF
			CharacterPlayAnimation("use_activate")
			Sleep(0.5)
			CharacterPlayAnimation("use_mine")
			Sleep(1.5)
			CharacterPlayAnimation("use_mine")
			Sleep(1)
			IF "c1"
				IsRandom(0.3)
			THEN				
				CharacterPlayAnimation("use_inspect")
				Sleep(1)
				CharacterPlayAnimation("use_mine")
				Sleep(1)
			ENDIF
			CharacterPlayAnimation("use_loot")
			CharacterEvent(__Me,"Anvil")
			SetVar(__Me,"Anvil",INT:0)
			Sleep(1.5)
		ELSE
			DisplayText(__Me,"AnvilNotFound",3)
			SetVar(__Me,"Anvil",INT:0)		
			Sleep(3)
		ENDIF
	ENDIF
	IF "c1&c2"
		GetVar(_IntValue,__Me,"WaterBarrel")
		IsEqual(_IntValue,1)
	THEN
		IF "c1"
			ItemGet(_CraftingItem,__Me,15,Random,null,_WaterBarrelTemp)
		THEN	
			CharacterMoveTo(_CraftingItem,0,0,0,1,1.1)
			Sleep(1)
			IF "c1"
				IsRandom(0.15)
			THEN				
				CharacterPlayAnimation("use_inspect")
				Sleep(1)
			ENDIF
			CharacterPlayAnimation("use_craft")
			IF "c1"
				IsRandom(0.2)
			THEN
				CreateSurfaceAt(__Me,Water,1,4)
			ENDIF			
			CharacterEvent(__Me,"WaterBarrel")
			SetVar(__Me,"WaterBarrel",INT:0)
			Sleep(1.5)
		ELSE
			DisplayText(__Me,"WaterNotFound",3)
			SetVar(__Me,"Well",INT:0)			
			Sleep(3)
		ENDIF
	ENDIF
	IF "c1&c2"
		GetVar(_IntValue,__Me,"OilBarrel")
		IsEqual(_IntValue,1)
	THEN
		IF "c1"
			ItemGet(_CraftingItem,__Me,15,Random,null,_OilBarrelTemp)
		THEN	
			CharacterMoveTo(_CraftingItem,0,0,0,1,1.1)
			Sleep(1)
			IF "c1"
				IsRandom(0.15)
			THEN				
				CharacterPlayAnimation("use_inspect")
				Sleep(1)
			ENDIF
			CharacterPlayAnimation("use_craft")
			IF "c1"
				IsRandom(0.2)
			THEN
				CreateSurfaceAt(__Me,Oil,1,4)
			ENDIF			
			CharacterEvent(__Me,"OilBarrel")
			SetVar(__Me,"OilBarrel",INT:0)
			Sleep(1.5)
		ELSE
			Sleep(1)
			DisplayText(__Me,"OilNotFound",3)
			Sleep(2)
			CharacterPlayAnimation("use_dig")
			SetVar(__Me,"OilBarrel",INT:0)			
			Sleep(3)
		ENDIF
	ENDIF
	IF "c1&c2"
		GetVar(_IntValue,__Me,"OozeBarrel")
		IsEqual(_IntValue,1)
	THEN
		IF "c1"
			ItemGet(_CraftingItem,__Me,15,Random,null,_OozeBarrelTemp)
		THEN	
			CharacterMoveTo(_CraftingItem,0,0,0,1,1.1)
			Sleep(1)
			IF "c1"
				IsRandom(0.15)
			THEN				
				CharacterPlayAnimation("use_inspect")
				Sleep(1)
			ENDIF
			CharacterPlayAnimation("use_craft")
			/*IF "c1"
				IsRandom(0.2)
			THEN
				CreateSurfaceAt(__Me,Ooze,1,4)
			ENDIF	*/		
			CharacterEvent(__Me,"OozeBarrel")
			SetVar(__Me,"OozeBarrel",INT:0)
			Sleep(1.5)
		ELSE
			DisplayText(__Me,"OozeNotFound",3) 
			SetVar(__Me,"OozeBarrel",INT:0)			
			Sleep(3)
		ENDIF
	ENDIF
	Sleep(1)
	CharacterEvent(__Me,"CraftingOrdersFinished")
	DisplayText(__Me,"OrdersCompleted",3)
	Sleep(2)


Quote
5. The editor throws 4 "unable to parse script" errors when loading the mod. Does it do this for you?

That are 'errors' of the type:

[99] Error 9: Variable _WellTemp is not of type FIXEDSTRING but of type ITEMTEMPLATE

It's not a problem and wouldn't work if I used FIXEDSTRING instead of ITEMTEMPLATE in the VARS section (if I remember my testings right). Anyway: it works.
http://larian.com/forums/ubbthreads.php?ubb=showflat&Number=581127&page=1 (number 18)

I'd like to ask some question back:

1. Is a scrolls and food transfer necessary? Or for any other item type that isn't regarded yet?
2. Should companions be able to start the item transfer dialog?
3. Should item to container transfer be possible for SourceHunter backpacks and every container in the game world?
4. Would a special weapon chest or something like that be desired for weapon transfer exceptions? (Weapons are the only items that can be stored in any container to except them from item transfer, for CharacterMoveWeaponsToContainer not regarding containers in character inventory)
5. Is the whole system (especially the dialogs) handy enough?
6. Do you miss any function?


My mods for DOS 1 EE: FasterAnimations - QuietDay - Samaritan