[Ajuda]BugProps
#1

Olб a todos desculpe-me encomoda-los mais meu sistema de propriedades estб bugando as vezes ex: o player compra a prop ai ele sai do servidor dps de um certo tempo outro player vai comprar a prop e da Unknow Command...

pawn Код:
/*===================================================================================================*\
||===================================================================================================||
||                ________    ________    ___    _    ______     ______     ________                 ||
||          \    |   _____|  |  ____  |  |   \  | |  |   _  \   |  _   \   |  ____  |    /           ||
||  ======== \   |  |_____   | |____| |  | |\ \ | |  |  | |  |  | |_|  /   | |____| |   / ========   ||
||            |  | _____  |  |  ____  |  | | \ \| |  |  | |  |  |  _  \    |  ____  |  |             ||
||  ======== /    ______| |  | |    | |  | |  \ \ |  |  |_|  |  | |  \ \   | |    | |   \ ========   ||
||          /    |________|  |_|    |_|  |_|   \__|  |______/   |_|   \_|  |_|    |_|    \           ||
||                                                                                                   ||
||                                                                                                   ||
||                                        Property-Filterscript                                      ||
||                                                                                                   ||
||===================================================================================================||
||                           Created on the 5st of June 2008 by =>Sandra<=                          ||
||                                    Do NOT remove any credits!!                                    ||
\*===================================================================================================*/


#include <a_samp>
#include <dini>

#define MAX_PROPERTIES 100
#define MAX_PROPERTIES_PER_PLAYER 4
#define UNBUYABLETIME 15  //If a propertie is bought, someone else have to wait this number of minutes before he/she can buy it.

#define ENABLE_LOGIN_SYSTEM 1
#define ENABLE_MAP_ICON_STREAMER 1

new PropertiesAmount;
new MP;
enum propinfo
{
    PropName[64],
    Float:PropX,
    Float:PropY,
    Float:PropZ,
    PropIsBought,
    PropUnbuyableTime,
    PropOwner[MAX_PLAYER_NAME],
    PropValue,
    PropEarning,
    PickupNr,
}
new PropInfo[MAX_PROPERTIES][propinfo];
new PlayerProps[MAX_PLAYERS];
new EarningsForPlayer[MAX_PLAYERS];
new Logged[MAX_PLAYERS];

public OnFilterScriptInit()
{
    LoadProperties();
    MP = GetMaxPlayers();
    for(new i; i<MP; i++)
    {
        if(IsPlayerConnected(i))
        {
            new pName[MAX_PLAYER_NAME];
            GetPlayerName(i, pName, MAX_PLAYER_NAME);
            for(new propid; propid < PropertiesAmount; propid++)
            {
                if(PropInfo[propid][PropIsBought] == 1)
                {
                    if(strcmp(PropInfo[propid][PropOwner], pName, true)==0)
                    {
                        EarningsForPlayer[i] += PropInfo[propid][PropEarning];
                        PlayerProps[i]++;
                    }
                }
            }
        }
    }
    SetTimer("UpdateUnbuyableTime", 60000, 1);
    #if ENABLE_MAP_ICON_STREAMER == 1
    SetTimer("MapIconStreamer", 500, 1);
    #endif
    SetTimer("PropertyPayout", 60000, 1);
    print("-------------------------------------------------");
    print("Property-System by =>Sandra<= Succesfully loaded!");
    print("-------------------------------------------------");
    return 1;
}

public OnFilterScriptExit()
{
    SaveProperties();
    print("Properties Saved!!");
    return 1;
}

