Change the damage weapon without recover Health/Armor?
#1

Hi i want to know if its possible to change the damage for the fast weapon(AK,M4,MP5...) without bug recover Health And Armor when the script dont have the time to SetHp/Armor, /CheckHp/Armor.

The reason of this bug is apparently:

Quote:
Originally Posted by MP2
Посмотреть сообщение
I just did some basic testing and it turns out my theory was (unfortunately) correct. OnPlayerUpdate isn't called between every call of OnPlayerGive/TakeDamage. I'm still not sure if the health/armour are synced separately to OPU though, more testing is needed. It should be okay for any damage apart from fire (which removes health faster than OPU!).

I don't really want to hook OPU though, so I may just store players' health in two arrays and deduct the health/armour loss manually instead of relying on the syncing. But then again, some factors (which I can't think of right at this moment) may interfere such as vending machines.

I will leave this how it is for now, as it only affects (I think) fire.
https://sampforum.blast.hk/showthread.php?tid=414939

Its possible or not?
Reply
#2

Код:
#include <a_samp>
#if defined FILTERSCRIPT

//============================Filter-Script===================================//

public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print(" WDS");
	return 1;
}

public OnFilterScriptExit()
{
	return 1;
}
#endif
//============================================================================//

public OnPlayerConnect(playerid)
{
	
	return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
	return 1;
}

public OnPlayerSpawn(playerid)
{
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
	SendDeathMessage(killerid, playerid, reason);

    new deathreason[32];
    if(reason == 0) {format(deathreason, sizeof(deathreason), "Fists");}
    if(reason == 1) {format(deathreason, sizeof(deathreason), "Brass Knuckles");}
    if(reason == 2) {format(deathreason, sizeof(deathreason), "Golf Stick");}
    if(reason == 3) {format(deathreason, sizeof(deathreason), "Cop Stick");}
    if(reason == 4) {format(deathreason, sizeof(deathreason), "Knife");}
    if(reason == 5) {format(deathreason, sizeof(deathreason), "Baseball Bat");}
    if(reason == 6) {format(deathreason, sizeof(deathreason), "Shovel");}
    if(reason == 7) {format(deathreason, sizeof(deathreason), "Pool Cue");}
    if(reason == 8) {format(deathreason, sizeof(deathreason), "Katana");}
    if(reason == 9) {format(deathreason, sizeof(deathreason), "Chainsaw");}
    if(reason == 10){format(deathreason, sizeof(deathreason), "Dildo");}
    if(reason == 11){format(deathreason, sizeof(deathreason), "Small Vibrator");}
    if(reason == 12){format(deathreason, sizeof(deathreason), "Large Vibrator");}
    if(reason == 13){format(deathreason, sizeof(deathreason), "Vibrator");}
    if(reason == 14){format(deathreason, sizeof(deathreason), "Flowers");}
    if(reason == 15){format(deathreason, sizeof(deathreason), "Cane");}
    if(reason == 16){format(deathreason, sizeof(deathreason), "Grenade");}
    if(reason == 17){format(deathreason, sizeof(deathreason), "Smoke Grenade");}
    if(reason == 18){format(deathreason, sizeof(deathreason), "Molotov Cocktail");}
    if(reason == 19){format(deathreason, sizeof(deathreason), "Vehicle Weapon");}
    if(reason == 20){format(deathreason, sizeof(deathreason), "Hydra Flare");}
    if(reason == 21){format(deathreason, sizeof(deathreason), "Jetpack");}
    if(reason == 22){format(deathreason, sizeof(deathreason), "9mm");}
    if(reason == 23){format(deathreason, sizeof(deathreason), "Silenced 9mm");}
    if(reason == 24){format(deathreason, sizeof(deathreason), "Desert Eagle");}
    if(reason == 25){format(deathreason, sizeof(deathreason), "Shotgun");}
    if(reason == 26){format(deathreason, sizeof(deathreason), "Sawnoff Shotgun");}
    if(reason == 27){format(deathreason, sizeof(deathreason), "Combat Shotgun");}
    if(reason == 28){format(deathreason, sizeof(deathreason), "Micro SMG");}
    if(reason == 29){format(deathreason, sizeof(deathreason), "MP5");}
    if(reason == 30){format(deathreason, sizeof(deathreason), "AK47");}
    if(reason == 31){format(deathreason, sizeof(deathreason), "M4");}
    if(reason == 32){format(deathreason, sizeof(deathreason), "Tec-9");}
    if(reason == 33){format(deathreason, sizeof(deathreason), "Rifle");}
    if(reason == 34){format(deathreason, sizeof(deathreason), "Sniper Rifle");}
    if(reason == 35){format(deathreason, sizeof(deathreason), "Rocket Launcherr");}
    if(reason == 36){format(deathreason, sizeof(deathreason), "Rocket Launcher");}
    if(reason == 37){format(deathreason, sizeof(deathreason), "Flamethrower");}
    if(reason == 38){format(deathreason, sizeof(deathreason), "Minigun");}
    if(reason == 39){format(deathreason, sizeof(deathreason), "Backpack Bomb");}
    if(reason == 40){format(deathreason, sizeof(deathreason), "Detonator");}
    if(reason == 41){format(deathreason, sizeof(deathreason), "Spraycan");}
    if(reason == 42){format(deathreason, sizeof(deathreason), "Fire Extinguisher");}
    if(reason == 43){format(deathreason, sizeof(deathreason), "Camera");}
    if(reason == 44){format(deathreason, sizeof(deathreason), "Nightvision Goggles");}
    if(reason == 45){format(deathreason, sizeof(deathreason), "Infrared Goggles");}
    if(reason == 46){format(deathreason, sizeof(deathreason), "Parachute");}
    if(reason == 47){format(deathreason, sizeof(deathreason), "!>>> Unknown 47 <<<!");}
    if(reason == 48){format(deathreason, sizeof(deathreason), "!>>> Unknown 48 <<<!");}
    if(reason == 49){format(deathreason, sizeof(deathreason), "Vehicle");}
    if(reason == 50){format(deathreason, sizeof(deathreason), "Helicopter Blades");}
    if(reason == 51){format(deathreason, sizeof(deathreason), "Explosion");}
    if(reason == 52){format(deathreason, sizeof(deathreason), "!>>> Unknown 52 <<<!");}
    if(reason == 53){format(deathreason, sizeof(deathreason), "Drowned");}
    if(reason == 54){format(deathreason, sizeof(deathreason), "Splat");}
    if(reason == 55){format(deathreason, sizeof(deathreason), "!>>> Unknown 55 <<<!");}
    if(reason == 255){format(deathreason, sizeof(deathreason), "Died");}
    GivePlayerMoney(killerid, 100);
    SendClientMessage(killerid, -1,"You have earned 100 cash for killing a player");
    GivePlayerMoney(playerid, -100);
    SendClientMessage(playerid, -1,"You have lost 100 cash for getting killed");
	return 1;
}



