SOZ-Faut-etre-Sub / SOZ-FiveM-Server

SOZ Fivem Server Source Code
https://soz.zerator.com
MIT License
198 stars 87 forks source link

[SnowBall] Allows you to pick up snowballs. #46

Open Thomysr opened 1 year ago

Thomysr commented 1 year ago

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 : snow1 snow2

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.

NariieL commented 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 !

Thomysr commented 1 year ago

Peut-être un B-target, je vais faire des tests pour voir ce qui rend le mieux

Zocaxu commented 1 year ago

Via une animation de "ramasser par terre" ça serait top

Thomysr commented 1 year ago

Via une animation : snow3

Vidéo test : https://streamable.com/6rwsbx

NariieL commented 1 year ago

Complète à l'aide des informations suivantes :

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é.

Zocaxu commented 1 year ago

@Thomysr Est-ce que tu es toujours dessus ? Est-ce que tu as besoin d'aide ?

Thomysr commented 1 year ago

@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 )

Laikker commented 1 year ago

@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

Thomysr commented 1 year ago

Au top @Laikker ! Merci pour tout ça, je partais sur cette voie la justement, je creusait le fonctionnement de l'InventoryManager

Zocaxu commented 1 year ago

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.

Laikker commented 1 year ago

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

Zocaxu commented 1 year ago

Super alors ! Encore plus facile

Thomysr commented 1 year ago

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