Open Thomysr opened 1 year ago
Hello !
L'une des contraintes de SOZ est de ne jamais appuyer sur E.
Malheureusement, ta feature proposée va à l'encontre de cette contrainte étant donné que le Joueur doit ramasser la neige à l'aide du bouton E.
Si tu trouves une solution - adapte, pourquoi pas !
Peut-être un B-target, je vais faire des tests pour voir ce qui rend le mieux
Via une animation de "ramasser par terre" ça serait top
Via une animation :
Vidéo test : https://streamable.com/6rwsbx
"Boule de neige" est un objet, considéré comme une arme (C'est le cas dans GTA de base), donc elle doit pouvoir être bind dans les accès rapides.
Tu dois y ajouter une image produite avec MidJourney, en 200x200 DXT5 mipmaps 1 dans soz-items.ytd
Finalement, ajoute lui un poids et une description.
L'animation doit aussi pouvoir être bind sur le pavé numérique.
Par ailleurs, la source de ton code provient sûrement de FiveM, on devra donc vérifier que l'identique n'existe pas ailleurs, sinon ça ne pourra pas être accepté.
@Thomysr Est-ce que tu es toujours dessus ? Est-ce que tu as besoin d'aide ?
@Zocaxu
Hey, désolé j'ai pas vu les réponses. Je suis entrain de refaire tout ça autrement de façon plus clean ( et plus simple ).
L'idée c'est : Ramassé une boule sous forme d'item depuis le menu annimation, et pouvoir se l'équiper et pouvoir séléectionné des raccourcis.
Concernant le code, c'est plus la partie item qui me pose problème ( give de la snowball en item OK, par contre les munitions restent à 0 )
@Thomysr
Hey, désolé j'ai pas vu les réponses. Je suis entrain de refaire tout ça autrement de façon plus clean ( et plus simple ).
L'idée c'est : Ramassé une boule sous forme d'item depuis le menu annimation, et pouvoir se l'équiper et pouvoir séléectionné des raccourcis.
Concernant le code, c'est plus la partie item qui me pose problème ( give de la snowball en item OK, par contre les munitions restent à 0 )
Il faut que tu gères la gestion d'inventaire coté server par exemple ajoute dans gta-server/resources/[soz]/soz-core/src/server/weapon/weapon.provider.ts
@OnEvent(ServerEvent.GET_SNOW)
public snow(source: number) {
const weapon = this.inventoryManager.getFirstItemInventory(source, 'weapon_snowball');
if (weapon) {
if (weapon.metadata.ammo >= 40) {
this.notifier.notify(source, 'Tu as trop de boules de neige sur toi !', 'error');
return;
}
this.inventoryManager.updateMetadata(source, weapon.slot, {
ammo: weapon.metadata.ammo + 2,
});
} else {
this.inventoryManager.addItemToInventory(source, 'weapon_snowball', 1, { ammo: 2 });
}
this.notifier.notify(source, 'Tu as ramassé deux boules de neige');
}
coté client dans gta-server/resources/[soz]/soz-core/src/client/weapon/weapon.provider.ts
@On('snowball')
public async snow() {
const playerPedId = PlayerPedId();
const playerId = PlayerId();
if (
IsPedInAnyVehicle(playerPedId, true) ||
IsPlayerFreeAiming(playerId) ||
IsPedSwimming(playerPedId) ||
IsPedSwimmingUnderWater(playerPedId) ||
IsPedRagdoll(playerPedId) ||
IsPedFalling(playerPedId) ||
IsPedRunning(playerPedId) ||
IsPedSprinting(playerPedId) ||
GetInteriorFromEntity(playerPedId) ||
IsPedShooting(playerPedId) ||
IsPedUsingAnyScenario(playerPedId) ||
IsPedInCover(playerPedId, false)
) {
return;
}
const { completed } = await this.progressService.progress('snow', 'Ramassage de neige...', 2000, {
dictionary: 'anim@mp_snowball',
name: 'pickup_snowball',
});
if (completed) {
TriggerServerEvent(ServerEvent.GET_SNOW);
}
}
Pour la désactivation des dégats, tu peux utiliser le fichier gta-server/resources/[weapon]/soz-weapon-metaconfig/stream/weapons.meta Tu ajoutes la custo du projectile boule de neige à coté de celle de la grenade par exemple:
<Item type="CAmmoThrownInfo">
<Name>AMMO_SNOWBALL</Name>
<Model>w_ex_snowball</Model>
<Audio />
<Slot />
<AmmoMax value="40" />
<AmmoMax50 value="40" />
<AmmoMax100 value="40" />
<AmmoMaxMP value="40" />
<AmmoMax50MP value="40" />
<AmmoMax100MP value="40" />
<AmmoFlags>FixedAfterExplosion</AmmoFlags>
<Damage value="0.000000" />
<LifeTime value="10.000000" />
<FromVehicleLifeTime value="2.500000" />
<LifeTimeAfterImpact value="0.001000" />
<LifeTimeAfterExplosion value="0.000000" />
<ExplosionTime value="0.250000" />
<LaunchSpeed value="25.000000" />
<SeparationTime value="0.000000" />
<TimeToReachTarget value="0.000000" />
<Damping value="0.050000" />
<GravityFactor value="1.000000" />
<RicochetTolerance value="0.000000" />
<PedRicochetTolerance value="0.000000" />
<VehicleRicochetTolerance value="0.000000" />
<Explosion>
<Default>EXP_TAG_SNOWBALL</Default>
<HitCar>DONTCARE</HitCar>
<HitTruck>DONTCARE</HitTruck>
<HitBike>DONTCARE</HitBike>
<HitBoat>DONTCARE</HitBoat>
<HitPlane>DONTCARE</HitPlane>
</Explosion>
<FuseFx>proj_snowball_fuse</FuseFx>
<FuseFxFP />
<TrailFx>proj_snowball_trail</TrailFx>
<TrailFxUnderWater />
<TrailFxFadeInTime value="0.000000" />
<TrailFxFadeOutTime value="0.000000" />
<PrimedFx />
<DisturbFxDefault />
<DisturbFxSand />
<DisturbFxWater />
<DisturbFxDirt />
<DisturbFxFoliage />
<DisturbFxProbeDist value="0.000000" />
<DisturbFxScale value="0.000000" />
<LightOnlyActiveWhenStuck value="false" />
<LightFlickers value="false" />
<LightBone />
<LightColour x="0.000000" y="0.000000" z="0.000000" />
<LightIntensity value="0.000000" />
<LightRange value="0.000000" />
<LightFalloffExp value="0.000000" />
<LightFrequency value="0.000000" />
<LightPower value="0.000000" />
<CoronaSize value="0.000000" />
<CoronaIntensity value="0.000000" />
<CoronaZBias value="0.000000" />
<ProjectileFlags>DestroyOnImpact ProcessImpacts NoPullPin DoubleDamping ApplyDamageOnImpact DontFireAnyEvents</ProjectileFlags>
<ThrownForce value="0.000000" />
<ThrownForceFromVehicle value="5.000000" />
</Item>
Avec ca plus besoin de ton code en lua dans une ressource dédiée
Au top @Laikker ! Merci pour tout ça, je partais sur cette voie la justement, je creusait le fonctionnement de l'InventoryManager
Comme la boule de neige est une arme, il faut que tu équipes le joueur du nombre de boule de neige qu'il a sur lui via GiveWeaponToPed quand il utilise l'item dans son inventaire (ou via le raccourcis) et que tu t'assures qu'il perde bien les boules de neige qu'il lance, puis que les boules de neiges sont deséquipees quand il n'en a plus dans l'inventaire.
Comme la boule de neige est une arme, il faut que tu équipes le joueur du nombre de boule de neige qu'il a sur lui via GiveWeaponToPed quand il utilise l'item dans son inventaire (ou via le raccourcis) et que tu t'assures qu'il perde bien les boules de neige qu'il lance, puis que les boules de neiges sont deséquipees quand il n'en a plus dans l'inventaire.
Non, comme la boule de neige est déjà déclarée comme une arme, tout est déjà géré par le code existant
Super alors ! Encore plus facile
Hello, j'ai implémenté tout ça, les fichiers sont dispo sur la branche Snowball de mon repo.
Voici une démo : https://streamable.com/55s4bj
Is there an existing issue for this?
What feature are you suggesting?
Ajout de la posibilité de ramasser / jeter des snowballs
Explain all the steps and mechanics clearly and precisely.
Si le joueur est dans les bonnes conditions, il peut ramasser des boules-de-neige par terre (limite de 3 ), puis il peut les jeter à pied ou en véhicule. Image :
Vidéo test : https://streamable.com/o9m7ic
La branche ( Snowball ) est disponnible ici
Why would this feature be useful?
Tout le monde aime jeter des boules de neige.