13.10.2011, 05:02
(
Last edited by OKStyle; 20/10/2011 at 07:38 AM.
Reason: по наводке Mutha_X
)
Как многие могли заметить, в 0.3b убрали бонусы, которые получал игрок, садясь в тачку (такси - деньги, ментовские тачки - дробовик, спецназовские тачки - броня). Кому-то они мешали из-за неверной работы античита, но другим - нравились. Поскольку я отношусь ко второй группе, то решил набросать небольшой код для исправления этого недоразумения. Тем более в 0.3d хотят убрать выдачу и парашюта.
Версия 1.1
* Исправлена логика работы скрипта;
* Профиксена выдача парашюта;
* Исправлен запрет повторных выдачей бонусов.
Версия 1.1
* Исправлена логика работы скрипта;
* Профиксена выдача парашюта;
* Исправлен запрет повторных выдачей бонусов.
pawn Code:
#include <a_samp>
// Vehicle Bonus Return 1.1 by O.K.Style™
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
{
if(IsPlayerNPC(playerid)) return 1;
new vehicleid = GetPlayerVehicleID(playerid);
if(GetPVarInt(playerid, "BonusVeh") == vehicleid) return 1;
new vehiclemodel = GetVehicleModel(vehicleid);
switch(vehiclemodel)
{
case 416:
{
new Float:hp;
GetPlayerHealth(playerid, hp);
if(hp + 20.0 > 100.0) SetPlayerHealth(playerid, 100.0);
else if(hp + 20.0 <= 100.0) SetPlayerHealth(playerid, 20.0 + hp);
}
case 420, 438: GivePlayerMoney(playerid, 12);
case 427, 601: SetPlayerArmour(playerid, 100.0);
case 457: GivePlayerWeapon(playerid, 2, 1);
case 596..599: GivePlayerWeapon(playerid, 25, 5);
default: return 1;
}
SetPVarInt(playerid, "BonusVeh", vehicleid); // чтобы нельзя было несколько раз подряд получать один и тот же бонус
}
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
if(IsPlayerNPC(playerid)) return 1;
new vehiclemodel = GetVehicleModel(vehicleid);
switch(vehiclemodel)
{
case 417, 425, 447, 460, 469, 476, 487, 488, 497, 511..513, 519, 520, 553, 548, 563, 577, 592, 593:
{
new Float:x, Float:y, Float:z;
GetVehiclePos(vehicleid, x, y, z);
#pragma unused x
#pragma unused y
if(z > 50.0)
{
new AnimLib[30], AnimName[30];
GetAnimationName(GetPlayerAnimationIndex(playerid), AnimLib, sizeof(AnimLib), AnimName, sizeof(AnimName));
if(strcmp(AnimLib, "PED", true) == 0 && (strcmp(AnimName, "FALL_FALL", true) == 0 || strcmp(AnimName, "JUMP_GLIDE", true) == 0 || strcmp(AnimName, "IDLE_STANCE", true) == 0))
{
GivePlayerWeapon(playerid, 46, 1);
}
}
else if(z < 50.0)
{
#pragma unused z
}
}
}
return 1;
}
public OnVehicleSpawn(vehicleid)
{
for(new i, j = GetMaxPlayers(); i != j; i++)
{
if(!IsPlayerConnected(i)) continue;
if(IsPlayerNPC(i)) continue;
if(GetPVarInt(i, "BonusVeh") != vehicleid) continue;
SetPVarInt(i, "BonusVeh", -1); // после каждого респауна тачки бонусы восстанавливаются и их снова можно взять
}
return 1;
}