View difference between Paste ID: r7zmjUj1 and PhHA6jur
SHOW: | | - or go back to the newest paste.
1
/*
2
3
							Bambi Ally!
4
							By Alternative112
5
							
6
							Do NOT recirculate without first asking me!
7
*/
8
9
#include <a_samp>
10
11
#define Holding(%0) \
12
        ((newkeys & (%0)) == (%0))
13
14
new bambi;
15
new bambiOwner = -1;
16
new respawnTimer;
17
new bool:canBambiAttack = true; //He only charges once every 5 seconds
18
new bool:attacking = false; //If bambi is charging, don't make him follow the player
19
new bool:canAttackPeople = true; //Can Bambi charge at players when the person who has him shoots them?
20
new mapIcon = 69; //It must be unique, no other icons in your scripts must use it!
21
22
//Where Bambi spawns - change it to wherever you like.
23
//By default he spawns under the bridge that connects Red County and LV.
24
new Float:spawnX = 1777.2007;
25
new Float:spawnY = 595.1467;
26
new Float:spawnZ = 10.5952;
27
28
main() {
29
        print("||=-------------------------------=||");
30
        print("||=            BAMBI TIME!!!!      ||");
31
        print("||=-------------------------------=||");
32
}
33
34
forward rechargeBambi();
35
public rechargeBambi() {
36
	attacking = false;
37
	canBambiAttack = true;
38
	return 1;
39
}
40
41
forward respawnBambi();
42
public respawnBambi() {
43
	DestroyObject(bambi);
44
	bambi = CreateObject(19315, spawnX, spawnY, spawnZ, 0.0, 0.0, 0.0);
45
	return 1;
46
}
47
48
stock detachBambi() {
49
	new Float:x, Float:y, Float:z;
50
	GetObjectPos(bambi, x, y, z);
51
	DestroyObject(bambi);
52
	bambi = CreateObject(19315, x, y, z, 0.0, 0.0, 0.0);
53
	return 1;
54
}
55
56
public OnFilterScriptInit() {
57
	bambi = CreateObject(19315, spawnX, spawnY, spawnZ, 0.0, 0.0, 0.0);
58
	return 1;
59
}
60
61
public OnFilterScriptExit() {
62
	DestroyObject(bambi);
63
64
	for (new i = 0; i < GetMaxPlayers(); i++) {
65
	    if (IsPlayerConnected(i)) {
66
			RemovePlayerMapIcon(i, mapIcon);
67
	    }
68
	}
69
	
70
	return 1;
71
}
72
73
public OnPlayerSpawn(playerid) {
74
    SetPlayerMapIcon(playerid, mapIcon, spawnX, spawnY, spawnZ, 21, 0, MAPICON_LOCAL);
75
    if (playerid == bambiOwner) {
76
        respawnTimer = SetTimer("respawnBambi", 30000, false);
77
		bambiOwner = -1;
78
		detachBambi();
79
    }
80
	return 1;
81
}
82
83-
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid) {
83+
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid) {
84
	if (canAttackPeople) {
85-
		if (playerid == bambiOwner && canBambiAttack && GetPlayerTeam(playerid) != GetPlayerTeam(damagedid)) {
85+
		if (issuerid == bambiOwner && canBambiAttack && GetPlayerTeam(issuerid) != GetPlayerTeam(playerid)) {
86
			attacking = true;
87
			new Float:x, Float:y, Float:z, Float:bX, Float:bY, Float:bZ;
88
89-
			GetPlayerPos(damagedid, x, y, z);
89+
			GetPlayerPos(playerid, x, y, z);
90
			GetObjectPos(bambi, bX, bY, bZ);
91
92
			MoveObject(bambi, (x + (x - bX)), (y + (y - bY)), z, 30.0);
93
94-
			if (GetPlayerState(damagedid) == PLAYER_STATE_ONFOOT) {
94+
			if (GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) {
95-
			    ApplyAnimation(damagedid, "PED", "KO_SKID_FRONT", 4.1, 0, 1, 1, 0, 3000, 1);
95+
			    ApplyAnimation(playerid, "PED", "KO_SKID_FRONT", 4.1, 0, 1, 1, 0, 3000, 1);
96
			}
97
98
			canBambiAttack = false;
99
			SetTimer("rechargeBambi", 5000, false);
100
		}
101
	}
102
	return 1;
103
}
104
105
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
106
    if (Holding(KEY_CROUCH)) {
107
        new Float:x, Float:y, Float:z;
108
        GetObjectPos(bambi, x, y, z);
109
        
110
        if (IsPlayerInRangeOfPoint(playerid, 5.0, x, y, z) && IsValidObject(bambi)) {
111
            if (bambiOwner == -1) {
112
                SendClientMessage(playerid, 0xFFFF00FF, "You have recruited Bambi. Press the submission key to set him free!");
113
                bambiOwner = playerid;
114
                KillTimer(respawnTimer);
115
            }
116
        }
117
    }
118
    
119
    if (Holding(KEY_SUBMISSION)) {
120
        if (playerid == bambiOwner) {
121
			respawnTimer = SetTimer("respawnBambi", 30000, false);
122
			bambiOwner = -1;
123
			
124
			if (IsPlayerInAnyVehicle(playerid)) {
125
			    new Float:x, Float:y, Float:z;
126
			    GetPlayerPos(playerid, x, y, z);
127
				SetObjectPos(bambi, (x - 5.0), (y - 5.0), (z - 1.0));
128
			}
129
			else {
130
			    detachBambi();
131
			}
132
			
133
			SendClientMessage(playerid, 0xFFFF00FF, "You have released Bambi into the wild.");
134
        }
135
    }
136
	return 1;
137
}
138
139
public OnPlayerStateChange(playerid, newstate, oldstate) {
140-
    if (oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT) {
140+
    if ((oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER) && newstate == PLAYER_STATE_ONFOOT) {
141
        if (playerid == bambiOwner) {
142
        	new Float:x, Float:y, Float:z;
143
        	GetPlayerPos(playerid, x, y, z);
144
        	
145
            DestroyObject(bambi);
146
			bambi = CreateObject(19315, (x - 2.0), (y - 2.0), z, 0.0, 0.0, 0.0);
147
        }
148
    }
149-
    else if (oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER) {
149+
    else if (oldstate == PLAYER_STATE_ONFOOT && (newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)) {
150
        if (playerid == bambiOwner) {
151
            new Float:X, Float:Y, Float:Z;
152
			GetVehicleModelInfo(GetVehicleModel(playerid), VEHICLE_MODEL_INFO_SIZE, X, Y, Z);
153
		    AttachObjectToVehicle(bambi, GetPlayerVehicleID(playerid), 0.0, 0.0, (Z * 0.80), 0.0, 0.0, 90.0);
154
        }
155
    }
156
    return 1;
157
}
158
159
public OnPlayerConnect(playerid) {
160
    return 1;
161
}
162
163
public OnPlayerDisconnect(playerid, reason) {
164
	detachBambi();
165
	respawnTimer = SetTimer("respawnBambi", 30000, false);
166
	return 1;
167
}
168
169
public OnPlayerDeath(playerid, killerid, reason) {
170
    if (playerid == bambiOwner) {
171
        detachBambi();
172
        respawnTimer = SetTimer("respawnBambi", 30000, false);
173
    }
174
    return 1;
175
}
176
177
public OnPlayerUpdate(playerid) {
178
	if (playerid == bambiOwner) {
179
	    if (!IsPlayerInAnyVehicle(playerid)) {
180
	        new Float:x, Float:y, Float:z, Float:bX, Float:bY, Float:bZ;
181
	        GetPlayerPos(playerid, x, y, z);
182
	        GetObjectPos(bambi, bX, bY, bZ);
183
	        
184
	        //If the player somehow teleported, teleport bambi, too!
185
	        
186
	        /*if (floatsub(bX, x) < 20.0 || floatadd(bX, x) > 20.0) {
187
	            DestroyObject(bambi);
188
				bambi = CreateObject(19315, (x - 2.0), (y - 2.0), (z - 0.5), 0.0, 0.0, 0.0, GetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid));
189
				return 1;
190
	        }
191
	        
192
	        if (floatsub(bY, y) < 20.0 || floatadd(bY, y) > 20.0) {
193
	            DestroyObject(bambi);
194
				bambi = CreateObject(19315, (x - 2.0), (y - 2.0), (z - 0.5), 0.0, 0.0, 0.0, GetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid));
195
				return 1;
196
	        }
197
	        
198
	        if (floatsub(bZ, z) < 20.0 || floatadd(bZ, z) > 20.0) {
199
	            DestroyObject(bambi);
200
				bambi = CreateObject(19315, (x - 2.0), (y - 2.0), (z - 0.5), 0.0, 0.0, 0.0, GetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid));
201
				return 1;
202
	        }*/
203
	        
204
	        if (!attacking) {
205
				MoveObject(bambi, (x - 2.0), (y - 2.0), (z - 0.5), 8.0);
206
			}
207
		}
208
	}
209
	return 1;
210
}