Szerző Téma: Spawn -> no dm  (Megtekintve 907 alkalommal)

Nem elérhető ObiWan

  • 596
    • Profil megtekintése
Spawn -> no dm
« Dátum: 2014. október 27. - 23:20:28 »
0 Show voters
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 :)
« Utoljára szerkesztve: 2014. október 28. - 09:42:43 írta divkn »

Spawn -> no dm
« Válasz #1 Dátum: 2014. október 28. - 09:53:53 »
0 Show voters
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

Nem elérhető huhboy

  • 894
  • huhboy
    • Profil megtekintése
Spawn -> no dm
« Válasz #2 Dátum: 2014. október 28. - 10:49:04 »
0 Show voters
ennél sokkal egyszerűbb....
 

public OnPlayerUpdate(playerid)
{
     if(IsPlayerInRangeOfPoint(playerid, 300.0, -306.2171,1540.6781,75.5625))
     {
          SetPlayerArmedWeapon(playerid, 0);
     }
     return 1;
}

Spawn -> no dm
« Válasz #3 Dátum: 2014. október 28. - 11:02:36 »
0 Show voters

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  ;)

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Spawn -> no dm
« Válasz #4 Dátum: 2014. október 28. - 11:33:34 »
0 Show voters
É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;
}

Nem elérhető huhboy

  • 894
  • huhboy
    • Profil megtekintése
Spawn -> no dm
« Válasz #5 Dátum: 2014. október 28. - 11:34:54 »
0 Show voters
kivéve, ha a sebzettnek nem 100 volt az élete. :)

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Spawn -> no dm
« Válasz #6 Dátum: 2014. október 28. - 11:45:59 »
0 Show voters
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.

Nem elérhető huhboy

  • 894
  • huhboy
    • Profil megtekintése
Spawn -> no dm
« Válasz #7 Dátum: 2014. október 28. - 12:03:33 »
0 Show voters
é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

Spawn -> no dm
« Válasz #8 Dátum: 2014. október 28. - 12:42:47 »
0 Show voters
É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);

Nem elérhető ObiWan

  • 596
    • Profil megtekintése
Spawn -> no dm
« Válasz #9 Dátum: 2014. október 28. - 13:38:18 »
0 Show voters
Köszönöm mindenkinek a segítséget :D

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal