SA-MP Forums Archive
..... - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: ..... (/showthread.php?tid=288661)



..... - Zonoya - 08.10.2011

simple i am having some errors in a stock function i change FireCat's House system to suit me with cars but it aint working right its producing errors here they are:
pawn Код:
C:\DOCUME~1\Rhys\Desktop\SA8BEC~1\FILTER~1\H_System.pwn(328) : error 010: invalid function or declaration
C:\DOCUME~1\Rhys\Desktop\SA8BEC~1\FILTER~1\H_System.pwn(330) : error 021: symbol already defined: "INI_Close"
C:\DOCUME~1\Rhys\Desktop\SA8BEC~1\FILTER~1\H_System.pwn(332) : error 010: invalid function or declaration
Pawn compiler 3.2.3664          Copyright (c) 1997-2006, ITB CompuPhase


3 Errors.
here is the code ill highlight my error lines in red if the indentation is wrong its the tags not the script
pawn Код:
stock LoadCars()
{
    new file[60],carowner[24];
    for(new i = 0; i < MAX_CARS; i++)
    {
        format(file,sizeof(file),"FHouse/HouseCars/%i.ini",i);
        if(INI_Exist(file)) break;
        INI_Open(file);
        CI[i][Price] = INI_ReadInt("Price");
        CI[i][Model] = INI_ReadInt("Model");
        CI[i][Owned] = INI_ReadInt("Owned");
        CI[i][Colour1] = INI_ReadInt("Col1");
        CI[i][Colour2] = INI_ReadInt("Col2");
        CI[i][XPos] = INI_ReadInt("XPos");
        CI[i][YPos] = INI_ReadInt("YPos");
        CI[i][ZPos] = INI_ReadInt("ZPos");
        CI[i][APos] = INI_ReadInt("APos");
        INI_ReadString(carowner,"Owner");//Reading the house owner.
        format(CI[i][Owner],24,"%s",carowner);
        Car[i] = CreateVehicle(CI[i][Model],x,y,z,a,CI[i][Colour1],CI[i][Colour2],100);
        new labelstring[100];
        switch(CI[i][Owned])
        {
            case 0;{format(labelstring,sizeof(labelstring),"Owned: No \nPrice: %i \nModel: %d",CarPrice, CarModel);}
            case 1;{format(labelstring,sizeof(labelstring),"Owned: Yes \nPrice: %i \nOwner: %s \nSlots: %i",HInfo[i][Price],pName, HInfo[i][Slots]);}
        }
        CI[i][CarLavel] = Create3DTextLabel(labelstring,0xFF0000FF,x,y,z,25.0,0);
        CarCount++;
        INI_Close();//Closing the SII file.
    }
        return 1;
}
Line 328 is
Код:
CI[i][CarLavel] = Create3DTextLabel(labelstring,0xFF0000FF,x,y,z,25.0,0);
Line 330 is
Код:
INI_Close();//Closing the SII file.
Line 332 is
Код:
return 1;
it seems to be acting up but im gonna post the rest of the code here it is:

pawn Код:
#include <a_samp>
#include <SII>
#include <streamer>
#include <zcmd>
#include <sscanf2>

#define MAX_HOUSES 100//Lets define that we can have the max limit of our houses to 100.
#define MAX_CARS 100

enum HouseInfo//Naming the enum
{
    Owner[24],//This will be where it will store the house owner name, in a 24 bit size array.
    Owned,//To store if the house is owned or not.
    Price,//How much the house will cost.
    Slots,
    Float:XPos,//Float X position of the checkpoint
    Float:YPos,//Self explanatory.
    Float:ZPos,//Self explanatory.
    VirtualWorld,//The checkpoints virtual world.
    Text3D:HouseLabel//That label where it says "Owned Price..."
}
new HInfo[MAX_HOUSES][HouseInfo];//This is the var where we will read the house info.

enum CarInfo
{
    Owner[24],
    Owned,
    Model,
    Price,
    Float:XPos,//Float X position of the checkpoint
    Float:YPos,//Self explanatory.
    Float:ZPos,//Self explanatory.
    Float:APos,//Self explanatory.
    Colour_1,
    Colour_2,
    Text3D:CarLabel
}
new CI[MAX_CARS][CarInfo];
   

