MSCO07

From SWGANH Wiki
Revision as of 20:31, 15 June 2008 by Snow (Talk | contribs) (Deltas Struct)

Jump to: navigation, search

Baseline - MSCO 07

SWGANH Wiki is a repository of Star Wars Galaxies Developer information. This site is only meant to be used by SWGANH Developer team.

MSCO Packet Type QuickNav
MSCO03 - MSCO06 - MSCO07 - MSCO08 - MSCO09


BaseLine Struct


Few bytes left to figure out on this one.

SHORT:          Operand Count
//Part 0
INT:            Slot Counter
INT:            Update Counter
{
   A_STRING:        STF File 
   INT:             String spacer
   A_STRING:        STF Name
}
//Part 1
INT:            Counter 1
INT:            Update Counter
{
   INT:             Unknown, must be 4 if slot is filled
}
//Part 2
INT:            Counter 2
INT:            Update Counter
{
   //here go the ingredient IDs
   INT:             Counter for IngredientID
   {
      LONG:         ingredient ID
   }
}
//Part 3
INT:            Counter 3
INT:            Update Counter
{
   INT:    Counter for Ingredient Amount 
   {
      INT:  amount of ingredient filled into slot
   }
}
//Part 4
INT:            Counter 4
INT:            Update Counter
{
   INT:             Unknown
}
//Part 5
INT:            Counter 
INT:            Update Counter
{
   INT:             Unknown
}
//Part 6
INT:            Counter 
INT:            Update Counter * 2
{
   INT:             Unknown
}

//Part 7
BYTE: some sort of stale flag 
      probably not used(usually slot size * 4)

//Part 8 Experimentation Attributes
INT:            Counter 
INT:            Update Counter
{
   A_STRING:        dir to look up string (crafting)
   INT:             unknown
   A_STRING:        Areas of Experimentation for the item
                    eg expEffectiveness; expRange
}

//Part 9 Experimentation attributes Values
INT:            Counter 
INT:            Update Counter
{
   FLOAT:             Experimentation Attribute Value
}

//Part 10 not tested yet
INT:            Counter 
INT:            Update Counter
{
   INT:             Unknown
}

//Part 11 Assembly Attributes Values -> percentage of assembly succes
// 100% = highest possible (30%)
INT:            Counter 
INT:            Update Counter
{
   FLOAT:             Assembly Attribute Value
}

//Part 12 Max reachable Experimentation Attribute Value 
INT:            Counter 
INT:            Update Counter
{
   FLOAT:             Max Experimentation Attribute Value
}

//Part 18 unknown yet
INT:            Counter 
INT:            Update Counter
{
   FLOAT:             failure probability given as 0.0 to 100.0
}

// unknown
UINT64
UINT64
UINT64
UINT64
UINT64
UINT32
UINT8
UINT8

Deltas Struct


I've written the deltas part numbers in the baseline above. This Packet is to huge that one could make sense of it without structure. Thus the Delta parts themselves are further divided into - lets call them - slotspots.

For every slot there is a 3 Byte slotspot in the Deltapart, save part 7, where the byte stale flag (??) is. So that every slotspot can be modified on its own and the monster gets more palateable the slotspots must be inserted. Think of it as a kind of FlowControl.

So to set the amount of resource that got filled into the first slot :

