-
Sziasztok!
Azt szeretném megcsinálni, hogy a kezdőhelyen (-306.2171,1540.6781,75.5625) és a 300 méteres körzetében ne lehessen lőni
a fegyverekkel, és ha lőni akar a player akkor kiír neki egy üzenetet onplayertext-be hogy a spawn zónában tilos lövöldözni...
Egyetlen bökkenő hogy ezt nemtudom megcsinálni, pedig biztos nem nehéz..
Nagyon megköszönöm a segítséget :)
Üdv, ObiWan :)
-
Pawno nem adott rá hibát, de NEM teszteltem IG
#include <a_samp>
new Float:Spawn[1][4] =
{
{300.0,-306.2171,1540.6781,75.5625}//adatok
};
stock bool:IsPlayerInSpawnZone(playerid)
{
if(IsPlayerInRangeOfPoint(playerid, Spawn[0][0], Spawn[0][1], Spawn[0][2], Spawn[0][3])) return true;//Ha spawnon van akkor igaz lesz
else return false;// ha nem akkor hamis
}
forward NoDM();
public OnGameModeInit()
{
// ................
SetTimerEx(\"NoDM\", 1000, true, \"i\");// beállítjuk a timert
return 1;
}
public OnPlayerConnect(playerid)
{
SendClientMessage(playerid, -1, \"A Spawn 300 méteres körzetében TILOS a lövöldözés!\");
return 1;
}
public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)// Ha sikerül kijátszani a timert(mint nekem S** modban :D)
{
if(IsPlayerInSpawnZone(playerid) == true)// ha spawn zónában van
{
SendClientMessage(playerid, -1, \"Spawnon nem lövöldözünk!\");
SetPlayerArmedWeapon(playerid, 0);
// ide rakhatsz AJ-t, Warn, vagy amit akarsz
return 0;//ilyenkor NEM sebez a golyó :)
}
return 1;//
}
public NoDM()
{
for(new i; i < MAX_PLAYERS; i++)// mindenkit megnézünk
{
if(IsPlayerInSpawnZone(i) == true)// Ha Spawnon van az illető
{
if(GetPlayerWeapon(i) != 0)// és a \"fegyvere\" nem a keze
{
SetPlayerArmedWeapon(i, 0);// akkor átállítjuk a kezére (na ez értelmes mondat volt :D)
}
}
}
}
Nemis olyan nehéz ez :D
-
ennél sokkal egyszerűbb....
public OnPlayerUpdate(playerid)
{
if(IsPlayerInRangeOfPoint(playerid, 300.0, -306.2171,1540.6781,75.5625))
{
SetPlayerArmedWeapon(playerid, 0);
}
return 1;
}
-
ennél sokkal egyszerűbb....
public OnPlayerUpdate(playerid)
{
if(IsPlayerInRangeOfPoint(playerid, 300.0, -306.2171,1540.6781,75.5625))
{
SetPlayerArmedWeapon(playerid, 0);
}
return 1;
}
és ha lőni akar a player akkor kiír neki egy üzenetet[/quote]
[/quote]
De amit én írtam az teljes ;)
-
Ésszerűbb és takarékosabb megoldás:
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart) {
if(IsPlayerInRangeOfPoint(playerid, 300.0, -306.2171,1540.6781,75.5625)) {
SetPlayerHealth(damagedid, 100.0);
SendClientMessage(playerid, -1, \"Spawnzónában tilos lövöldözni!\");
}
return 1;
}
-
kivéve, ha a sebzettnek nem 100 volt az élete. :)
-
kivéve, ha a sebzettnek nem 100 volt az élete. :)
Mert az jobb megoldás hogy másodpercenként vagy 27x átpörgeti ökölre fegyverről ha az adott zónában van? :D
A te megoldásod se rossz de akkor ezt szerintem elég 2 másodpercenként lefuttatni.
Az én megoldásom meg annyiban jó, hogy csak akkor hívódik le, ha a játékos egy másik játékost sebez.
-
én mióta szervert futtatok, mindig is így volt. hiszen az onplayerupdate alatt nem okoz laggot, és nagyon minimális az esélye, hogy sebez..egy 2 másodperces timerrel viszont meg is tud ölni, pl sawn off-fal. De majd eldönti a témanyitó, neki melyik szimpatikusabb. :D
-
Én szerintem a legjobb megoldás még mindig a streameres. Nem nagyon szeretek ilyen \"komolyabb\" függvényeket leellenőriztetni OnPlayerGiveDamage és társai alatt. Mert az ember elég sokszor lő, főleg egy stunt szerón. Ráadásul neked nem kell semmiféle timert létrehozni, minden számítás a pluginban történik.
CreateDynamicRectangle()
forward OnPlayerEnterDynamicArea(playerid, areaid);
forward OnPlayerLeaveDynamicArea(playerid, areaid);
-
Köszönöm mindenkinek a segítséget :D