new HouseCount;//To check how many houses have we created.
new CarCount;
new Car[MAX_CARS];
new HouseEnter[MAX_HOUSES];//This will be where we will store the house entrance checkpoint
new HouseExit[MAX_HOUSES];//This will be where we will store the house exit checkpoint.
new PlayerInHouseID[MAX_PLAYERS];//To check what house id is the player in.

IsAdmin(playerid, level)
{
    if(IsPlayerAdmin(playerid)) return 1;
    if(CallRemoteFunction("GetPlayerAVSAdmin", "d", playerid) >= level) return 1;
    return 0;
}

CMD:createcar(playerid,params[])
{
    if(!IsAdmin(playerid, 10)) return SendClientMessage(playerid,-1,"You aren't an admin!");//Check if the player is currently rcon logged in.
    new CarPrice, CarModel, COL1, COL2, id = CarCount;
    if(sscanf(params,"iddd",CarPrice, CarModel, COL1, COL2)) return SendClientMessage(playerid,-1,"USAGE: /createcar <Price> <Model> <COL1> <COL2>");
    new Float:x, Float:y, Float:z, Float:a;
    GetPlayerPos(playerid,x,y,z);
    GetPlayerFacingAngle(playerid,a);
    CI[id][Price] = CarPrice;
    CI[id][Model] = CarModel;
    CI[id][Colour_1] = COL1;
    CI[id][Colour_2] = COL2;
    CI[id][Owned] = 0;
    CI[id][XPos] = x;
    CI[id][YPos] = y;
    CI[id][YPos] = z;
    CI[id][APos] = a;
    format(CI[id][Owner],24,"Nonuseablenameforthiscar");
    Car[id] = CreateVehicle(CarModel, x, y, z, a, COL1, COL2, 100);
    new file[40],labelstring[100];
    format(file,sizeof(file),"FHouse/HouseCars/%i.ini",id);
    INI_Open(file);
    INI_WriteInt("Price",CarPrice);
    INI_WriteInt("Model",CarModel);
    INI_WriteInt("Col1",COL1);
    INI_WriteInt("Col2",COL2);
    INI_WriteInt("Owned",0);
    INI_WriteFloat("XPos",x);//Writing the players pos for the check point position.
    INI_WriteFloat("YPos",y);//Self explanatory.
    INI_WriteFloat("ZPos",z);//Self explanatory.
    INI_WriteFloat("APos",a);//Self explanatory.
    INI_WriteString("Owner","Nonusablenameforthiscar");//Writing a string in "Owned" to "Nonusablenameforthishouse"
    INI_Save();
    INI_Close();
    format(labelstring,sizeof(labelstring),"Owned: No \nPrice: %i \nModel: %d",CarPrice, CarModel);
    CI[id][CarLabel] = Create3DTextLabel(labelstring,0xFF0000FF,x,y,z,25.0,GetPlayerVirtualWorld(playerid));
    CarCount++;
    return 1;
}