SHORT:			UpdateCount
SHORT:			UpdateType
{
  00:
    INT:		SlotNameList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          ASTRING:	SlotNameTable
          INT:		NotUsed
          ASTRING:	SlotName 
        02:(change)
          SHORT:	Index
          ASTRING:	SlotNameTable
          INT:		NotUsed
          ASTRING:	SlotName 
        03:(resetall)
          SHORT:	NewListSize
          {
            ASTRING:	SlotNameTable
            INT:	NotUsed
            ASTRING:	SlotName 
          }
        04:(clear)
      }
    }
  01:
    INT:		SlotContentsList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          INT:		SlotContentType
        02:(change)
          SHORT:	Index
          INT:		SlotContentType
        03:(resetall)
          SHORT:	NewListSize
          {
            INT:	SlotContentType
          }
        04:(clear)
      }
    }
  02:
    INT:		IngridientList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:
        01:(add)
          SHORT:	Index
          INT:		Counter
          {
            LONG:	IngredientID
          }
        02:(change)
          SHORT:	Index
          INT:		Counter
          {
            LONG:	IngredientID
          }
        03:(resetall)
          SHORT:	NewListSize
          {
            INT:	Counter
            {
              LONG:	IngredientID
            }
          }
        04:(clear)
      }
    }
  03:
    INT:		QuantityList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          INT:		Counter
          {
            INT:	IngredientQuantity
          }
        02:(change)
          SHORT:	Index
          INT:		Counter
          {
            INT:	IngredientQuantity
          }
        03:(resetall)
          SHORT:	NewListSize
          {
            INT:	Counter
            {
              INT:	IngredientQuantity
            }
          }
        04:(clear)
      }
    }
  04:
    INT:		SlotQualityList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          FLOAT:	Quality  
        02:(change)
          SHORT:	Index
          FLOAT:	Quality  
        03:(resetall)
          SHORT:	NewListSize
          {
            FLOAT:	Quality  
          }
        04:(clear)
      }
    }
  05:
    INT:		CleanSlotList 
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          INT:		Value 
        02:(change)
          SHORT:	Index
          INT:		Value 
        03:(resetall)
          SHORT:	NewListSize
          {
            INT:	Value  
          }
        04:(clear)
      }
    }
  06:
    INT:		SlotIndexList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          INT:		SlotIndex
        02:(change)
          SHORT:	Index
          INT:		SlotIndex
        03:(resetall)
          SHORT:	NewListSize
          {
            INT:	SlotIndex
          }
        04:(clear)
      }
    }
  07:
    BYTE:		IngredientsCounter
  08:
    INT:		ExperimentationNameList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          ASTRING:	ExperimentationTable
          INT:		NotUsed
          ASTRING:	ExperimentationName
        02:(change)
          SHORT:	Index
          ASTRING:	ExperimentationTable
          INT:		NotUsed
          ASTRING:	ExperimentationName
        03:(resetall)
          SHORT:	NewListSize
          {
            ASTRING:	ExperimentationTable
            INT:	NotUsed
            ASTRING:	ExperimentationName
          }
        04:(clear)
      }
    }
  09:
    INT:		CurrentExperimentationValueList 
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          FLOAT:	CurrentExperimentationValue
        02:(change)
          SHORT:	Index
          FLOAT:	CurrentExperimentationValue
        03:(resetall)
          SHORT:	NewListSize
          {
            FLOAT:	CurrentExperimentationValue
          }
        04:(clear)
      }
    }
  0A:
    INT:		ExperimentationOffsetList
    INT:		UpdateCounter 
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          FLOAT:	ExperimentationValueOffset
        02:(change)
          SHORT:	Index
          FLOAT:	ExperimentationValueOffset
        03:(resetall)
          SHORT:	NewListSize
          {
            FLOAT:	ExperimentationValueOffset
          }
        04:(clear)
      }
    }
  0B:
    INT:		BlueBarSizeList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          FLOAT:	Size
        02:(change)
          SHORT:	Index
          FLOAT:	Size
        03:(resetall)
          SHORT:	NewListSize
          {
            FLOAT:	Size
          }
        04:(clear)
      }
    }
  0C:
    INT:		MaxExperimentationList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          FLOAT:	MaxExperimentationValue
        02:(change)
          SHORT:	Index
          FLOAT:	MaxExperimentationValue
        03:(resetall)
          SHORT:	NewListSize
          {
            FLOAT:	MaxExperimentationValue
          }
        04:(clear)
      }
    }
  0D:
    INT:		CustomizationNameList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          ASTRING:	CustomizationName
        02:(change)
          SHORT:	Index
          ASTRING:	CustomizationName
        03:(resetall)
          SHORT:	NewListSize
          {
            ASTRING:	CustomizationName 
          }
        04:(clear)
      }
    }
  0E:
    INT:		PalleteSelectionList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          INT:		PalleteSelection
        02:(change)
          SHORT:	Index
          INT:		PalleteSelection
        03:(resetall)
          SHORT:	NewListSize
          {
            INT:	PalleteSelection
          }
        04:(clear)
      }
    }
  0F:
    INT:		PalleteStartIndexList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          INT:    	PalleteStartIndex
        02:(change)
          SHORT:	Index
          INT:		PalleteStartIndex 
        03:(resetall)
          SHORT:	NewListSize
          {
            INT:	PalleteStartIndex
          }
        04:(clear)
      }
    }
  10:
    INT:		PalleteEndIndexList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          INT:		PalleteEndIndex
        02:(change)
          SHORT:	Index
          INT:		PalleteEndIndex
        03:(resetall)
          SHORT:	NewListSize
          {
            INT:	PalleteEndIndex
          }
        04:(clear)
      }
    }
  11:
    BYTE:		CustomizationCounter
  12:
    FLOAT:		RiskFactor
  13:
    INT:		ObjectTemplateCustomizationList
    INT:		UpdateCounter
    {
      BYTE:		SubType
      {
        00:(remove)
          SHORT:	Index
        01:(add)
          SHORT:	Index
          ASTRING:	ObjectTemplateIFF 
        02:(change)
          SHORT:	Index
          ASTRING:	ObjectTemplateIFF
        03:(resetall)
          SHORT:	NewListSize
          {
            ASTRING:	ObjectTemplateIFF
          }
        04:(clear)
      }
    }
  14:
    BYTE:		ReadyFlag
}

Variable Descriptions


Obj_OperandCount =


Tags


75% This packet has been partially reversed.

S→C This packet originates on the server.

Sample Packet