View difference between Paste ID: VaS1qSAG and zGkJR8AG
SHOW: | | - or go back to the newest paste.
1
public OnPlayerSpawn(playerid)
2
{
3
	SetPlayerHealth(playerid, 9999999);
4
	SetPlayerTeam(playerid, 0);
5
	return 1;
6
}
7
8-
forward SetPlayerHealthEx(playerid,Float:hp,reason = 0,Float:amount = 0.0);
8+
// reason = weaponid
9-
stock SetPlayerHealthEx(playerid,Float:hp,reason = 0,Float:amount = 0.0)
9+
// hp = hp to set
10
forward SetPlayerHealthEx(playerid,Float:hp,reason = 0);
11
stock SetPlayerHealthEx(playerid,Float:hp,reason = 0)
12
{
13
	new Float:oldhp = GetPlayerHealthEx(playerid);
14
15
	if(hp <= 0.0)
16
	{
17
	    SetPlayerHealth(playerid,0);
18
		hp = 0.0;
19
	}
20
21
	if(reason != 18 && reason != 37)
22
		hp = float(floatround(hp,floatround_floor));
23
24
	SetPVarFloat(playerid,"ScriptHealth",hp);
25
	//insert here any hud function you have to update player HP
26
	return 1;
27
}
28
29
forward SetPlayerArmourEx(playerid,Float:armour,reason = 0);
30
stock SetPlayerArmourEx(playerid,Float:armour,reason = 0)
31
{
32
    	if(armour < 0.0)
33
	    armour = 0.0;
34
35
    	if(reason != 18 && reason != 37)
36
    		armour = float(floatround(armour,floatround_floor));
37
38
	SetPlayerArmour(playerid,armour);
39
	SetPVarFloat(playerid,"ScriptArmour",armour);
40
	// insert here any hud function you have to update player's armor
41
	return 1;
42
}
43
44
forward Float:GetPlayerHealthEx(playerid);
45
stock Float:GetPlayerHealthEx(playerid)
46
{
47
	return GetPVarFloat(playerid, "ScriptHealth");
48
}
49
50
forward Float:GetPlayerArmourEx(playerid);
51
stock Float:GetPlayerArmourEx(playerid)
52
{
53
	return GetPVarFloat(playerid, "ScriptArmour");
54
}
55
56
57
// function example taken from my TF2 (removed specific mode parts) Gamemode
58
// This does not include armor calculations as armor is not in the GM but they are easily done
59
60
forward DamagePlayer(playerid, Float:amount, weaponid, Float:hp, Float:armour, issuerid);
61
public DamagePlayer(playerid, Float:amount, weaponid, Float:hp, Float:armour, issuerid)
62
{
63
    	//33% Less damage from explosions to Demos & Soldiers
64
	//25% resistance for rockets to Soldiers
65
	//66% Fall damage reduced for Scouts
66
	//100% Fire damage reduced for Pyros
67
	//100% damage resistance while round warmup
68
	//10% fire resistance to medic
69
70
    	//100% - amount
71
	//toremove%  - x
72
	//formula: (toremove * amount) / 100
73
74
	if(amount == 0.0)
75
	    return 1;
76
77
	if( (weaponid == 18 || weaponid == 37) && GetPlayerClassEx(playerid) == PYRO)
78
	    return 1; // This means fire damage wont affect you if you're a PYRO
79
	
80
	if(GetPVarInt(playerid,"OnSpawn") == 1 || GetPlayerTeamEx(playerid) == GetPlayerTeamEx(issuerid))
81
	    	return 1; //ignore all damage if on spawn or same team
82
    	if(MissionInfo[Mission_Warming] != 999)
83
        	return 1; //ignore all damage if mission hasn't started
84
        
85
	
86
	if(weaponid == 5 || weaponid == 8 || weaponid == 6 || weaponid == 2 || weaponid == 1)
87
	    	amount = amount+40.0; //Melees damage +40
88
	if(weaponid == 22) // Pistol
89
     		amount = amount-((50.0*amount)/100.0); //pistol damage reduced by 50%
90
	if(weaponid == 24) // Deagle
91
     		amount = amount-((50.0*amount)/100.0); //deagle damage reduced by 50%
92
	if(weaponid == 25) // Shotgun
93
     		amount = amount+((25.0*amount)/100.0); //shotgun damage increased 25%
94
	if(weaponid == 38 && GetPlayerClassEx(issuerid) != MEDIC) // Minigun
95
	    	amount = amount-((95.0*amount)/100.0); //minigun damage decreased 95%
96
	if(weaponid == 35 || weaponid == 51) //RPG/Explosion
97
	    	amount = amount+((20.0*amount)/100.0); //Explosions damage increased 20%
98
	if(weaponid == 26) //Sawnoff
99
     		amount = amount-((5.0*amount)/100.0); // Sawnoff damage decreased 5%
100
	if(weaponid == 34) //Sniper rifle
101
     		amount = amount+((110.0*amount)/100.0); //sniper damage increased 110%
102
	if(weaponid == 23) //Silenced
103
	    	amount = 35; // Silenced damage to 35hp
104
	if(weaponid == 37) //Flame
105
	    	amount =  amount+((5.0*amount)/100.0); // flame thrower initial damage +5%
106
    	if(weaponid == 18) //Mooltovs
107
	    	amount =  amount-((90.0*amount)/100.0); // molotov damage -90%
108
    	if(weaponid == 31) //M4
109
	    	amount =  amount+((25.0*amount)/100.0); //m4 damage +25%
110
    	if(weaponid == 42) //Fire ex
111
	    	amount =  amount-((40.0*amount)/100.0); //fire ex damage -40%
112
    	if(weaponid == 8 && GetPlayerClassEx(issuerid) == DEMOMAN) //Demoman
113
	    	amount =  amount*2; //Double damage for demoman & katana
114
115
    	if( (weaponid == 18 || weaponid == 37) && GetPlayerClassEx(playerid) == MEDIC)
116
	    	amount =  amount-((10.0*amount)/100.0); //10% Fire Resistance for medics
117
    	if( (weaponid == 51 || weaponid == 35 || weaponid == 16 || weaponid == 39))
118
        	if(GetPlayerClassEx(playerid) == SOLDIER || GetPlayerClassEx(playerid) == DEMOMAN)
119
		    amount =  amount-((66.0*amount)/100.0); //Blast Resistance for soldier & demoman
120
    	if( weaponid == 54 && GetPlayerClassEx(playerid) == SCOUT)
121
	    	amount =  amount-((66.0*amount)/100.0); //-66% fall damage for scouts
122
	    
123
124
	
125
	hp = hp-amount;
126
    	SetPlayerHealthEx(playerid, hp, weaponid, amount);
127
	return 1;
128
}
129
130
131
// another damageplayer example without reductions but armour calculations
132
133
//playerid, amount of damage, weaponid of damage, current player HP, current player armor
134
forward DamagePlayer(playerid, Float:amount, weaponid, Float:hp, Float:armour);
135
public DamagePlayer(playerid, Float:amount, weaponid, Float:hp, Float:armour)
136
{
137
    	if(weaponid == 41 || weaponid == 42) //spray
138
		amount = amount-((25.0*amount)/100.0);
139
140
	if(weaponid != 54 && weaponid != 53)
141
	{
142
		if(armour > 0.0)
143
		{
144
		    	new Float:tmp = armour;
145
			tmp = tmp-amount;
146
		    	if(tmp < 0.0)
147
		    	{
148
		        	amount = amount - armour;
149
		        	armour = 0.0;
150
			}
151
			else
152
			{
153
			    	armour = tmp;
154
			    	amount = 0;
155
			}
156
			if(armour > GetPlayerArmourEx(playerid))
157
				armour = 0.0;
158
				    
159
			SetPlayerArmourEx(playerid, armour,weaponid);
160
		}
161
		hp = (hp - amount);
162
		if(hp > GetPlayerHealthEx(playerid))
163
   			hp = 0.0;
164
   				
165
		SetPlayerHealthEx(playerid, hp, weaponid);
166
	}
167
	else
168
	{
169
		hp = (hp - amount);
170
		if(hp > GetPlayerHealthEx(playerid))
171
   			hp = 0.0;
172
	     	SetPlayerHealthEx(playerid, hp, weaponid);
173
	}
174
	return 1;
175
}
176
177
178
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
179
{
180
	if(weaponid == 34)
181
	    if(bodypart == 9) //sniper headshoot 2.5x damage
182
	        amount = amount*2.5;
183
		        
184
	DamagePlayer(playerid, amount, weaponid, GetPlayerHealthEx(playerid), GetPlayerArmourEx(playerid), issuerid);
185
186
	return 1;
187
}