public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/fshelp", cmdtext, true, 10) == 0)
	{
		SendClientMessage(playerid, -1,"This FS is scripted from scratch by Nirzor and contains some fun Death features and Realistic features");
		return 1;
	}
	return 0;
}
OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid);
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
    new Float:HP;
    GetPlayerHealth(playerid, HP);
    if(weaponid == 0) SetPlayerHealth(playerid, HP-5);//Unarmed
    if(weaponid == 1) SetPlayerHealth(playerid, HP-9);//Brass knuckles
    if(weaponid == 2) SetPlayerHealth(playerid, HP-12);//Golf club
    if(weaponid == 3) SetPlayerHealth(playerid, HP-8);//Nite stick
    if(weaponid == 4) SetPlayerHealth(playerid, HP-14);//Knife
    if(weaponid == 5) SetPlayerHealth(playerid, HP-15);//Baseball bat
    if(weaponid == 6) SetPlayerHealth(playerid, HP-7);//Shovel
    if(weaponid == 7) SetPlayerHealth(playerid, HP-6);//Pool cue
    if(weaponid == 8) SetPlayerHealth(playerid, HP-16);//Katana
    if(weaponid == 9) SetPlayerHealth(playerid, HP-20);//Chainsaw
    if(weaponid == 10) SetPlayerHealth(playerid, HP-4);//Purple dildo
    if(weaponid == 11) SetPlayerHealth(playerid, HP-6);//Short vibrator
    if(weaponid == 12) SetPlayerHealth(playerid, HP-7);//Long vibrator
    if(weaponid == 13) SetPlayerHealth(playerid, HP-4);//White dildo
    if(weaponid == 14) SetPlayerHealth(playerid, HP-10);//Flowers
    if(weaponid == 15) SetPlayerHealth(playerid, HP-13);//Cane
    if(weaponid == 16) SetPlayerHealth(playerid, HP-100);//Grenades
    if(weaponid == 17) SetPlayerHealth(playerid, HP-5);//Tear gas
    if(weaponid == 22) SetPlayerHealth(playerid, HP-15);//9mm Pistol
    if(weaponid == 23) SetPlayerHealth(playerid, HP-15);//Silenced pistol
    if(weaponid == 24) SetPlayerHealth(playerid, HP-20);//DesertEagle
    if(weaponid == 25) SetPlayerHealth(playerid, HP-60);//Shotgun
    if(weaponid == 26) SetPlayerHealth(playerid, HP-35);//Sawn-off shotgun
    if(weaponid == 27) SetPlayerHealth(playerid, HP-40);//Combat
    if(weaponid == 28) SetPlayerHealth(playerid, HP-17);//Micro Uzi (Mac 10)
    if(weaponid == 29) SetPlayerHealth(playerid, HP-26);//Mp5
    if(weaponid == 30) SetPlayerHealth(playerid, HP-30);//Ak47
    if(weaponid == 31) SetPlayerHealth(playerid, HP-30);//M4
    if(weaponid == 32) SetPlayerHealth(playerid, HP-17);//Tec 9
    if(weaponid == 33) SetPlayerHealth(playerid, HP-90);//Country rifle
    if(weaponid == 34) SetPlayerHealth(playerid, HP-100);//Sniper rifle
    if(weaponid == 35) SetPlayerHealth(playerid, HP-150);//Epg
    if(weaponid == 36) SetPlayerHealth(playerid, HP-170);//Heat seeking rocket
    if(weaponid == 37) SetPlayerHealth(playerid, HP-30);//Flame-thrower
    if(weaponid == 38) SetPlayerHealth(playerid, HP-15);//Mini gun
    if(weaponid == 39) SetPlayerHealth(playerid, HP-150);//Satchel charges
    if(weaponid == 41) SetPlayerHealth(playerid, HP-10);//Spray can
	if(weaponid == 42) SetPlayerHealth(playerid, HP-15);//Fire extinguisher
    return 1;
}
//============================================================================//
Using this script, the damage of the guns are so realistic
Reply
#3

