////////////////////////////////////////////////////////////////////////////////// // // // SCRIPT NAME : component_checker.sc // // AUTHOR : Kenneth Ross // // DESCRIPTION : Used to cycle through the various component // // variations and print out the information for use // // with ped_components_data.sch. // // // ////////////////////////////////////////////////////////////////////////////////// // Include the standard headers (which also ensures the correct #DEFINEs are recognised) USING "rage_builtins.sch" USING "globals.sch" // Do nothing in release mode #IF IS_FINAL_BUILD SCRIPT ENDSCRIPT #ENDIF // Only include in debug mode #IF IS_DEBUG_BUILD USING "commands_script.sch" USING "commands_streaming.sch" USING "script_player.sch" USING "cellphone_public.sch" USING "ped_component_public.sch" CONST_INT NUM_PED_PROP_POSITIONS 9 CONST_INT MAX_PROP_INDEXES 30 ENUM STAGE_CONTROL_ENUM STAGE_INIT = 0, STAGE_COMP_CHECKER, STAGE_PROP_CHECKER, STAGE_CLEANUP ENDENUM STAGE_CONTROL_ENUM eStage = STAGE_INIT PED_COMPONENT eCompType = PED_COMP_HEAD PED_PROP_POSITION ePropPos = ANCHOR_HEAD MODEL_NAMES ePedModel INT iTexture[NUM_PED_COMPONENTS] INT iDrawable[NUM_PED_COMPONENTS] INT iPropIndex, iTexIndex BOOL bUpdateModel, bOutputAllInfo, bOutputVariations, bOutputCurrent, bOutputValidationCheck TEXT_WIDGET_ID widgetID[2] PROC SETUP_WIDGETS() START_WIDGET_GROUP("Component Checker") widgetID[0] = ADD_TEXT_WIDGET("Model name") widgetID[1] = ADD_TEXT_WIDGET("Ped code") ADD_WIDGET_BOOL("Update model", bUpdateModel) ADD_WIDGET_BOOL("Output all ped component data", bOutputAllInfo) ADD_WIDGET_BOOL("Output current ped component data", bOutputCurrent) ADD_WIDGET_BOOL("Output component variations", bOutputVariations) ADD_WIDGET_BOOL("Output validation check", bOutputValidationCheck) STOP_WIDGET_GROUP() ENDPROC PROC RESET_STORED_DATA() INT i PED_INDEX pedID = PLAYER_PED_ID() FOR i = 0 TO NUM_PED_COMPONENTS-1 iTexture[i] = GET_PED_TEXTURE_VARIATION(pedID, INT_TO_ENUM(PED_COMPONENT, i)) iDrawable[i] = GET_PED_DRAWABLE_VARIATION(pedID, INT_TO_ENUM(PED_COMPONENT, i)) ENDFOR iPropIndex = 0 iTexIndex = 0 eCompType = PED_COMP_HEAD ePropPos = ANCHOR_HEAD ENDPROC PROC OUTPUT_COMPONENT_VARIATIONS() IF NOT IS_PED_INJURED(PLAYER_PED_ID()) INT i OPEN_DEBUG_FILE() SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE("MODEL ")SAVE_INT_TO_DEBUG_FILE(ENUM_TO_INT(ePedModel)) FOR i = 0 TO NUM_PED_COMPONENTS-1 SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE("SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), ")SAVE_STRING_TO_DEBUG_FILE(GET_COMP_VARIATION_TYPE_STRING(INT_TO_ENUM(PED_COMPONENT, i)))SAVE_STRING_TO_DEBUG_FILE(", ")SAVE_INT_TO_DEBUG_FILE(iDrawable[i]) SAVE_STRING_TO_DEBUG_FILE(", ")SAVE_INT_TO_DEBUG_FILE(iTexture[i])SAVE_STRING_TO_DEBUG_FILE(")") ENDFOR SAVE_NEWLINE_TO_DEBUG_FILE() FOR i = 0 TO NUM_PED_PROP_POSITIONS-1 SAVE_NEWLINE_TO_DEBUG_FILE() IF GET_PED_PROP_INDEX(PLAYER_PED_ID(), INT_TO_ENUM(PED_PROP_POSITION, i)) = -1 SAVE_STRING_TO_DEBUG_FILE("CLEAR_PED_PROP(PLAYER_PED_ID(), ")SAVE_STRING_TO_DEBUG_FILE(GET_PROP_POSITION_STRING(INT_TO_ENUM(PED_PROP_POSITION, i)))SAVE_STRING_TO_DEBUG_FILE(")") ELSE SAVE_STRING_TO_DEBUG_FILE("SET_PED_PROP_INDEX(PLAYER_PED_ID(), ")SAVE_STRING_TO_DEBUG_FILE(GET_PROP_POSITION_STRING(INT_TO_ENUM(PED_PROP_POSITION, i)))SAVE_STRING_TO_DEBUG_FILE(", ")SAVE_INT_TO_DEBUG_FILE(GET_PED_PROP_INDEX(PLAYER_PED_ID(), INT_TO_ENUM(PED_PROP_POSITION, i)))SAVE_STRING_TO_DEBUG_FILE(")") ENDIF ENDFOR SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_NEWLINE_TO_DEBUG_FILE() CLOSE_DEBUG_FILE() ENDIF ENDPROC PROC OUTPUT_CURRENT_COMPONENT_INFO() IF NOT IS_PED_INJURED(PLAYER_PED_ID()) // INT iMaxDraw, iMaxTex INT iType // , iDraw, iTex INT iItem OPEN_DEBUG_FILE() //loop for each comp type FOR iType = 0 TO NUMBER_OF_PED_COMP_TYPES-1 IF INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType) <> COMP_TYPE_OUTFIT AND INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType) <> COMP_TYPE_PROPS AND INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType) <> COMP_TYPE_PROPGROUP SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE("CASE ")SAVE_STRING_TO_DEBUG_FILE(GET_PED_COMP_NAME_STRING(INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType)))SAVE_STRING_TO_DEBUG_FILE("_")SAVE_STRING_TO_DEBUG_FILE(GET_CONTENTS_OF_TEXT_WIDGET(widgetID[1]))SAVE_STRING_TO_DEBUG_FILE("_ITEM")SAVE_INT_TO_DEBUG_FILE(iItem)SAVE_STRING_TO_DEBUG_FILE(" FILL_PED_COMPONENT_ITEM_DATA(sData, eType, eItem, \"NO_LABEL\", ")SAVE_INT_TO_DEBUG_FILE(GET_PED_DRAWABLE_VARIATION(PLAYER_PED_ID(), GET_PED_COMPONENT_FROM_TYPE(INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType))))SAVE_STRING_TO_DEBUG_FILE(", ")SAVE_INT_TO_DEBUG_FILE(GET_PED_TEXTURE_VARIATION(PLAYER_PED_ID(), GET_PED_COMPONENT_FROM_TYPE(INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType))))SAVE_STRING_TO_DEBUG_FILE(", cost, !bOutfitOnly, !bCanToggle, ANCHOR_HEAD, COMP_STYLE_SENSIBLE) BREAK") ELIF INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType) = COMP_TYPE_PROPS INT i FOR i = 0 TO NUM_PED_PROP_POSITIONS-1 IF GET_PED_PROP_INDEX(PLAYER_PED_ID(), INT_TO_ENUM(PED_PROP_POSITION, i)) <> -1 SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE("CASE ")SAVE_STRING_TO_DEBUG_FILE(GET_PED_COMP_NAME_STRING(INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType)))SAVE_STRING_TO_DEBUG_FILE("_")SAVE_STRING_TO_DEBUG_FILE(GET_CONTENTS_OF_TEXT_WIDGET(widgetID[1]))SAVE_STRING_TO_DEBUG_FILE("_ITEM")SAVE_INT_TO_DEBUG_FILE(iItem)SAVE_STRING_TO_DEBUG_FILE(" FILL_PED_COMPONENT_ITEM_DATA(sData, eType, eItem, \"NO_LABEL\", ")SAVE_INT_TO_DEBUG_FILE(GET_PED_PROP_INDEX(PLAYER_PED_ID(), INT_TO_ENUM(PED_PROP_POSITION, i)))SAVE_STRING_TO_DEBUG_FILE(", 0, cost, !bOutfitOnly, !bCanToggle, ")SAVE_STRING_TO_DEBUG_FILE(GET_PROP_POSITION_STRING(INT_TO_ENUM(PED_PROP_POSITION, i)))SAVE_STRING_TO_DEBUG_FILE(", COMP_STYLE_SENSIBLE) BREAK") ENDIF ENDFOR ENDIF ENDFOR SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_NEWLINE_TO_DEBUG_FILE() CLOSE_DEBUG_FILE() ENDIF ENDPROC PROC OUTPUT_ALL_COMPONENT_INFO() IF NOT IS_PED_INJURED(PLAYER_PED_ID()) INT iMaxDraw, iMaxTex INT iType, iDraw, iTex INT iItem OPEN_DEBUG_FILE() SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_NEWLINE_TO_DEBUG_FILE() //loop for each comp type FOR iType = 0 TO NUMBER_OF_PED_COMP_TYPES-1 iItem = 0 IF INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType) <> COMP_TYPE_OUTFIT AND INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType) <> COMP_TYPE_PROPS AND INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType) <> COMP_TYPE_PROPGROUP iMaxDraw = GET_NUMBER_OF_PED_DRAWABLE_VARIATIONS(PLAYER_PED_ID(), GET_PED_COMPONENT_FROM_TYPE(INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType))) IF iMaxDraw > 0 iMaxDraw-- ENDIF iItem = 0 // loop for each drawable FOR iDraw = 0 TO iMaxDraw iMaxTex = GET_NUMBER_OF_PED_TEXTURE_VARIATIONS(PLAYER_PED_ID(), GET_PED_COMPONENT_FROM_TYPE(INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType)), iDraw) IF iMaxTex > 0 iMaxTex-- ENDIF // loop for each texture FOR iTex = 0 TO iMaxtex SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" ")SAVE_STRING_TO_DEBUG_FILE(GET_PED_COMP_NAME_STRING(INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType)))SAVE_STRING_TO_DEBUG_FILE("_")SAVE_STRING_TO_DEBUG_FILE(GET_CONTENTS_OF_TEXT_WIDGET(widgetID[1]))SAVE_STRING_TO_DEBUG_FILE("_")SAVE_INT_TO_DEBUG_FILE(iDraw)SAVE_STRING_TO_DEBUG_FILE("_")SAVE_INT_TO_DEBUG_FILE(iTex) IF iItem = 0 SAVE_STRING_TO_DEBUG_FILE(" =0,") ELSE SAVE_STRING_TO_DEBUG_FILE(" ,") ENDIF iItem++ ENDFOR ENDFOR ELSE iItem++ ENDIF SAVE_NEWLINE_TO_DEBUG_FILE() ENDFOR SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_NEWLINE_TO_DEBUG_FILE() //loop for each comp type FOR iType = 0 TO NUMBER_OF_PED_COMP_TYPES-1 SAVE_NEWLINE_TO_DEBUG_FILE() iItem = 0 IF INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType) <> COMP_TYPE_OUTFIT AND INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType) <> COMP_TYPE_PROPS AND INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType) <> COMP_TYPE_PROPGROUP iMaxDraw = GET_NUMBER_OF_PED_DRAWABLE_VARIATIONS(PLAYER_PED_ID(), GET_PED_COMPONENT_FROM_TYPE(INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType))) IF iMaxDraw > 0 iMaxDraw-- ENDIF iItem = 0 // loop for each drawable FOR iDraw = 0 TO iMaxDraw iMaxTex = GET_NUMBER_OF_PED_TEXTURE_VARIATIONS(PLAYER_PED_ID(), GET_PED_COMPONENT_FROM_TYPE(INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType)), iDraw) IF iMaxTex > 0 iMaxTex-- ENDIF // loop for each texture FOR iTex = 0 TO iMaxtex SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" CASE ")SAVE_STRING_TO_DEBUG_FILE(GET_PED_COMP_NAME_STRING(INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType)))SAVE_STRING_TO_DEBUG_FILE("_")SAVE_STRING_TO_DEBUG_FILE(GET_CONTENTS_OF_TEXT_WIDGET(widgetID[1]))SAVE_STRING_TO_DEBUG_FILE("_")SAVE_INT_TO_DEBUG_FILE(iDraw)SAVE_STRING_TO_DEBUG_FILE("_")SAVE_INT_TO_DEBUG_FILE(iTex)SAVE_STRING_TO_DEBUG_FILE(" tlLabel = \"LABEL_")SAVE_INT_TO_DEBUG_FILE(iDraw)SAVE_STRING_TO_DEBUG_FILE("_")SAVE_INT_TO_DEBUG_FILE(iTex)SAVE_STRING_TO_DEBUG_FILE("\", iDraw = ")SAVE_INT_TO_DEBUG_FILE(iDraw)SAVE_STRING_TO_DEBUG_FILE(" iTex = ")SAVE_INT_TO_DEBUG_FILE(iTex)SAVE_STRING_TO_DEBUG_FILE(" cost = cost BREAK") iItem++ ENDFOR ENDFOR ELSE SAVE_NEWLINE_TO_DEBUG_FILE() IF INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType) = COMP_TYPE_OUTFIT SAVE_STRING_TO_DEBUG_FILE(" CASE ")SAVE_STRING_TO_DEBUG_FILE(GET_PED_COMP_NAME_STRING(INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType)))SAVE_STRING_TO_DEBUG_FILE("_")SAVE_STRING_TO_DEBUG_FILE(GET_CONTENTS_OF_TEXT_WIDGET(widgetID[1]))SAVE_STRING_TO_DEBUG_FILE("_ITEM")SAVE_INT_TO_DEBUG_FILE(iItem)SAVE_STRING_TO_DEBUG_FILE(" FILL_PED_COMPONENT_ITEM_DATA(sData, eType, eItem, \"NO_LABEL\", 0, 0, cost, !bOutfitOnly, !bCanToggle, ANCHOR_HEAD, COMP_STYLE_SENSIBLE) BREAK") ELSE SAVE_STRING_TO_DEBUG_FILE(" CASE ")SAVE_STRING_TO_DEBUG_FILE(GET_PED_COMP_NAME_STRING(INT_TO_ENUM(PED_COMP_TYPE_ENUM, iType)))SAVE_STRING_TO_DEBUG_FILE("_")SAVE_STRING_TO_DEBUG_FILE(GET_CONTENTS_OF_TEXT_WIDGET(widgetID[1]))SAVE_STRING_TO_DEBUG_FILE("_ITEM")SAVE_INT_TO_DEBUG_FILE(iItem)SAVE_STRING_TO_DEBUG_FILE(" FILL_PED_COMPONENT_ITEM_DATA(sData, eType, eItem, \"NO_LABEL\", 0, 0, cost, !bOutfitOnly, !bCanToggle, ANCHOR_HEAD, COMP_STYLE_SENSIBLE) BREAK") ENDIF iItem++ ENDIF SAVE_NEWLINE_TO_DEBUG_FILE() ENDFOR SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_NEWLINE_TO_DEBUG_FILE() CLOSE_DEBUG_FILE() ENDIF ENDPROC PROC UPDATE_INPUT() IF NOT IS_PED_INJURED(PLAYER_PED_ID()) // Check widgets IF bUpdateModel INT iModel = GET_HASH_KEY(GET_CONTENTS_OF_TEXT_WIDGET(widgetID[0])) IF IS_MODEL_A_PED(INT_TO_ENUM(MODEL_NAMES, iModel)) MODEL_NAMES eModel = INT_TO_ENUM(MODEL_NAMES, iModel) REQUEST_MODEL(eModel) WHILE NOT HAS_MODEL_LOADED(eModel) WAIT(0) ENDWHILE IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_PLAYER_MODEL(PLAYER_ID(), eModel) SET_PED_DEFAULT_COMPONENT_VARIATION(PLAYER_PED_ID()) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(eModel) ENDIF bUpdateModel = FALSE ENDIF IF bOutputVariations OUTPUT_COMPONENT_VARIATIONS() bOutputVariations = FALSE ENDIF IF bOutputAllInfo OUTPUT_ALL_COMPONENT_INFO() bOutputAllInfo = FALSE ENDIF IF bOutputCurrent OUTPUT_CURRENT_COMPONENT_INFO() bOutputCurrent = FALSE ENDIF IF bOutputValidationCheck PRINTNL() INT iComp, iDraw, iTex, iLen REPEAT NUM_PED_COMPONENTS iComp REPEAT GET_NUMBER_OF_PED_DRAWABLE_VARIATIONS(PLAYER_PED_ID(), INT_TO_ENUM(PED_COMPONENT, iComp)) iDraw REPEAT GET_NUMBER_OF_PED_TEXTURE_VARIATIONS(PLAYER_PED_ID(), INT_TO_ENUM(PED_COMPONENT, iComp), iDraw) iTex PRINTSTRING("\n") PRINTSTRING(GET_COMP_VARIATION_TYPE_STRING(INT_TO_ENUM(PED_COMPONENT, iComp))) iLen = GET_LENGTH_OF_LITERAL_STRING(GET_COMP_VARIATION_TYPE_STRING(INT_TO_ENUM(PED_COMPONENT, iComp))) WHILE iLen < 20 PRINTSTRING(" ") iLen++ ENDWHILE PRINTINT(iDraw)PRINTSTRING(", ")PRINTINT(iTex) IF IS_PED_COMPONENT_VARIATION_VALID(PLAYER_PED_ID(), eCompType, iDraw, iTex) PRINTSTRING(" VALID") ELSE PRINTSTRING(" INVALID") ENDIF ENDREPEAT ENDREPEAT ENDREPEAT PRINTNL() bOutputValidationCheck = FALSE ENDIF // Check model consistency IF NOT IS_PED_MODEL(PLAYER_PED_ID(), ePedModel) ePedModel = GET_ENTITY_MODEL(PLAYER_PED_ID()) RESET_STORED_DATA() ENDIF // Switch stage IF IS_BUTTON_JUST_PRESSED(PAD1, SQUARE) IF eStage = STAGE_PROP_CHECKER eStage = STAGE_COMP_CHECKER ELIF eStage = STAGE_COMP_CHECKER eStage = STAGE_PROP_CHECKER ENDIF RESET_STORED_DATA() ENDIF // Update prop checker IF eStage = STAGE_PROP_CHECKER IF IS_BUTTON_PRESSED(PAD1, LEFTSHOULDER1) // Switch prop position IF IS_BUTTON_JUST_PRESSED(PAD1, DPADUP) IF ENUM_TO_INT(ePropPos) <= 0 ePropPos = INT_TO_ENUM(PED_PROP_POSITION, NUM_PED_PROP_POSITIONS-1) ELSE ePropPos = INT_TO_ENUM(PED_PROP_POSITION, ENUM_TO_INT(ePropPos)-1) ENDIF ELIF IS_BUTTON_JUST_PRESSED(PAD1, DPADDOWN) IF ENUM_TO_INT(ePropPos) >= NUM_PED_PROP_POSITIONS-1 ePropPos = INT_TO_ENUM(PED_PROP_POSITION, 0) ELSE ePropPos = INT_TO_ENUM(PED_PROP_POSITION, ENUM_TO_INT(ePropPos)+1) ENDIF ENDIF ELSE // Switch prop index up/down IF IS_BUTTON_JUST_PRESSED(PAD1, DPADUP) IF iPropIndex+1 < GET_NUMBER_OF_PED_PROP_DRAWABLE_VARIATIONS(PLAYER_PED_ID(), ePropPos) iPropIndex++ ENDIF ELIF IS_BUTTON_JUST_PRESSED(PAD1, DPADDOWN) iPropIndex-- IF iPropIndex < 0 iPropIndex = GET_NUMBER_OF_PED_PROP_DRAWABLE_VARIATIONS(PLAYER_PED_ID(), ePropPos) -1 ENDIF ENDIF // Switch texture index left/right IF IS_BUTTON_JUST_PRESSED(PAD1, DPADRIGHT) IF iTexIndex+1 < GET_NUMBER_OF_PED_PROP_TEXTURE_VARIATIONS(PLAYER_PED_ID(), ePropPos, iPropIndex) iTexIndex++ ENDIF ELIF IS_BUTTON_JUST_PRESSED(PAD1, DPADLEFT) iTexIndex-- IF iTexIndex < 0 iTexIndex = GET_NUMBER_OF_PED_PROP_TEXTURE_VARIATIONS(PLAYER_PED_ID(), ePropPos, iPropIndex)-1 ENDIF ENDIF ENDIF IF IS_BUTTON_JUST_PRESSED(PAD1, CROSS) SET_PED_PROP_INDEX(PLAYER_PED_ID(), ePropPos, iPropIndex, iTexIndex) ELIF IS_BUTTON_JUST_PRESSED(PAD1, CIRCLE) CLEAR_PED_PROP(PLAYER_PED_ID(), ePropPos) ENDIF ELIF eStage = STAGE_COMP_CHECKER BOOL bUpdateComponents = FALSE PED_INDEX pedID = PLAYER_PED_ID() IF IS_BUTTON_PRESSED(PAD1, LEFTSHOULDER1) // Switch component type IF IS_BUTTON_JUST_PRESSED(PAD1, DPADUP) IF ENUM_TO_INT(eCompType) <= 0 eCompType = INT_TO_ENUM(PED_COMPONENT, NUM_PED_COMPONENTS-1) ELSE eCompType = INT_TO_ENUM(PED_COMPONENT, ENUM_TO_INT(eCompType)-1) ENDIF ELIF IS_BUTTON_JUST_PRESSED(PAD1, DPADDOWN) IF ENUM_TO_INT(eCompType) >= NUM_PED_COMPONENTS-1 eCompType = INT_TO_ENUM(PED_COMPONENT, 0) ELSE eCompType = INT_TO_ENUM(PED_COMPONENT, ENUM_TO_INT(eCompType)+1) ENDIF ENDIF ELSE // Switch drawable variation up/down IF IS_BUTTON_JUST_PRESSED(PAD1, DPADUP) IF iDrawable[ENUM_TO_INT(eCompType)]+1 < GET_NUMBER_OF_PED_DRAWABLE_VARIATIONS(PLAYER_PED_ID(), eCompType) iDrawable[ENUM_TO_INT(eCompType)]++ ELSE iDrawable[ENUM_TO_INT(eCompType)] = 0 ENDIF iTexture[ENUM_TO_INT(eCompType)] = 0 // reset texture bUpdateComponents = TRUE ELIF IS_BUTTON_JUST_PRESSED(PAD1, DPADDOWN) IF iDrawable[ENUM_TO_INT(eCompType)]-1 >= 0 iDrawable[ENUM_TO_INT(eCompType)]-- ELSE IF GET_NUMBER_OF_PED_DRAWABLE_VARIATIONS(PLAYER_PED_ID(), eCompType) = 0 iDrawable[ENUM_TO_INT(eCompType)] = 0 ELSE iDrawable[ENUM_TO_INT(eCompType)] = GET_NUMBER_OF_PED_DRAWABLE_VARIATIONS(PLAYER_PED_ID(), eCompType)-1 ENDIF ENDIF iTexture[ENUM_TO_INT(eCompType)] = 0 // reset texture bUpdateComponents = TRUE ENDIF // Switch texture variation left/right IF IS_BUTTON_JUST_PRESSED(PAD1, DPADRIGHT) IF iTexture[ENUM_TO_INT(eCompType)]+1 < GET_NUMBER_OF_PED_TEXTURE_VARIATIONS(PLAYER_PED_ID(), eCompType, iDrawable[ENUM_TO_INT(eCompType)]) iTexture[ENUM_TO_INT(eCompType)]++ ELSE iTexture[ENUM_TO_INT(eCompType)] = 0 ENDIF bUpdateComponents = TRUE ELIF IS_BUTTON_JUST_PRESSED(PAD1, DPADLEFT) IF iTexture[ENUM_TO_INT(eCompType)]-1 >= 0 iTexture[ENUM_TO_INT(eCompType)]-- ELSE IF GET_NUMBER_OF_PED_TEXTURE_VARIATIONS(PLAYER_PED_ID(), eCompType, iDrawable[ENUM_TO_INT(eCompType)]) = 0 iTexture[ENUM_TO_INT(eCompType)] = 0 ELSE iTexture[ENUM_TO_INT(eCompType)] = GET_NUMBER_OF_PED_TEXTURE_VARIATIONS(PLAYER_PED_ID(), eCompType, iDrawable[ENUM_TO_INT(eCompType)])-1 ENDIF ENDIF bUpdateComponents = TRUE ENDIF ENDIF IF bUpdateComponents INT i FOR i = 0 TO NUM_PED_COMPONENTS-1 SET_PED_COMPONENT_VARIATION(pedID, INT_TO_ENUM(PED_COMPONENT, i), iDrawable[i], iTexture[i]) ENDFOR ENDIF ENDIF ELSE eStage = STAGE_CLEANUP ENDIF ENDPROC PROC DISPLAY_STRING(FLOAT x, FLOAT y, STRING sText, BOOL bCentre, INT r = 255, INT g = 255, INT b = 255, INT a = 255) SET_TEXT_CENTRE(bCentre) SET_TEXT_SCALE(0.5000, 0.5000) SET_TEXT_COLOUR(r, g, b, a) SET_TEXT_DROPSHADOW(0, 0, 0, 0, 0) SET_TEXT_EDGE(0, 0, 0, 0, 0) DISPLAY_TEXT_WITH_LITERAL_STRING(x, y, "STRING", sText) ENDPROC PROC DISPLAY_LABEL(FLOAT x, FLOAT y, STRING sLabel, BOOL bCentre, INT r = 255, INT g = 255, INT b = 255, INT a = 255) SET_TEXT_CENTRE(bCentre) SET_TEXT_SCALE(0.5000, 0.5000) SET_TEXT_COLOUR(r, g, b, a) SET_TEXT_DROPSHADOW(0, 0, 0, 0, 0) SET_TEXT_EDGE(0, 0, 0, 0, 0) DISPLAY_TEXT(x, y, sLabel) ENDPROC PROC DISPLAY_LABEL_WITH_1_NUMBER(FLOAT x, FLOAT y, STRING sLabel, INT iNumber1, INT r = 255, INT g = 255, INT b = 255, INT a = 255) SET_TEXT_SCALE(0.5000, 0.5000) SET_TEXT_COLOUR(r, g, b, a) SET_TEXT_DROPSHADOW(0, 0, 0, 0, 0) SET_TEXT_EDGE(0, 0, 0, 0, 0) DISPLAY_TEXT_WITH_NUMBER(x, y, sLabel, iNumber1) ENDPROC PROC DISPLAY_LABEL_WITH_2_NUMBERS(FLOAT x, FLOAT y, STRING sLabel, INT iNumber1, INT iNumber2, INT r = 255, INT g = 255, INT b = 255, INT a = 255) SET_TEXT_SCALE(0.5000, 0.5000) SET_TEXT_COLOUR(r, g, b, a) SET_TEXT_DROPSHADOW(0, 0, 0, 0, 0) SET_TEXT_EDGE(0, 0, 0, 0, 0) DISPLAY_TEXT_WITH_2_NUMBERS(x, y, sLabel, iNumber1, iNumber2) ENDPROC PROC DISPLAY_COMPONENT_CHECKER_HUD() HIDE_HUD_AND_RADAR_THIS_FRAME() IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("COMP_HELP") PRINT_HELP_FOREVER("COMP_HELP") ENDIF // Interface background DRAW_RECT(0.5000, 0.1375, 0.3500, 0.1725, 0, 0, 0, 255) IF IS_BUTTON_PRESSED(PAD1, LEFTSHOULDER1) DRAW_RECT(0.5000, 0.1388, 0.3500, 0.0400, 125, 125, 125, 255) ELSE DRAW_RECT(0.5000, 0.1893, 0.3500, 0.0400, 125, 125, 125, 255) ENDIF // Title DISPLAY_STRING(0.500, 0.0615, "Component Checker", TRUE, 200, 255, 36, 255) // Component TEXT_LABEL_15 sText sText = "COMP_TYPE_" sText += ENUM_TO_INT(eCompType) DISPLAY_LABEL(0.5000, 0.1200, sText, TRUE) // Drawable/Texture INT iDrawVars = GET_NUMBER_OF_PED_DRAWABLE_VARIATIONS(PLAYER_PED_ID(), eCompType) INT iTexVars = GET_NUMBER_OF_PED_TEXTURE_VARIATIONS(PLAYER_PED_ID(), eCompType, iDrawable[ENUM_TO_INT(eCompType)]) IF iDrawVars > 0 iDrawVars-- ENDIF IF iTexVars > 0 iTexVars-- ENDIF DISPLAY_LABEL_WITH_2_NUMBERS(0.3500, 0.1702, "COMP_DRAW", iDrawVars, iDrawable[ENUM_TO_INT(eCompType)]) DISPLAY_LABEL_WITH_2_NUMBERS(0.5155, 0.1700, "COMP_TEX", iTexVars, iTexture[ENUM_TO_INT(eCompType)]) ENDPROC PROC DISPLAY_PROP_CHECKER_HUD() HIDE_HUD_AND_RADAR_THIS_FRAME() IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("PROP_HELP") PRINT_HELP_FOREVER("PROP_HELP") ENDIF // Interface background DRAW_RECT(0.5000, 0.1375, 0.3500, 0.1725, 0, 0, 0, 255) IF IS_BUTTON_PRESSED(PAD1, LEFTSHOULDER1) DRAW_RECT(0.5000, 0.1388, 0.3500, 0.0400, 125, 125, 125, 255) ELSE DRAW_RECT(0.5000, 0.1893, 0.3500, 0.0400, 125, 125, 125, 255) ENDIF // Title DISPLAY_STRING(0.500, 0.0615, "Prop Checker", TRUE, 200, 255, 36, 255) // Prop TEXT_LABEL_15 sText sText = "PROP_POS_" sText += ENUM_TO_INT(ePropPos) DISPLAY_LABEL(0.5000, 0.1200, sText, TRUE) // Drawable/Texture INT iDrawVars = GET_NUMBER_OF_PED_PROP_DRAWABLE_VARIATIONS(PLAYER_PED_ID(), ePropPos) INT iTexVars = GET_NUMBER_OF_PED_PROP_TEXTURE_VARIATIONS(PLAYER_PED_ID(), ePropPos, iPropIndex) IF iDrawVars > 0 iDrawVars-- ENDIF IF iTexVars > 0 iTexVars-- ENDIF // Prop/Texture index DISPLAY_LABEL_WITH_2_NUMBERS(0.3685, 0.1702, "PROP_INDEX", iDrawVars, iPropIndex) DISPLAY_LABEL_WITH_2_NUMBERS(0.5155, 0.1700, "PROP_TEX", iTexVars, iTexIndex) ENDPROC PROC DO_INITIALISE() VECTOR vPos = <<-428.6418, -120.9582, 64.8967>> FLOAT fHeading = 214.7821 IF NOT IS_PED_INJURED(PLAYER_PED_ID()) ePedModel = GET_ENTITY_MODEL(PLAYER_PED_ID()) CLEAR_AREA(vPos, 200.0, TRUE) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) SET_ENTITY_COORDS(PLAYER_PED_ID(), vPos) SET_ENTITY_HEADING(PLAYER_PED_ID(), fHeading) SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON) FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE) CLEAR_TIMECYCLE_MODIFIER() DISABLE_CELLPHONE(TRUE) RESET_STORED_DATA() SETUP_WIDGETS() eStage = STAGE_COMP_CHECKER ELSE eStage = STAGE_CLEANUP ENDIF ENDPROC PROC DO_COMP_CHECKER() UPDATE_INPUT() DISPLAY_COMPONENT_CHECKER_HUD() ENDPROC PROC DO_PROP_CHECKER() UPDATE_INPUT() DISPLAY_PROP_CHECKER_HUD() ENDPROC PROC DO_CLEANUP() IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE) ENDIF DISABLE_CELLPHONE(FALSE) CLEAR_HELP() TERMINATE_THIS_THREAD() ENDPROC SCRIPT NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME() WHILE TRUE WAIT(0) SWITCH eStage CASE STAGE_INIT DO_INITIALISE() BREAK CASE STAGE_COMP_CHECKER DO_COMP_CHECKER() BREAK CASE STAGE_PROP_CHECKER DO_PROP_CHECKER() BREAK CASE STAGE_CLEANUP DO_CLEANUP() BREAK ENDSWITCH IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F) OR IS_BUTTON_JUST_PRESSED(PAD1, TRIANGLE) DO_CLEANUP() ENDIF ENDWHILE ENDSCRIPT #ENDIF