public OnPlayerConnect(playerid)
{
    PlayerProps[playerid] = 0;
    Logged[playerid] = 0;
    EarningsForPlayer[playerid] = 0;
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
    for(new propid; propid < PropertiesAmount; propid++)
    {
        if(PropInfo[propid][PropIsBought] == 1)
        {
            if(strcmp(PropInfo[propid][PropOwner], pName, true)==0)
            {
                EarningsForPlayer[playerid] += PropInfo[propid][PropEarning];
                PlayerProps[playerid]++;
            }
        }
    }
    #if ENABLE_LOGIN_SYSTEM == 0
    if(PlayerProps[playerid] > 0)
    {
        new str[128];
        format(str, 128, "Vуs tem atualmente %d propriedades. Tipo /Minhasprops para mais informaзхes sobre elas.", PlayerProps[playerid]);
        SendClientMessage(playerid, 0x99FF66AA, str);
    }
    #endif
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    new cmd[256], idx;
    cmd = strtok(cmdtext, idx);
    //================================================================================================================================
    //================================================================================================================================
    //================================================================================================================================
    if(strcmp(cmd, "/ajudaprop", true)==0 || strcmp(cmd, "/prophelp", true)==0)
    {
        SendClientMessage(playerid, 0x6699FFAA, "|=========================================================|");
        SendClientMessage(playerid, 0x6699FFAA, "Relacionados com a Propriedade Intelectual comandos:");
        #if ENABLE_LOGIN_SYSTEM == 1
        #endif
        SendClientMessage(playerid, 0x66CCFFAA, "/comprar or /buyprop  ==>> Para comprar um imуvel.");
        SendClientMessage(playerid, 0x66CCFFAA, "/venderprop or /sellprop  ==>> Para a venda de um de suas propriedades.");
        SendClientMessage(playerid, 0x66CCFFAA, "/minhasprops or /myprops  ==>> Para ver a lista de todas as propriedades que vocк tem.");
        if(IsPlayerAdmin(playerid))
        {
            SendClientMessage(playerid, 0x66CCFFAA, "/venderpropss ==>> A vender todas as propriedades para todos os jogadores");
        }
        SendClientMessage(playerid, 0x6699FFAA, "|=========================================================|");
        return 1;
    }
    //================================================================================================================================
    //================================================================================================================================
    //================================================================================================================================
    if(strcmp(cmd, "/comprar", true)==0 || strcmp(cmd, "/buyprop", true)==0)
    {
        new str[128];
        #if ENABLE_LOGIN_SYSTEM == 1
        #endif
       
        new propid = IsPlayerNearProperty(playerid);

        if(propid == -1)
        {
            SendClientMessage(playerid, 0xFF0000AA, "Vocк nгo estб perto o suficiente para comprar uma propriedade.");
            return 1;
        }
        if(PlayerProps[playerid] == MAX_PROPERTIES_PER_PLAYER)
        {
            format(str, 128, "Vocк jб tem %d propriedades, vocк nгo pode comprar mais propriedades!", PlayerProps[playerid]);
            SendClientMessage(playerid, 0xFF0000AA, str);
            return 1;
        }
        if(PropInfo[propid][PropIsBought] == 1)
        {
            new ownerid = GetPlayerID(PropInfo[propid][PropOwner]);
            if(ownerid == playerid)
            {
                SendClientMessage(playerid, 0xFF0000AA, "Vocк jб esta propriedade!");
                return 1;
            }
            else
            {
                if(PropInfo[propid][PropUnbuyableTime] > 0)
                {
                    format(str, 128, "Esta propriedade jб й adquirida por %s. Vocк vai ter que esperar %d minutos antes que vocк pode comprar.", PropInfo[propid][PropOwner], PropInfo[propid][PropUnbuyableTime]);
                    SendClientMessage(playerid, 0xFF0000AA, str);
                    return 1;
                }
            }
        }
        if(GetPlayerMoney(playerid) < PropInfo[propid][PropValue])
        {
            format(str, 128, "Vocк nгo tem dinheiro suficiente! Vocк precisa de $%d,-", PropInfo[propid][PropValue]);
            SendClientMessage(playerid, 0xFF0000AA, str);
            return 1;
        }
        new pName[MAX_PLAYER_NAME];
        GetPlayerName(playerid, pName, sizeof(pName));
        if(PropInfo[propid][PropIsBought] && PropInfo[propid][PropUnbuyableTime] == 0)
        {
            new ownerid = GetPlayerID(PropInfo[propid][PropOwner]);
            format(str, 128, "%s comprou sua propriedade \"%s\". Vocк recebeu 50% de seu valor ($%d).", pName, PropInfo[propid][PropName], (PropInfo[propid][PropValue]/2));
            GivePlayerMoney(ownerid, (PropInfo[propid][PropValue]/2));
            SendClientMessage(ownerid, 0xFFFF00AA, str);
            PlayerProps[ownerid]--;
        }
        PropInfo[propid][PropOwner] = pName;
        PropInfo[propid][PropIsBought] = 1;
        PropInfo[propid][PropUnbuyableTime] = UNBUYABLETIME;
        EarningsForPlayer[playerid] += PropInfo[propid][PropEarning];
        GivePlayerMoney(playerid, (0-PropInfo[propid][PropValue]));
        format(str, 128, "Vocк tem comprado a propriedade \"%s\" por $%d", PropInfo[propid][PropName], PropInfo[propid][PropValue]);
        SendClientMessage(playerid, 0xFFFF00AA, str);
        format(str, 128, "%s Comprou a propriedade \"%s\".", pName, PropInfo[propid][PropName]);
        SendClientMessageToAllEx(playerid, 0xFFFF00AA, str);
        PlayerProps[playerid]++;
        return 1;
    }
    //================================================================================================================================
    //================================================================================================================================
    //================================================================================================================================
    if(strcmp(cmd, "/venderprop", true) == 0 || strcmp(cmd, "/sellprop", true) == 0)
    {
        new str[128];
        #if ENABLE_LOGIN_SYSTEM == 1
        #endif
        new propid = IsPlayerNearProperty(playerid);
        if(propid == -1)
        {
            SendClientMessage(playerid, 0xFF0000AA, "Vocк nгo estб perto o suficiente para vender uma propriedade");
            return 1;
        }
        if(PropInfo[propid][PropIsBought] == 1)
        {
            new ownerid = GetPlayerID(PropInfo[propid][PropOwner]);
            if(ownerid != playerid)
            {
                SendClientMessage(playerid, 0xFF0000AA, "Vocк nгo possui essa propriedade!");
                return 1;
            }
        }
        new pName[MAX_PLAYER_NAME];
        GetPlayerName(playerid, pName, sizeof(pName));
        format(PropInfo[propid][PropOwner], MAX_PLAYER_NAME, "Ninguem");
        PropInfo[propid][PropIsBought] = 0;
        PropInfo[propid][PropUnbuyableTime] = 0;
        GivePlayerMoney(playerid, (PropInfo[propid][PropValue]/2));
        format(str, 128, "Vocк vendeu sua propriedade \"%s\" por 50% de seu valor: $%d,-", PropInfo[propid][PropName], PropInfo[propid][PropValue]/2);
        SendClientMessage(playerid, 0xFFFF00AA, str);
        format(str, 128, "%s vendeu a propriedade \"%s\".", pName, PropInfo[propid][PropName]);
        SendClientMessageToAllEx(playerid, 0xFFFF00AA, str);
        PlayerProps[playerid]--;
        EarningsForPlayer[playerid] -= PropInfo[propid][PropEarning];
        return 1;
    }
    //================================================================================================================================
    //================================================================================================================================
    //================================================================================================================================
    if(strcmp(cmd, "/minhasprops", true) == 0 || strcmp(cmd, "/myprops", true) == 0)
    {
        new str[128], ownerid;
        #if ENABLE_LOGIN_SYSTEM == 1
        #endif
        if(PlayerProps[playerid] == 0)
        {
            SendClientMessage(playerid, 0xFF0000AA, "Vocк nгo possui uma propriedade!");
            return 1;
        }
        format(str, 128, "|============ Suas %d Propriedades: =============|", PlayerProps[playerid]);
        SendClientMessage(playerid, 0x99FF66AA, str);
        for(new propid; propid < PropertiesAmount; propid++)
        {
            if(PropInfo[propid][PropIsBought] == 1)
            {
                ownerid = GetPlayerID(PropInfo[propid][PropOwner]);
                if(ownerid == playerid)
                {
                    format(str, 128, ">> \"%s\"   Valor: $%d,-   Lucro: $%d,-", PropInfo[propid][PropName], PropInfo[propid][PropValue], PropInfo[propid][PropEarning]);
                    SendClientMessage(playerid, 0x99FF66AA, str);
                }
            }
        }
        SendClientMessage(playerid, 0x99FF66AA, "|============================================|");
        return 1;
    }
    if(strcmp(cmd, "/Venderpropss", true)==0)
    {
        if(IsPlayerAdmin(playerid))
        {
            for(new propid; propid<PropertiesAmount; propid++)
            {
                format(PropInfo[propid][PropOwner], MAX_PLAYER_NAME, "Nobody");
                PropInfo[propid][PropIsBought] = 0;
                PropInfo[propid][PropUnbuyableTime] = 0;
            }
            for(new i; i<MAX_PLAYERS; i++)
            {
                if(IsPlayerConnected(i))
                {
                    PlayerProps[i] = 0;
                }
            }
            new str[128], pName[24];
            GetPlayerName(playerid, pName, 24);
            format(str, 128, "Admin %s Resetou todas as propriedades!", pName);
            SendClientMessageToAll(0xFFCC66AA, str);
        }
        return 1;
    }
    //================================================================================================================================
    //================================================================================================================================
    //================================================================================================================================
    return 0;
}


