native GetPlayerWeaponState(playerid);
native GetPlayerCameraPos(playerid, &Float:x, &Float:y, &Float:z);
native GetPlayerCameraFrontVector(playerid, &Float:x, &Float:y, &Float:z);
native GetPlayerCameraUpVector(playerid, &Float:x, &Float:y, &Float:z);
// Per-player variable system (PVars)
native SetPVarInt(playerid, varname[], int_value);
native GetPVarInt(playerid, varname[]);
native SetPVarString(playerid, varname[], string_value[]);
native GetPVarString(playerid, varname[], string_return[], len);
native SetPVarFloat(playerid, varname[], Float:float_value);
native Float:GetPVarFloat(playerid, varname[]);
native DeletePVar(playerid, varname[]);
// PVar enumeration
#define PLAYER_VARTYPE_NONE 0
#define PLAYER_VARTYPE_INT 1
#define PLAYER_VARTYPE_STRING 2
#define PLAYER_VARTYPE_FLOAT 3
native GetPVarsUpperIndex(playerid);
native GetPVarNameAtIndex(playerid, index, ret_varname[], ret_len);
native GetPVarType(playerid, varname[]);
native LimitPlayerMarkerRadius(Float:marker_radius);
forward OnVehicleDamageStatusUpdate(vehicleid, playerid);
native GetVehicleDamageStatus(vehicleid, &panels, &doors, &lights, &tires);
native UpdateVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
//------------------------------------------- // Sends a list of all PVars to the player as // client messages. SendPVarListToPlayer(playerid) { new ubound = GetPVarsUpperIndex(playerid); new x=0; new name[40+1]; new line[128+1]; SendClientMessage(playerid,0xF000F0F0, "---Player Vars List---"); while(x != ubound) { if(GetPVarNameAtIndex(playerid,x,name,40)) { if(Util_GetPVarEntryAsString(playerid,name,line,128)) { SendClientMessage(playerid,0xFFFFFFFF,line); } } x++; } } //------------------------------------------- // return PVar entry as 'name'='value' string stock Util_GetPVarEntryAsString(playerid, name[], ret[], len) { new Float:fValue; new iValue; new szStrValue[1024+1]; // this might require greater size if you store large strings in PVars new type; ret[0] = EOS; type = GetPVarType(playerid, name); if(type != PLAYER_VARTYPE_NONE) { switch(type) { case PLAYER_VARTYPE_STRING: { GetPVarString(playerid,name,szStrValue,1024); format(ret,len,"%s=%s",name,szStrValue); } case PLAYER_VARTYPE_INT: { iValue = GetPVarInt(playerid,name); format(ret,len,"%s=%d",name,iValue); } case PLAYER_VARTYPE_FLOAT: { fValue = GetPVarFloat(playerid,name); format(ret,len,"%s=%f",name,fValue); } } return 1; } return 0; } //------------------------------------------- // Fills the provided string with all the player's PVars // seperated by the specified 'delimiter' stock Util_CreatePVarList(playerid, retstr[], len, delimiter[]) { if(!IsPlayerConnected(playerid)) return 0; new x=0; new remaining_string=len; new line[2048+1]; new name[40+1]; retstr[0] = EOS; new ubound = GetPVarsUpperIndex(playerid); while(x != ubound) { if(GetPVarNameAtIndex(playerid,x,name,40)) { if(Util_GetPVarEntryAsString(playerid,name,line,2048)) { // if there is enough space, concat this line to the return string if(remaining_string > (strlen(line) + strlen(delimiter))) { strcat(retstr,line); strcat(retstr,delimiter); remaining_string -= (strlen(line) + strlen(delimiter)); } } } x++; } return 1; } //-------------------------------------------
Originally Posted by Kye
pawn Code:
|
const object_undamaged = 0;
const door_swinging = 1;
const door_damaged = 2;
const door_damaged_swinging = 3;
const door_fell_off = 4;
const windshield_crackedA = 1;
const windshield_crackedB = 2;
const windshielddestroyed = 3;
encode_lights(light1, light2, light3, light4) {
return light1 | (light2 << 1) | (light3 << 2) | (light4 << 3);
}
encode_tires(tire1, tire2, tire3, tire4) {
return tire1 | (tire2 << 1) | (tire3 << 2) | (tire4 << 3);
}
encode_tires_bike(rear, front) {
return rear | (front << 1);
}
#pragma unused encode_tires_bike
encode_doors(bonnet, boot, driver_door, passenger_door, behind_driver_door, behind_passenger_door) {
#pragma unused behind_driver_door
#pragma unused behind_passenger_door
// will be modified once again, when rear doors are synced.
return bonnet | (boot << 8) | (driver_door << 16) | (passenger_door << 24);
}
encode_panels(flp, frp, rlp, rrp, windshield, front_bumper, rear_bumper) {
return flp | (frp << 4) | (rlp << 8) | (rrp << 12) | (windshield << 16) | (front_bumper << 20) | (rear_bumper << 24);
}
breakcar(PlayerID) {
if (IsPlayerInAnyVehicle(PlayerID)) {
new panels, doors, lights, tires;
GetVehicleDamageStatus(GetPlayerVehicleID(PlayerID), panels, doors, lights, tires);
panels = encode_panels(1, 1, 1, 1, 3, 3, 3); // damage windshield & make bumpers swing
doors = encode_doors(4, 4, 4, 4, 0, 0); // make them all fall off
lights = encode_lights(1, 1, 1, 1); // damage all lights
tires = encode_tires(1, 1, 1, 1); // damage all tires
UpdateVehicleDamageStatus(GetPlayerVehicleID(PlayerID), panels, doors, lights, tires);
}
return true;
}
OnVehicleDamageStatusUpdate(vehicleid, playerid) {
#pragma unused playerid
new panels, doors, lights, tires;
GetVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
new driver_door, passenger_door/*, behind_driver_door, behind_passenger_door*/ = 0;
/*
door & boot & bonnet status:
0: undamaged
1: swinging
2: damaged
3: damaged & swinging
4: fell off
*/
driver_door = doors >> 16 & 0x7;
passenger_door = doors >> 24 & 0x7;
// other 2 doors are not yet synced.
new bonnet, boot = 0;
bonnet = doors & 0x7;
boot = doors >> 8 & 0x7; // boot will not swing unless on specific car (like a bobcat)
new flp, frp, rlp, rrp, windshield, front_bumper, rear_bumper;
/*
panels are unused on cars, they are used on planes tho.
*/
flp = panels >> 0 & 0xF;
frp = panels >> 4 & 0xF;
rlp = panels >> 8 & 0xF;
rrp = panels >> 12 & 0xF;
/*
windshield:
0 undagamed
1,2 cracked
3: destroyed
*/
windshield = panels >> 16 & 0xF;
/*
bonnet & boot:
0 undamaged
1 open swinging (hood only)
2 damaged
3 damaged swinging
4 fallen off
*/
front_bumper = panels >> 20 & 0xF;
rear_bumper = panels >> 24 & 0xF;
// for tires & lights: 1 damaged, 0 = ordinary
new tyre1, tyre2, tyre3, tyre4;
tyre1 = tires >> 0 & 0x1; // rear right (bike rear)
tyre2 = tires >> 1 & 0x1; // front right (bike front)
tyre3 = tires >> 2 & 0x1; // rear left
tyre4 = tires >> 3 & 0x1; // front left
new light1, light2, light3, light4;
light1 = lights >> 0 & 0x1; // front left
light2 = lights >> 1 & 0x1; // cant get to break rear light
light3 = lights >> 2 & 0x1; // front right
light4 = lights >> 3 & 0x1; // cant get to break rear light
// bike lights never break!
new string[128];
format(string,sizeof(string),"Doors: Driver: %d, Passenger: %d", driver_door, passenger_door);
SendClientMessageToAll(COLOR_RED, string);
format(string,sizeof(string),"Swinging: bonnet: %d, boot: %d", bonnet, boot);
SendClientMessageToAll(COLOR_RED, string);
format(string,sizeof(string),"panels: flp: %d, frp: %d, rlp: %d, rrp: %d, windshield: %d, front bumper: %d, rear bumper: %d", flp, frp, rlp, rrp, windshield, front_bumper, rear_bumper);
SendClientMessageToAll(COLOR_RED, string);
format(string,sizeof(string),"tires: %d %d %d %d", tyre1, tyre2, tyre3, tyre4);
SendClientMessageToAll(COLOR_RED, string);
format(string,sizeof(string),"lights: %d %d %d %d", light1, light2, light3, light4);
SendClientMessageToAll(COLOR_RED, string);
return 1;
}
Originally Posted by Mr187
Thanks for the release, Kye, I hope this stops some of the ddos attacks ive had alot lately.
|
Originally Posted by Tannz0rz
I smell headshots and other limb-specific weapon damage!
|
Originally Posted by Woet
Quote:
Software firewall will also help as long as the amount of traffic doesn't overflow the uplink. Further more, this isn't a specific SA-MP problem, DDoS is unrelated to the software running. |