CMD:createhouse(playerid,params[])
{
    if(!IsAdmin(playerid, 10)) return SendClientMessage(playerid,-1,"You aren't an admin!");//Check if the player is currently rcon logged in.
    new HousePrice, HouseSlots, id = HouseCount;//Creating the house price for the selected value in the command, and the last house id created.
    if(sscanf(params,"ii",HousePrice, HouseSlots)) return SendClientMessage(playerid,-1,"USAGE: /createhouse <price> <slots>");//Checking if the player uses the correct syntax. The parameter "i" in sscanf means integer, also could be used as "d".
    new Float:x,Float:y,Float:z;//Creating the floats, to store the player's position.
    GetPlayerPos(playerid,x,y,z);//Getting the player's position and storing it
    HInfo[id][Price] = HousePrice;//Setting the house price to the selected one.
    HInfo[id][Slots] = HouseSlots;
    HInfo[id][Owned] = 0;//Setting the house id owned = 0
    HInfo[id][XPos] = x;//Storing the XPos value to the player's x.
    HInfo[id][YPos] = y;//Storing the YPos value to the player's y.
    HInfo[id][ZPos] = z;//Storing the ZPos value to the player's z.
    HInfo[id][VirtualWorld] = GetPlayerVirtualWorld(playerid);
    format(HInfo[id][Owner],24,"Nonusablenameforthishouse");//Formating the "Owner" house id value to "Nonusablenameforthishouse".
    SendClientMessage(playerid,-1,"House created");
    HouseEnter[id]  = CreateDynamicCP(x,y,z,1.5,GetPlayerVirtualWorld(playerid));//Creating the checkpoint and storing it in the HouseEnter value.
    HouseExit[id] = CreateDynamicCP(443.9237,509.4609,1001.4195,1.5,GetPlayerVirtualWorld(playerid));//Creating the house exit checkpoint and storing it in the HouseExit value.
    new file[40],labelstring[100];//Creating the "file", and the labelstring var.
    format(file,sizeof(file),"FHouse/Houses/%i.ini",id);//Formating the var to the selected house directory.
    INI_Open(file);//Opening the file with SII.
    INI_WriteInt("Price",HousePrice);//Writing in the place "Price" the inputted "Price" value.
    INI_WriteInt("Slots",HouseSlots);
    INI_WriteInt("Owned",0);//Setting to "Owned" = 0 in the ini file.
    INI_WriteInt("VirtualWorld",GetPlayerVirtualWorld(playerid));//Writing "VirtualWorld" = GetPlayerVirtualWorld(..);
    INI_WriteFloat("XPos",x);//Writing the players pos for the check point position.
    INI_WriteFloat("YPos",y);//Self explanatory.
    INI_WriteFloat("ZPos",z);//Self explanatory.
    INI_WriteString("Owner","Nonusablenameforthishouse");//Writing a string in "Owned" to "Nonusablenameforthishouse"
    INI_Save();//Saving file with SII.
    INI_Close();//Closing the file with SII.
    format(labelstring,sizeof(labelstring),"Owned: No \nPrice: %i \nSlots: %i",HousePrice, HouseSlots);
    HInfo[id][HouseLabel] = Create3DTextLabel(labelstring,0xFF0000FF,x,y,z,25.0,GetPlayerVirtualWorld(playerid));
    HouseCount++;
    return 1;
}

CMD:buycar(playerid,params[])
{
    for(new i = 0; i < MAX_CARS; i++)
    {
        if(!IsPlayerInRangeOfPoint(playerid,8.0,CI[i][XPos],CI[i][YPos],CI[i][ZPos])) continue;
        if(GetPlayerMoney(playerid) < CI[i][Price]) return SendClientMessage(playerid,-1,"You don't have enough money");
        if(CI[i][Owned] == 1) return SendClientMessage(playerid,-1,"This car is already owned");
        CI[i][Owned] = 1;
        new file[60],pName[24],string[100];
        GetPlayerName(playerid,pName,sizeof(pName));
        format(CI[i][Owner],24,"%s",pName);
        format(file,sizeof(file),"FHouse/HouseCars/%i.ini",i);
        INI_Open(file);
        INI_WriteInt("Owned",1);
        INI_WriteString("Owner",pName);
        INI_Save();
        INI_Close();
        format(string,sizeof(string),"Owned: Yes \nPrice: %i \nOwner: %s \nModel: %d",CI[i][Price],pName, CI[i][Model]);//Formating the string, so we can update the label of the house
        Update3DTextLabelText(CI[i][CarLabel],0xFF0000FF,string);//Updating the label with a red color
        return 1;
    }
    SendClientMessage(playerid,-1,"You aren't near a car!");
    return 1;
}