public OnPlayerPickUpPickup(playerid, pickupid)
{
    new propid = -1;
    for(new id; id<MAX_PROPERTIES; id++)
    {
        if(PropInfo[id][PickupNr] == pickupid)
        {
            propid = id;
            break;
        }
    }
    if(propid != -1)
    {
        new str[128];
        format(str, 128, "~y~\"%s\"~n~~r~Valor: ~y~$%d~n~~r~Lucro: ~y~$%d~n~~r~Dono: ~y~%s", PropInfo[propid][PropName], PropInfo[propid][PropValue], PropInfo[propid][PropEarning], PropInfo[propid][PropOwner]);
        GameTextForPlayer(playerid, str, 6000, 3);
    }
    return 1;
}

stock LoadProperties()
{
    if(fexist("PropertySystem/PropertyInfo.txt"))
    {
        CountProperties();
        new Argument[9][70];
        new entry[256], BoughtProps;
        new File: propfile = fopen("PropertySystem/PropertyInfo.txt", io_read);
        if (propfile)
        {
            for(new id; id<PropertiesAmount; id++)
            {
                fread(propfile, entry);
                split(entry, Argument, ',');
                format(PropInfo[id][PropName], 64, "%s", Argument[0]);
                PropInfo[id][PropX] = floatstr(Argument[1]);
                PropInfo[id][PropY] = floatstr(Argument[2]);
                PropInfo[id][PropZ] = floatstr(Argument[3]);
                PropInfo[id][PropValue] = strval(Argument[4]);
                PropInfo[id][PropEarning] = strval(Argument[5]);
                format(PropInfo[id][PropOwner], MAX_PLAYER_NAME, "%s", Argument[6]);
                PropInfo[id][PropIsBought] = strval(Argument[7]);
                PropInfo[id][PropUnbuyableTime] = strval(Argument[8]);
                PropInfo[id][PickupNr] = CreatePickup(1273, 1, PropInfo[id][PropX], PropInfo[id][PropY], PropInfo[id][PropZ]);
                if(PropInfo[id][PropIsBought] == 1)
                {
                    BoughtProps++;
                }
            }
            fclose(propfile);
            printf("===================================");
            printf("||    Created %d Properties     ||", PropertiesAmount);
            printf("||%d of the properties are bought||", BoughtProps);
            printf("===================================");
        }
    }
}

