[SA] Remake Mod Lanterna
Enviado: 26 Jul 2019, 12:44


Remake do Mod Lanterna, esse foi chato demais pra se fazer, não está perfeito mas acredito que não consigo fazer melhor,(estava enganado) então vou postar aqui assim mesmo.
- Agora ilumina pra frente ao invés de pra cima kkkkkkk
- Diminuído os bugs visuais da luz da lanterna
- Adicionado uma luz no chão
- A lanterna substitui o gun_vibe2 (foi utilizado outro modelo de lanterna, editei a textura e refiz o ícone)
- Você pode pegar a lanterna ao digitar o seguinte cheat: lanterna
- Aperte o botão de atacar para desligar a lanterna e poder correr (assim diminui e muito os bugs visuais da luz e ainda da pra correr);
*quando for salvar o jogo, coloque outra arma na mão pra ela não ficar presa no seu jogo salvo
Código: Selecionar tudo
SCRIPT_START
{
LVAR_INT scplayer luz obj marca var ol idist idist2
LVAR_FLOAT x[3] y[3] z[4] angulo dist
GET_PLAYER_CHAR 0 scplayer
IF IS_AUSTRALIAN_GAME
CREATE_OBJECT_NO_OFFSET GUN_VIBE2 0.0 0.0 0.0 obj
CREATE_SEARCHLIGHT 0.0 0.0 0.0 0.0 0.0 0.0 22.0 0.0 luz
ENDIF
WHILE NOT HAS_CHAR_GOT_WEAPON scplayer WEAPONTYPE_VIBE2
WAIT 0
IF TEST_CHEAT "lanterna"
REQUEST_MODEL GUN_VIBE2
LOAD_ALL_MODELS_NOW
GIVE_WEAPON_TO_CHAR scplayer WEAPONTYPE_VIBE2 1
ENDIF
ENDWHILE
REQUEST_ANIMATION "lanterna"
WHILE NOT HAS_ANIMATION_LOADED "lanterna"
WAIT 0
ENDWHILE
WHILE TRUE
IF IS_CURRENT_CHAR_WEAPON scplayer WEAPONTYPE_VIBE2
WHILE IS_CURRENT_CHAR_WEAPON scplayer WEAPONTYPE_VIBE2
IF NOT IS_CHAR_IN_AIR scplayer
AND var = 0
IF NOT DOES_OBJECT_EXIST obj
GOSUB criar
ENDIF
GOSUB searchlight
WAIT 0
GOSUB player
IF DOES_SEARCHLIGHT_EXIST luz
DELETE_SEARCHLIGHT luz
ENDIF
IF IS_BUTTON_PRESSED 0 17
timera = 0
WHILE IS_BUTTON_PRESSED 0 17
AND timera < 500
CLEO_CALL SimulateKey 0 17
WAIT 0
ENDWHILE
var = 1
ENDIF
IF CLEO_CALL CharOnFire 0 (scplayer)
var = 1
ENDIF
ELSE
IF IS_CHAR_PLAYING_ANIM scplayer "lanterna0"
AND DOES_OBJECT_EXIST obj
DELETE_OBJECT obj
ENDIF
IF DOES_SEARCHLIGHT_EXIST luz
DELETE_SEARCHLIGHT luz
ENDIF
WHILE IS_CHAR_IN_AIR scplayer
WAIT 0
IF DOES_SEARCHLIGHT_EXIST luz
DELETE_SEARCHLIGHT luz
ENDIF
ENDWHILE
WAIT 0
IF IS_BUTTON_PRESSED 0 17
timera = 0
WHILE IS_BUTTON_PRESSED 0 17
AND timera < 500
CLEO_CALL SimulateKey 0 17
WAIT 0
ENDWHILE
var = 0
ENDIF
ENDIF
CLEO_CALL SimulateKey 0 17
ENDWHILE
IF DOES_OBJECT_EXIST obj
DELETE_OBJECT obj
ENDIF
ELSE
WAIT 0
ENDIF
ENDWHILE
player:
IF IS_CURRENT_CHAR_WEAPON scplayer WEAPONTYPE_VIBE2
IF DOES_OBJECT_EXIST obj
IF NOT IS_CHAR_PLAYING_ANIM scplayer "lanterna0"
IF NOT IS_CHAR_IN_AIR scplayer
TASK_PICK_UP_OBJECT scplayer obj 0.0 0.0 0.0 6 16 "lanterna0" "lanterna" -1
ENDIF
ENDIF
ENDIF
ENDIF
RETURN
criar:
IF NOT DOES_OBJECT_EXIST obj
IF NOT HAS_MODEL_LOADED GUN_VIBE2
REQUEST_MODEL GUN_VIBE2
WHILE NOT HAS_MODEL_LOADED GUN_VIBE2
WAIT 0
ENDWHILE
ENDIF
GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS scplayer 0.0 0.2 0.0 x[0] y[0] z[0]
CREATE_OBJECT GUN_VIBE2 x[0] y[0] z[0] obj
SET_OBJECT_VISIBLE obj FALSE
TASK_PICK_UP_OBJECT scplayer obj 0.0 0.0 0.0 6 16 "lanterna0" "lanterna" -1
ENDIF
RETURN
searchlight:
IF DOES_OBJECT_EXIST obj
GET_OFFSET_FROM_OBJECT_IN_WORLD_COORDS obj 0.12 0.03 0.1 x[0] y[0] z[0]
GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS scplayer 0.0 0.0 -0.8 x[1] y[1] z[1]
GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS scplayer 0.2 5.0 0.0 x[1] y[1] z[2]
GET_OFFSET_FROM_OBJECT_IN_WORLD_COORDS obj 5.0 -1.0 0.0 x[2] y[2] z[3]
x[1] *= 6.0
y[1] *= 6.0
x[1] += x[2]
y[1] += y[2]
x[1] /= 7.0
y[1] /= 7.0
CREATE_SEARCHLIGHT x[0] y[0] z[0] x[1] y[1] z[1] 17.5 0.0 luz
//chão
GET_CHAR_HEADING scplayer angulo
angulo *= 0.0174533
GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS scplayer 0.8 40.0 -4.0 x[1] y[1] z[2]
GET_OFFSET_FROM_OBJECT_IN_WORLD_COORDS obj 20.0 -8.0 -4.0 x[2] y[2] z[3]
x[1] *= 6.0
y[1] *= 6.0
x[1] += x[2]
y[1] += y[2]
x[1] /= 7.0
y[1] /= 7.0
z[1] -= 6.0
GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS scplayer 0.0 1.0 0.0 x[0] y[0] z[0]
CLEO_CALL getIntPoint 0 x[0] y[0] z[0] x[1] y[1] z[1] 1 1 1 0 0 0x0 (x[1] y[1] z[1] dist)
idist =# dist
idist2 = 155
idist *= 5
dist /= 3.5
idist2 -= idist
z[1] += 10.0
IF idist2 > 0
DRAW_SHADOW 3 x[1] y[1] z[1] angulo dist 1 idist2 idist2 idist2
ENDIF
ENDIF
RETURN
}
{
getIntPoint:
LVAR_FLOAT fromX fromY fromZ toX toY toZ
LVAR_INT bBuilding bCar bActor bObject bParticle
LVAR_INT ignoreEntity
LVAR_FLOAT intPointX intPointY intPointZ fDistance
LVAR_INT var1 var2 var3 var4
LVAR_INT bReturn
LVAR_INT var5 var6 var7
LVAR_INT var8
IF NOT ignoreEntity = 0x0
WRITE_MEMORY 0xB7CD68 4 ignoreEntity FALSE
ENDIF
GET_VAR_POINTER (fromX) (var1) // from 0-2
GET_VAR_POINTER (toX) (var2) // to 3-5
GET_VAR_POINTER (intPointX) (var3) // out 12-14
GET_VAR_POINTER (fDistance) (var4) // out 15
CALL_FUNCTION 0x56BA00 12 12 (0 0 0) (bParticle bObject bActor bCar bBuilding) (var4 var3 var2 var1) bReturn
IF NOT ignoreEntity = 0x0
WRITE_MEMORY 0xB7CD68 4 0 FALSE
ENDIF
GET_VAR_POINTER (var5) (var8)
IF NOT bReturn = 0
IF NOT intPointX = 0.0
AND NOT intPointY = 0.0
AND NOT intPointZ = 0.0
GET_DISTANCE_BETWEEN_COORDS_3D (fromX fromY fromZ) (intPointX intPointY intPointZ) (fDistance)
ENDIF
ELSE
fDistance = 0.0
ENDIF
CLEO_RETURN 0 intPointX intPointY intPointZ fDistance
}
{
SimulateKey:
LVAR_INT adress
adress *= 2
adress += 0xB73458
WRITE_MEMORY adress 2 0 0
CLEO_RETURN 0
}
{
CharOnFire:
LVAR_INT hChar // in
LVAR_INT p i
GET_PED_POINTER hChar (p)
i = p + 0x730 //m_pFire
READ_MEMORY i 4 FALSE (i)
IF NOT i = 0
RETURN_TRUE
CLEO_RETURN 0
ENDIF
RETURN_FALSE
CLEO_RETURN 0
}
SCRIPT_END