CMD:buy(playerid,params[])
{
    for(new i = 0; i < MAX_HOUSES; i++)//Loop threw all houses.
    {
        if(!IsPlayerInRangeOfPoint(playerid,8.0,HInfo[i][XPos],HInfo[i][YPos],HInfo[i][ZPos])) continue;//Check if the player is near a house checkpoint
        if(GetPlayerMoney(playerid) < HInfo[i][Price]) return SendClientMessage(playerid,-1,"You don't have enough money");//Checking the players money, to see if he has enough to buy the house.
        if(HInfo[i][Owned] == 1) return SendClientMessage(playerid,-1,"This house is already owned");//Checking if the house is already owned.
        HInfo[i][Owned] = 1;//Setting the house owned var to 1.
        new file[60],pName[24],string[100];//Creating the necessary vars.
        GetPlayerName(playerid,pName,sizeof(pName));//Retrieving the player's name.
        format(HInfo[i][Owner],24,"%s",pName);//Setting the House Owner's var
        format(file,sizeof(file),"FHouse/Houses/%i.ini",i);//Formating the house file
        INI_Open(file);//Opening the house file
        INI_WriteInt("Owned",1);//Setting in the ini file "Owned" to 1
        INI_WriteString("Owner",pName);//Setting the "Owner" to the player's name.
        INI_Save();//Saving the ini
        INI_Close();//Closing the ini
        format(string,sizeof(string),"Owned: Yes \nPrice: %i \nOwner: %s \nSlots: %i",HInfo[i][Price],pName, HInfo[i][Slots]);//Formating the string, so we can update the label of the house
        Update3DTextLabelText(HInfo[i][HouseLabel],0xFF0000FF,string);//Updating the label with a red color
        return 1;
    }
    SendClientMessage(playerid,-1,"You aren't near a house!");
    return 1;
}

CMD:sellcar(playerid,params[])
{
    for(new i = 0; i < MAX_CARS; i++)
    {
        if(!IsPlayerInRangeOfPoint(playerid,8.0,HInfo[i][XPos],HInfo[i][YPos],HInfo[i][ZPos])) continue;//Check if the player is near a house checkpoint
        if(CI[i][Owned] == 0) return SendClientMessage(playerid,-1,"This car isn't owned type /buycar to buy it now");
        new pName[24];
        GetPlayerName(playerid,pName,sizeof(pName));
        if(CI[i][Owned] == 1 && strcmp(pName,CI[i][Owner]) != 0) return SendClientMessage(playerid,-1,"You aren't the owner of this car!");//Checking if the house is owned but the owners name is different
        CI[i][Owned] = 0;
        new file[60],string[100];
        format(CI[i][Owner],24,"Nonusablenameforthiscar");
        format(file,sizeof(file),"FHouse/HouseCars/%i.ini",i);
        INI_Open(file);
        INI_WriteInt("Owned",0);
        INI_WriteString("Owner","Nonusablenameforthiscar");
        INI_Save();
        INI_Close();
        format(string,sizeof(string),"Owned: No \nPrice: %i \nOwner: None \nModel: %d",CI[i][Price], CI[i][Model]);
        Update3DTextLabelText(CI[i][CarLabel],0xFF0000FF,string);//Updating the label with a red color
        return 1;
    }
    SendClientMessage(playerid,-1,"You aren't near a car!");
    return 1;
}

CMD:sell(playerid,params[])
{
    for(new i = 0; i < MAX_HOUSES; i++)//Loop threw all houses.
    {
        if(!IsPlayerInRangeOfPoint(playerid,8.0,HInfo[i][XPos],HInfo[i][YPos],HInfo[i][ZPos])) continue;//Check if the player is near a house checkpoint
        if(HInfo[i][Owned] == 0) return SendClientMessage(playerid,-1,"This house isn't owned");//Checking if the house is already owned.
        new pName[24];
        GetPlayerName(playerid,pName,sizeof(pName));//Retrieving the player's name.
        if(HInfo[i][Owned] == 1 && strcmp(pName,HInfo[i][Owner]) != 0) return SendClientMessage(playerid,-1,"You aren't the owner of this house!");//Checking if the house is owned but the owners name is different
        HInfo[i][Owned] = 0;//Setting the house owned var to 1.
        new file[60],string[100];//Creating the necessary vars.
        format(HInfo[i][Owner],24,"Nonusablenameforthishouse");//Setting the House Owner's var
        format(file,sizeof(file),"FHouse/Houses/%i.ini",i);//Formating the house file
        INI_Open(file);//Opening the house file
        INI_WriteInt("Owned",0);//Setting in the ini file "Owned" to 0
        INI_WriteString("Owner","Nonusablenameforthishouse");//Setting the "Owner" to the "Nonusablenameforthishouse".
        INI_Save();//Saving the ini
        INI_Close();//Closing the ini
        format(string,sizeof(string),"Owned: No \nPrice: %i \nOwner: None \nSlots: %i",HInfo[i][Price],pName, HInfo[i][Slots]);//Formating the string, so we can update the label of the house
        Update3DTextLabelText(HInfo[i][HouseLabel],0xFF0000FF,string);//Updating the label with a red color
        return 1;
    }
    SendClientMessage(playerid,-1,"You aren't near a house!");
    return 1;
}

