PDA

Просмотр полной версии : [Вопрос] по поводу hp



Trender
22.11.2014, 22:24
У меня такая проблема. Когда я бью другого персонажа, то у него не отнимается хп. ( У него нету гм )
В чём может быть проблема?

Osetin
22.11.2014, 22:26
Подробнее опишите проблему, после чего появилась и что добавляли в мод - скидывайте. Просто так не может быть данной проблемы.

$continue$
22.11.2014, 22:46
OnPlayerGive/TakeDamage скидывайте, ну и на всякий OnPlayerWeaponShot

Trender
23.11.2014, 00:04
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
{
if(issuerid != INVALID_PLAYER_ID)
{
if(StartTazer[issuerid] == true && weaponid == 0)
{
if(GetPlayerTazer[playerid] == true || GetPlayerCuff[playerid] == true || GetPlayerTie[playerid] == true || IsLaw(playerid) || IsArmy(playerid)) return true;
SetPlayerSpecialAction(playerid,SPECIAL_ACTION_HANDSUP);
TogglePlayerControllableEx(playerid, 0);
GetPlayerTazer[playerid] = true;
SetTimerEx("UnTazer", 15000, false,"i",playerid);
//
GetPlayerName(playerid, sn, sizeof(sn));
GetPlayerName(issuerid, gp, sizeof(gp));
new mes[128];
format(mes, sizeof(mes),"Вы ударили %s электрошокером", sn);
SendClientMessage(issuerid, COLOR_BLUE,mes);
format(mes, sizeof(mes), "%s ударил %s электрошокером", gp, sn);
ProxDetector(10.0, playerid, mes,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
return true;
}
else if((weaponid == 0 || weaponid == 1) && StartTazer[issuerid] == false)
{
new Float: red = float(PlayerInfo[issuerid][pBrunt])/1000.0;
new Float: health;
GetPlayerHealth(playerid, health);
SetPlayerHealthAC(playerid, health - red);
return true;
}
else if(weaponid == 5)
{
new Float: health;
GetPlayerHealth(playerid, health);
SetPlayerHealthAC(playerid, health - 20.0);
return true;
}
}
return true;
}

Edwin
23.11.2014, 12:23
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
{
if(issuerid != INVALID_PLAYER_ID)
{
if(StartTazer[issuerid] == true && weaponid == 0)
{
if(GetPlayerTazer[playerid] == true || GetPlayerCuff[playerid] == true || GetPlayerTie[playerid] == true || IsLaw(playerid) || IsArmy(playerid)) return true;
SetPlayerSpecialAction(playerid,SPECIAL_ACTION_HANDSUP);
TogglePlayerControllableEx(playerid, 0);
GetPlayerTazer[playerid] = true;
SetTimerEx("UnTazer", 15000, false,"i",playerid);
//
GetPlayerName(playerid, sn, sizeof(sn));
GetPlayerName(issuerid, gp, sizeof(gp));
new mes[128];
format(mes, sizeof(mes),"Вы ударили %s электрошокером", sn);
SendClientMessage(issuerid, COLOR_BLUE,mes);
format(mes, sizeof(mes), "%s ударил %s электрошокером", gp, sn);
ProxDetector(10.0, playerid, mes,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
return true;
}
else if(weaponid == 5)
{
new Float: health;
GetPlayerHealth(playerid, health);
SetPlayerHealthAC(playerid, health - 20.0);
return true;
}
}
return true;
}

$continue$
23.11.2014, 12:30
А так не лучше будет?


public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
{
if(issuerid != INVALID_PLAYER_ID || StartTazer[issuerid] != true && weaponid != 0) return 1;
if(GetPlayerTazer[playerid] == true || GetPlayerCuff[playerid] == true || GetPlayerTie[playerid] == true || IsLaw(playerid) || IsArmy(playerid)) return true;
SetPlayerSpecialAction(playerid,SPECIAL_ACTION_HANDSUP);
TogglePlayerControllableEx(playerid, 0);
GetPlayerTazer[playerid] = true;
SetTimerEx("UnTazer", 15000, false,"i",playerid);
GetPlayerName(playerid, sn, sizeof(sn));
GetPlayerName(issuerid, gp, sizeof(gp));
new mes[128];
format(mes, sizeof(mes),"Вы ударили %s электрошокером", sn);
SendClientMessage(issuerid, COLOR_BLUE,mes);
format(mes, sizeof(mes), "%s ударил %s электрошокером", gp, sn);
ProxDetector(10.0, playerid, mes,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
if(weaponid == 5)
{
new Float: health;
GetPlayerHealth(playerid, health);
SetPlayerHealthAC(playerid, health - 20.0);
return true;
}
return true;
}

Trender
23.11.2014, 17:25
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
{
if(issuerid != INVALID_PLAYER_ID || StartTazer[issuerid] != true && weaponid != 0) return 1;
if(GetPlayerTazer[playerid] == true || GetPlayerCuff[playerid] == true || GetPlayerTie[playerid] == true || IsLaw(playerid) || IsArmy(playerid)) return true; // строка 2646
SetPlayerSpecialAction(playerid,SPECIAL_ACTION_HANDSUP);
TogglePlayerControllableEx(playerid, 0);
GetPlayerTazer[playerid] = true;
SetTimerEx("UnTazer", 15000, false,"i",playerid);
GetPlayerName(playerid, sn, sizeof(sn));
GetPlayerName(issuerid, gp, sizeof(gp));
new mes[128];
format(mes, sizeof(mes),"Вы ударили %s электрошокером", sn);
SendClientMessage(issuerid, COLOR_BLUE,mes);
format(mes, sizeof(mes), "%s ударил %s электрошокером", gp, sn);
ProxDetector(10.0, playerid, mes,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
if(weaponid == 5)
{
new Float: health;
GetPlayerHealth(playerid, health);
SetPlayerHealthAC(playerid, health - 20.0);
return true;
}
return true;
}

теперь вот что в логах пишет


[16:20:32] [debug] Run time error 4: "Array index out of bounds"
[16:20:32] [debug] Accessing element at index 65535 past array upper bound 99
[16:20:32] [debug] AMX backtrace:
[16:20:32] [debug] #0 00020d74 in public OnPlayerTakeDamage (playerid=0, issuerid=65535, Float:amount=3.30000, weaponid=54, bodypart=3) at C:\Documents and Settings\Admin\Рабочий стол\Advantage Rp\gamemodes\ARP.pwn:2646

DeimoS
23.11.2014, 17:59
Используй тот вариант, что дал Edwin. Сокращение в данном случае лишь сделает хуже