Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: Neckiy poslato Novembar 08, 2021, 15:31:08 POSLE PODNE

Naslov: Silenced pistol
Poruka od: Neckiy poslato Novembar 08, 2021, 15:31:08 POSLE PODNE
Problem(error/warning): Jel neko moze da mi objasni kako funkcionise ono da pistolj sa prigusivacem ne moze npr da ubija nego da bude tazer ili da moze samo npc-eve da ubija i to. Ako ima neki callback ili plugin posto nmg da nadjem na netu
Deo skripte: //
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): //
Naslov: Odg: Silenced pistol
Poruka od: Fergosonn poslato Novembar 08, 2021, 16:05:27 POSLE PODNE
promenis u [pawn]OnPlayerDamage// OnPlayerTakeDamage moze da ti bude[/pawn]
da ne tazuje igraca vec samo npc-eve da ubija
Naslov: Odg: Silenced pistol
Poruka od: V01D poslato Novembar 08, 2021, 22:45:27 POSLE PODNE
Nista komplikovano, to funkcionise za bilo koje oruzije.

Ako ces da neko oruzije ne deluje damage na igraca, samo vratis 0

Evo par primera :

[pawn]public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart) {

   if(weaponid == WEAPON_SILENCED) return 0; //Ukoliko igrac upuca bilo koga sa silenced pistoljem, nece mu naneti damage

   if(bodypart == 9) { //Jos jedan primer ako ga upuca u glavu

      SendClientMessage(playerid, -1, "Ne smes da pucas igrace u glavu!"); //izbaci poruku
      return 0; //vratimo 0 da ne bi dilalo damage na igraca
   }

   return 1;
}[/pawn]

Primer za tazer bi bio nesto na ovaj fazon :

[pawn]public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart) {

   //Uzecemo za primer da je organizacija policija ID 1

   if(PlayerInfo[playerid][xClan] == 1 && PlayerInfo[damagedid][xClan] != 1 && damagedid != INVALID_PLAYER_ID) {

      //Ovde iznad smo napravili proveru ako je ovaj sto daje dmg u pd-u i ako ovaj sto prima dmg nije
      if(PlayerInfo[damagedid][xWanted] >= 1 && GetPlayerWeapon(playerid) == WEAPON_SILENCED) { //Ako ima wanted ovaj sto prima dmg i ako ovaj ima silenced pistolj

         TogglePlayerControllable(damagedid, false); //Freezamo igraca koji prima dmg
         SendClientMessage(playerid, -1, "Tazovao si igraca!");
         SendClientMessage(damagedid, -1, "Igrac te je tazovao!");

         //Izbaci poruke, postavi promenljive ili sta vec hoces

         return 0; //Da ne prima dmg
      }
   }

   return 1;
}[/pawn]

A sto se npc-a tice ili actora, u zavisnosti sta koristis drugacije je :

Za actora koristis OnPlayerGiveDamageActor ili OnPlayerGiveDamageDynamicActor ( ovaj primer imas u Balkan Evolution modu koji je objavljen ovde )

Za NPC-a ako koristis FCNPC include, sto je moja topla preporuka, koristis FCNPC_OnTakeDamage ( ovaj primer sam radio u Miami Street modu sto imas negde na forumu ovom )