GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: ObiWan - 2014. október 27. - 23:20:28

Cím: Spawn -> no dm
Írta: ObiWan - 2014. október 27. - 23:20:28
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 :)
Cím: Spawn -> no dm
Írta: norbinator09 - 2014. október 28. - 09:53:53
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
Cím: Spawn -> no dm
Írta: huhboy - 2014. október 28. - 10:49:04
ennél sokkal egyszerűbb....
 

public OnPlayerUpdate(playerid)
{
     if(IsPlayerInRangeOfPoint(playerid, 300.0, -306.2171,1540.6781,75.5625))
     {
          SetPlayerArmedWeapon(playerid, 0);
     }
     return 1;
}
Cím: Spawn -> no dm
Írta: norbinator09 - 2014. október 28. - 11:02:36

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  ;)
Cím: Spawn -> no dm
Írta: Flash - 2014. október 28. - 11:33:34
É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;
}
Cím: Spawn -> no dm
Írta: huhboy - 2014. október 28. - 11:34:54
kivéve, ha a sebzettnek nem 100 volt az élete. :)
Cím: Spawn -> no dm
Írta: Flash - 2014. október 28. - 11:45:59
Idézetet írta: JustaCube date=1414492494\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"51199\" data-ipsquote-contentclass=\"forums_Topic
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.
Cím: Spawn -> no dm
Írta: huhboy - 2014. október 28. - 12:03:33
é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
Cím: Spawn -> no dm
Írta: kadaradam - 2014. október 28. - 12:42:47
É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);
Cím: Spawn -> no dm
Írta: ObiWan - 2014. október 28. - 13:38:18
Köszönöm mindenkinek a segítséget :D