stock SaveProperties()
{
    new entry[256];
    new File: propfile = fopen("PropertySystem/PropertyInfo.txt", io_write);
    for(new id; id<PropertiesAmount; id++)
    {
        format(entry, 128, "%s,%.2f,%.2f,%.2f,%d,%d,%s,%d,%d \r\n",PropInfo[id][PropName], PropInfo[id][PropX], PropInfo[id][PropY], PropInfo[id][PropZ], PropInfo[id][PropValue], PropInfo[id][PropEarning], PropInfo[id][PropOwner], PropInfo[id][PropIsBought], PropInfo[id][PropUnbuyableTime]);
        fwrite(propfile, entry);
    }
    printf("Saved %d Properties!", PropertiesAmount);
    fclose(propfile);
}

forward split(const strsrc[], strdest[][], delimiter);
public split(const strsrc[], strdest[][], delimiter)
{
    new i, li;
    new aNum;
    new len;
    while(i <= strlen(strsrc)){
        if(strsrc[i]==delimiter || i==strlen(strsrc)){
            len = strmid(strdest[aNum], strsrc, li, i, 128);
            strdest[aNum][len] = 0;
            li = i+1;
            aNum++;
        }
        i++;
    }
    return 1;
}

stock CountProperties()
{
    new entry[256];
    new File: propfile = fopen("PropertySystem/PropertyInfo.txt", io_read);
    while(fread(propfile, entry, 256))
    {
        PropertiesAmount++;
    }
    fclose(propfile);
}