public OnPlayerEnterDynamicCP(playerid,checkpointid)
{
    for(new i = 0; i < MAX_HOUSES;i++)//Looping threw all houses.
    {
        if(checkpointid == HouseEnter[i])//Checking if the checkpoint id corresponds to one of the house interiors
        {
            new pName[24];//Creating the new var for the players name
            GetPlayerName(playerid,pName,24);//Storing the players name
            if(HInfo[i][Owned] == 1 && strcmp(HInfo[i][Owner],pName) == 0)//String comparing between the players name and the house owners name, to check if they match.
            {
                SetPVarInt(playerid,"PlayersInteriorHouse",GetPlayerInterior(playerid));//Storing, so later we can reset it back
                SetPVarInt(playerid,"PlayerVirtualWorldHouse",GetPlayerVirtualWorld(playerid));//Storing, so later we can reset it back
                SetPlayerInterior(playerid,12);//Setting the players interior.
                SetPlayerPos(playerid,446.7281,507.0475,1001.4195);//Setting the players position.
                SetPlayerVirtualWorld(playerid,HInfo[i][VirtualWorld]);//Preventing players from different houses, finding each other.
                PlayerInHouseID[playerid] = i;
            }
            if(HInfo[i][Owned] == 1 && strcmp(HInfo[i][Owner],pName) != 0)//Checking if the house is owned but the house owner and the players name don't match.
            {
                SendClientMessage(playerid,-1,"You don't own this house");
            }
            if(HInfo[i][Owned] == 0)//Simply checking if the house isn't owned.
            {
                SendClientMessage(playerid,-1,"/buy to buy this lovely house");
            }
        }
        if(checkpointid == HouseExit[i])//Checking if the checkpointid is an House exit
        {
            SetPlayerPos(playerid,HInfo[i][XPos]+3,HInfo[i][YPos],HInfo[i][ZPos]);//Setting the players position to checkpoint position +3
            SetPlayerInterior(playerid, GetPVarInt(playerid,"PlayersInteriorHouse"));//Setting the players interior to the one we stored
            SetPlayerVirtualWorld(playerid, GetPVarInt(playerid,"PlayerVirtualWorldHouse"));//Setting the players virtual world to the one we stored.
        }
    }
    return 1;
}

stock LoadHouses()//Creating the stock function
{
    new file[60],houseowner[24];//creating the "file" var. And also creating the "houseowner" var so we can store it, when we are reading the house owner ini line.
    for(new i = 0; i < MAX_HOUSES; i++)//Looping threw every house
    {
        format(file,sizeof(file),"FHouse/Houses/%i.ini",i);//Opening the house file with the current selected number with "i".
        if(INI_Exist(file)) break;//Checking if the ini house file exist, if not to stop there.
        INI_Open(file);//Opening the house ini
        HInfo[i][Price] = INI_ReadInt("Price");//Reading the price.
        HInfo[i][Slots] = INI_ReadInt("Slots");
        HInfo[i][Owned] = INI_ReadInt("Owned");//Reading if it's owned.
        HInfo[i][XPos] = INI_ReadInt("XPos");//Reading the X float position.
        HInfo[i][YPos] = INI_ReadInt("YPos");//Reading the Y float position.
        HInfo[i][ZPos] = INI_ReadInt("ZPos");//Reading the Z float position.
        HInfo[i][VirtualWorld] = INI_ReadInt("VirtualWorld");//Reading the virtual world.
        INI_ReadString(houseowner,"Owner");//Reading the house owner.
        format(HInfo[i][Owner],24,"%s",houseowner);//Formating the "Owner" house id value to the red one.
        HouseEnter[i]  = CreateDynamicCP(x,y,z,1.5,HInfo[i][VirtualWorld]);//Creating the checkpoint and storing it in the HouseEnter value.
        HouseExit[i] = CreateDynamicCP(443.9237,509.4609,1001.4195,1.5,HInfo[i][VirtualWorld]);//Creating the house exit checkpoint and storing it in the HouseExit value.
        new labelstring[100];//Creating the labelstring var.
        switch(HInfo[i][Owned])//Using the "switch" method to check if the house is owned
        {
            case 0:{format(labelstring,sizeof(labelstring),"Owned: No \nPrice: %i \nSlots: %i",HInfo[i][Price], HInfo[i][Slots]);}//If it isnt...
            case 1:{format(labelstring,sizeof(labelstring),"Owned: Yes \nPrice: %i \nOwner: %s \nSlots: %i",HInfo[i][Price], HInfo[i][Owner], HInfo[i][Slots]);}//If it is...
        }
        HInfo[i][HouseLabel] = Create3DTextLabel(labelstring,0xFF0000FF,x,y,z,25.0,HInfo[i][VirtualWorld]);//Creating the label with the formatted string.
        HouseCount++;//+ counting the HouseCount var.
        INI_Close();//Closing the SII file.
    }
    return 1;
}

