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: Ezredes.$ - 2012. december 28. - 17:01:30

Cím: Spawn Zóna
Írta: Ezredes.$ - 2012. december 28. - 17:01:30
Hello.
Létrehoztam egy \"spawn zónát\" hogy azon belül ne lehessen megölni másokat, aki pedig ököllel próbálkozik azt pedig megöli. Ez mûködik is viszont azt nem akarja érzékelni hogy én elhagytam a zónát, és már több mindent is próbáltam de sehogy sem akar sikerülni. Valaki megnézné nekem hogy mi a baj?
Itt a kód:
 

#include <a_samp>
#include <dcallbacks>
#if MAX_PLAYERS != 30
#undef MAX_PLAYERS
#define MAX_PLAYERS 30
#endif
new spawnhely;
new bool:inSpawnZone[MAX_PLAYERS];
public OnFilterScriptInit()
{
    spawnhely = GangZoneCreate(2161.597900, 1078.483398, 2075.333740, 988.435058);
    return 1;
}
public OnPlayerConnect(playerid)
{
    inSpawnZone[playerid] = false;
    return 1;
}
public OnPlayerSpawn(playerid)
{
    inSpawnZone[playerid] = true;
    return 1;
}
public OnPlayerUpdate(playerid)
{
if(inSpawnZone[playerid] == true)
        SetPlayerArmedWeapon(playerid,0);
return 1;
}
public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid)
{
if(inSpawnZone[playerid] == true)
{
        if(weaponid == 0 && (0 <= issuerid <= 30))
        {
            SetPlayerHealth(issuerid,0);
            SendClientMessage(issuerid,0xFF0000FF,\"Meghaltál mert olyan helyen sebeztél másokat ahol tilos\");
        }
}
return 1;
}
OnPlayerEnterArea(playerid,areaid)
{
if(areaid == spawnhely)inSpawnZone[playerid] = true;
return 1;
}
OnPlayerLeaveArea(playerid,areaid)
{
if(areaid == spawnhely)inSpawnZone[playerid] = false;
return 1;
}

 
Kösz elõre :D
Cím: Spawn Zóna
Írta: Drive - 2012. december 28. - 17:07:46
OnPlayerLeaveArea(playerid,areaid)
{
        if(areaid == spawnhely)inSpawnLeave[playerid] = false;
        return 1;

 
Szerintem, 100% nem jó de próbálkozok mivel tanuló scripter vagyok :(
Cím: Spawn Zóna
Írta: Ezredes.$ - 2012. december 28. - 17:12:18
Idézetet írta: Drive date=1356710866\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"31582\" data-ipsquote-contentclass=\"forums_Topic

OnPlayerLeaveArea(playerid,areaid)
{
        if(areaid == spawnhely)inSpawnLeave[playerid] = false;
        return 1;

 
Szerintem, 100% nem jó de próbálkozok mivel tanuló scripter vagyok :(
 
:crazy:
Sajnos nem 100%, hanem 10000% mivel le kell zárni mindent, mást meg nem csináltál rajta..
Cím: Spawn Zóna
Írta: Live - 2012. december 28. - 18:28:46
public OnPlayerUpdate(playerid)
{
if(inSpawnZone[playerid] == true)
{
SetPlayerArmedWeapon(playerid,0);
}
return 1;
}

 
??

Dupla hozzászólás automatikusan összefûzve. ( 2012. december 28. - 18:30:34 )

OnPlayerEnterArea(playerid,areaid)
{
if(areaid == spawnhely)
{
inSpawnZone[playerid] = true;
}
return 1;
}
OnPlayerLeaveArea(playerid,areaid)
{
if(areaid == spawnhely)
{
inSpawnZone[playerid] = false;
}
return 1;
}
Cím: Spawn Zóna
Írta: Ezredes.$ - 2012. december 28. - 18:32:24
Ezek ugyanazt jelentik.. ;)
Cím: Spawn Zóna
Írta: Live - 2012. december 28. - 18:33:45
hát nem...
mert a tiedbe nem volt kapcsos zárójel...

Dupla hozzászólás automatikusan összefûzve. ( 2012. december 28. - 18:39:00 )

Ha nem raksz zárójelet nem tud mit kezdeni vele ...
Velem is volt már így.
Cím: Spawn Zóna
Írta: staubka - 2012. december 28. - 18:49:03
Idézetet írta: Live date=1356716025\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"31582\" data-ipsquote-contentclass=\"forums_Topic
hát nem...
mert a tiedbe nem volt kapcsos zárójel...

Dupla hozzászólás automatikusan összefûzve. ( 2012. december 28. - 18:39:00 )

Ha nem raksz zárójelet nem tud mit kezdeni vele ...
Velem is volt már így.
 
Figyelj nem szeretnélek megbántani, de a kapcsos zárójel csak akkor szükséges ha több dolgot akarsz 1 eljáráshoz fûzni, és akkor sem feltétlenül szükséges.
Tehát..
Ez:
 
if(asd == 1) Kick(playerid);

 
és ez:
 
if(asd == 1) 
{
Kick(playerid);
}

 
UGYANAZ.
Akkor..
Ez:
 
if(asd == 1)SendClientMessage(playerid, -1, \"Kickelve lettél\"), Kick(playerid);

 
és ez:
 
if(asd == 1) 
{
SendClientMessage(playerid, -1,\"Kickelve lettél\");
Kick(playerid);
}

 
úgyszint UGYANAZ.
Mellesleg a fent leírt kódban semmi hiba nincs, az a probléma hogy az
 
OnPlayerEnterArea(playerid,areaid) { }
OnPlayerLeaveArea(playerid,areaid) { }

 
valamiért le sem fut, az OnPlayerUpdate és az OnPlayerTakeDamage tehát tökéletesen mûködik.
Mivel a fentiek nem futnak le, így nem változik az inSpawnZone[playerid] logikai értéke.
Cím: Spawn Zóna
Írta: Live - 2012. december 28. - 18:57:56
stock OnPlayerEnterArea(playerid, areaid)
{
if(areaid == spawnhely)inSpawnZone[playerid] = true;
return 1;
}

 

stock OnPlayerLeaveArea(playerid, areaid)
{
if(areaid == spawnhely)inSpawnZone[playerid] = false;
return 1;
}

 

public OnPlayerSpawn(playerid)
{
OnPlayerEnterArea(playerid);
return 1;
}

 
és így?
Cím: Spawn Zóna
Írta: Ezredes.$ - 2012. december 28. - 19:28:58
Idézetet írta: Live date=1356717476\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"31582\" data-ipsquote-contentclass=\"forums_Topic

stock OnPlayerEnterArea(playerid, areaid)
{
if(areaid == spawnhely)inSpawnZone[playerid] = true;
return 1;
}

 

stock OnPlayerLeaveArea(playerid, areaid)
{
if(areaid == spawnhely)inSpawnZone[playerid] = false;
return 1;
}

 

public OnPlayerSpawn(playerid)
{
OnPlayerEnterArea(playerid);
return 1;
}

 
és így?
 
Most mondta el..  :laugh:
Cím: Spawn Zóna
Írta: staubka - 2012. december 28. - 19:30:27
Az OnPlayerEnterArea meg az OnPlayerLeaveArea a dcallbacks.inc által van mûködtetve..
Ez itt a dcallbacks tartalma:
 
/*
*            DCallbacks 1.1
*       (c) Copyright 2006 by DracoBlue
*
* @author    : DracoBlue (http://dracoblue.com)
* @date      : 26th July 2006
* @update    : 25th November 2007
*
* This file is provided as is (no warranties).
*
* Feel free to use it, a little message in
* about box is honouring thing, isn\'t it?
*
*/
#if defined _dcallbacks_included
  #endinput
#endif
#define _dcallbacks_included
#pragma library dcallbacks
// Update the following line to make more areachecks possible.
#define MAX_AREAS_TO_CHECK 100
forward TIMER_DCallbacks();
new Float:AREACHECK_Coords[MAX_AREAS_TO_CHECK][4];
new AREACHECK_Player[MAX_PLAYERS];
new AREACHECK_Count=0;
/*
*  Return the AreaId, starts with 1 not 0.
*/
stock AddAreaCheck(Float:x_min,Float:x_max,Float:y_min,Float:y_max) {
AREACHECK_Coords[AREACHECK_Count][0]=x_min;
AREACHECK_Coords[AREACHECK_Count][1]=x_max;
AREACHECK_Coords[AREACHECK_Count][2]=y_min;
AREACHECK_Coords[AREACHECK_Count][3]=y_max;
AREACHECK_Count++;
return AREACHECK_Count;
}
public TIMER_DCallbacks() {
new i,z;
new Float:x,Float:y,Float:zcoord;
for (i=0;i<MAX_PLAYERS;i++) {
if (IsPlayerConnected(i)) {
   GetPlayerPos(i,x,y,zcoord);
   for (z=0;z<AREACHECK_Count;z++) {
      if ( (AREACHECK_Coords[z][0]<x)&&(AREACHECK_Coords[z][1]>x) &&
         (AREACHECK_Coords[z][2]<y)&&(AREACHECK_Coords[z][3]>y) ) {
         if (z!=AREACHECK_Player-1) {
            // Is new in this area
            AREACHECK_Player=z+1;
            OnPlayerEnterArea(i,z+1);
         }
      } else {
         if (z==AREACHECK_Player-1) {
            // Player was in this Area
            OnPlayerLeaveArea(i,z+1);
            AREACHECK_Player=0;
         }
      }
   }
}   
}
}
Cím: Spawn Zóna
Írta: Ezredes.$ - 2012. december 29. - 11:46:17
Valaki? :confused:
Cím: Spawn Zóna
Írta: Live - 2012. december 29. - 13:03:16
Nem lehet,hogy elavult az include?
Vagy egyáltalán lehet ilyet csinálni?
Cím: Spawn Zóna
Írta: Ezredes.$ - 2012. december 29. - 13:07:19
Idézetet írta: Live date=1356782596\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"31582\" data-ipsquote-contentclass=\"forums_Topic
Nem lehet,hogy elavult az include?
 
Nem..
 

Vagy egyáltalán lehet ilyet csinálni?
 
[/quote]
Lehet igen..
Csak nem futnak le ezek:
 
OnPlayerEnterArea(playerid,areaid) { }
OnPlayerLeaveArea(playerid,areaid) { }