forward IsPlayerNearProperty(playerid);
public IsPlayerNearProperty(playerid)
{
    new Float:Distance;
    for(new prop; prop<PropertiesAmount; prop++)
    {
        Distance = GetDistanceToProperty(playerid, prop);
        if(Distance < 1.0)
        {
            return prop;
        }
    }
    return -1;
}

forward Float:GetDistanceToProperty(playerid, Property);
public Float:GetDistanceToProperty(playerid, Property)
{
    new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
    GetPlayerPos(playerid,x1,y1,z1);
    x2 = PropInfo[Property][PropX];
    y2 = PropInfo[Property][PropY];
    z2 = PropInfo[Property][PropZ];
    return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
}

stock GetPlayerID(const Name[])
{
    for(new i; i<MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            new pName[MAX_PLAYER_NAME];
            GetPlayerName(i, pName, sizeof(pName));
            if(strcmp(Name, pName, true)==0)
            {
                return i;
            }
        }
    }
    return -1;
}

stock SendClientMessageToAllEx(exeption, color, const message[])
{
    for(new i; i<MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            if(i != exeption)
            {
                SendClientMessage(i, color, message);
            }
        }
    }
}

forward UpdateUnbuyableTime();
public UpdateUnbuyableTime()
{
    for(new propid; propid<PropertiesAmount; propid++)
    {
        if(PropInfo[propid][PropIsBought] == 1)
        {
            if(PropInfo[propid][PropUnbuyableTime] > 0)
            {
                PropInfo[propid][PropUnbuyableTime]--;
            }
        }
    }
}

stock encodepass(buf[]) {
    new length=strlen(buf);
    new s1 = 1;
    new s2 = 0;
    new n;
    for (n=0; n<length; n++)
    {
       s1 = (s1 + buf[n]) % 65521;
       s2 = (s2 + s1)     % 65521;
    }
    return (s2 << 16) + s1;
}

forward MapIconStreamer();
public MapIconStreamer()
{
    for(new i; i<MP; i++)
    {
        if(IsPlayerConnected(i))
        {
            new Float:SmallestDistance = 99999.9;
            new CP, Float:OldDistance;
            for(new propid; propid<PropertiesAmount; propid++)
            {
                OldDistance = GetDistanceToProperty(i, propid);
                if(OldDistance < SmallestDistance)
                {
                    SmallestDistance = OldDistance;
                    CP = propid;
                }
            }
            RemovePlayerMapIcon(i, 31);
            if(PropInfo[CP][PropIsBought] == 1)
            {
                SetPlayerMapIcon(i, 31, PropInfo[CP][PropX], PropInfo[CP][PropY], PropInfo[CP][PropZ], 32, 0);
            }
            else
            {
                SetPlayerMapIcon(i, 31, PropInfo[CP][PropX], PropInfo[CP][PropY], PropInfo[CP][PropZ], 31, 0);
            }
        }
    }
}

forward PropertyPayout();
public PropertyPayout()
{
    new str[64];
    for(new i; i<MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i))
        {
            if(PlayerProps[i] > 0)
            {
                GivePlayerMoney(i, EarningsForPlayer[i]);
                format(str, 64, "Vocк ganhou $%d,- De suas propriedades!", EarningsForPlayer[i]);
                SendClientMessage(i, 0xFFFF00AA, str);
            }
        }
    }
}

strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}
esse sistema й da Sandra apenas traduzi...
Reply
#2

Este sistema da Sandra й muito antigo, ele foi criado na versгo 0.2x do sa-mp,
entгo aconselho vocк usar uns mais novos.

Segue uma lista dos melhores sistemas de casas.

Sistemas prontos:
https://sampforum.blast.hk/showthread.php?tid=23051
https://sampforum.blast.hk/showthread.php?tid=282816
https://sampforum.blast.hk/showthread.php?tid=207811
https://sampforum.blast.hk/showthread.php?tid=296811

Com MySQL:
https://sampforum.blast.hk/showthread.php?tid=255810

Tutorial:
https://sampforum.blast.hk/showthread.php?tid=287541


Existem muitos outros sistemas e esses fins,
mais tenho que sair..

Espero ter ajudado.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)