Humm no, i know.

My script its...

PHP код:
switch(weaponid)
                    {
                        case 
15amount 12;
                        case 
5amount 12;
                           case 
22amount 18;
                        case 
28amount 8;
                        case 
29amount 10;
                        case 
32amount 9;
                        case 
33amount 40;
                        case 
34amount 50;
                    }
                       
armour armour amount;
                    if(
armour 0.0)
                    {
                          
health += armour;
                         if(
health <= 0.0)
                         {
                            
health 0.0;
                           }
                        
armour 0.0;
                     }
                     
SetPlayerHealth(playeridhealth);
                     
SetPlayerArmour(playeridarmour); 
My problem its when a player has a weapon rapid(MP5,AK, other...) the script doesnt have the time for check the Heal/Armor and recover sometimes the heal or armor, MP2 as explained.

Quote:
Originally Posted by MP2
Посмотреть сообщение
Introduction

You may be thinking 'why not just save their old armour AND health, then use GetPlayerHealth + GetPlayerArmour under OnPlayerGive/Take damage to see what was lost? Well. GetPlayerHealth/Armour doesn't work under OnPlayerGive/TakeDamage because they don't sync with the server until the next OnPlayerUpdate call, which would involve pretty much the same amount of code as this did, but you'd have to have a variable to store their health also. Why waste memory?!
Quote:
Originally Posted by MP2
Посмотреть сообщение
I just did some basic testing and it turns out my theory was (unfortunately) correct. OnPlayerUpdate isn't called between every call of OnPlayerGive/TakeDamage. I'm still not sure if the health/armour are synced separately to OPU though, more testing is needed. It should be okay for any damage apart from fire (which removes health faster than OPU!).

I don't really want to hook OPU though, so I may just store players' health in two arrays and deduct the health/armour loss manually instead of relying on the syncing. But then again, some factors (which I can't think of right at this moment) may interfere such as vending machines.

I will leave this how it is for now, as it only affects (I think) fire.
Someone found a solution?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)