stock LoadCars()
{
    new file[60],carowner[24];
    for(new i = 0; i < MAX_CARS; i++)
    {
        format(file,sizeof(file),"FHouse/HouseCars/%i.ini",i);
        if(INI_Exist(file)) break;
        INI_Open(file);
        CI[i][Price] = INI_ReadInt("Price");
        CI[i][Model] = INI_ReadInt("Model");
        CI[i][Owned] = INI_ReadInt("Owned");
        CI[i][Colour1] = INI_ReadInt("Col1");
        CI[i][Colour2] = INI_ReadInt("Col2");
        CI[i][XPos] = INI_ReadInt("XPos");
        CI[i][YPos] = INI_ReadInt("YPos");
        CI[i][ZPos] = INI_ReadInt("ZPos");
        CI[i][APos] = INI_ReadInt("APos");
        INI_ReadString(carowner,"Owner");//Reading the house owner.
        format(CI[i][Owner],24,"%s",carowner);
        Car[i] = CreateVehicle(CI[i][Model],x,y,z,a,CI[i][Colour1],CI[i][Colour2],100);
        new labelstring[100];
        switch(CI[i][Owned])
        {
            case 0;{format(labelstring,sizeof(labelstring),"Owned: No \nPrice: %i \nModel: %d",CarPrice, CarModel);}
            case 1;{format(labelstring,sizeof(labelstring),"Owned: Yes \nPrice: %i \nOwner: %s \nSlots: %i",HInfo[i][Price],pName, HInfo[i][Slots]);}
        }
        CI[i][CarLavel] = Create3DTextLabel(labelstring,0xFF0000FF,x,y,z,25.0,0);
        CarCount++;
        INI_Close();//Closing the SII file.
    }
    return 1;
}
plz help me :S


Re: ..... - Ehab1911 - 08.10.2011

Remove INI_CLOSE from line 330 . That's what I can help with lol.

Sorry I meant, if there was any " new INI_CLOSE " remove it ^^


Re: ..... - Zonoya - 08.10.2011

it needs to close the INI file else the server will keep it open non stop


Re: ..... - .:Kaos:. - 08.10.2011

Try to use
Код:
INI_Close(file);



Re: ..... - Zonoya - 08.10.2011

same errors


Re: ..... - Zonoya - 08.10.2011

anyone^^


Re: ..... - zombieking - 08.10.2011

Код:
error 021: symbol already defined: "INI_Close"
Did you read that?


Re: ..... - Zonoya - 08.10.2011

yes i did but if i take that out it wont close the INI File :S


Re: ..... - zombieking - 08.10.2011

You can make a command that will close the ini file or a timer or something like that
Instead of INI_close or what is it you can use SetTimer(blah blah blah you know what you need to put here) and set the timer to 1 millisecond , its just like instant


Re: ..... - Zonoya - 08.10.2011

hmm ill see if it works