SA-MP Forums

Go Back   SA-MP Forums > SA-MP Scripting and Plugins > Scripting Help

Reply
 
Thread Tools Display Modes
Old 09/06/2017, 03:04 PM   #1
Lajko1
High-roller
 
Join Date: Oct 2008
Posts: 1,235
Reputation: 17
Default Just Practicing (Objects / edit objects)

Hello, I'm just practicing scripting a bit in my free time so this time I encountered "Error" that's causing the function not to do what's supposed to do. (sending the message of the current object that's placed)

EDIT:
Here is the code I'm using to create a table (it's just an object..) - just in case you want to see.
Code:
CreatePokerTable(playerid,tableid)
{
	new Float:x, Float:y, Float:z;
	GetPlayerPos(playerid, x, y, z);
	
	Table[tableid][X] = Float:x;
	Table[tableid][Y] = Float:y;
	Table[tableid][Z] = Float:z;
	CreateDynamicObject(19474, x, y, z, 0.0, 0.0, 0.0, GetPlayerVirtualWorld(playerid), GetPlayerInterior(playerid), -1, 200.0);
 	//CreateObject(19474, x, y, z, 0.0, 0.0, 96.0);
 	SendClientMessage(playerid, -1, "You have sucessfuly created a table please use /edittable to place it at desired location!");
	return 1;
}
Code:
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
// stuff above
if(response == EDIT_RESPONSE_FINAL)
	{
	    new Float:x, Float:y, Float:z;
		GetObjectPos(objectid, x, y, z);
		Table[tableid][X] = Float:x;
		Table[tableid][Y] = Float:y;
		Table[tableid][Z] = Float:z;
		
		new Float:RotX,Float:RotY,Float:RotZ;
		GetObjectRot(objectid, RotX, RotY, RotZ);
		Table[tableid][RX] = Float:RotX;
		Table[tableid][RY] = Float:RotY;
		Table[tableid][RZ] = Float:RotZ;
		format(testmsg,sizeof(testmsg),"Table is set at X: %f | Y: %f | Z: %f | RX: %f | RY: %f | RZ: %f",x,y,z,RotX,RotY,RotZ);
		SendClientMessage(playerid,-1, testmsg);	
	}
       // stuff below
Message I get in .exe is the following:

Code:
[16:47:14] [debug] Run time error 20: "Invalid index parameter (bad entry point)"
[16:47:14] Script[gamemodes/Table.amx]: Run time error 20: "Invalid index parameter (bad entry point)"
[16:47:14] Number of vehicle models: 0
[16:47:14] New version of CrashDetect is available for download (4.13)
[16:47:17] [connection] 127.0.0.1:52630 requests connection cookie.
[16:47:18] [connection] incoming connection: 127.0.0.1:52630 id: 0
[16:47:19] [join] Smithson has joined the server (0:127.0.0.1)
[16:47:33] Player 0 selected object 1
[16:47:34] [debug] Run time error 4: "Array index out of bounds"
[16:47:34] [debug]  Accessing element at index 108 past array upper bound 9
[16:47:34] [debug] AMX backtrace:
[16:47:34] [debug] #0 0001a284 in public Streamer_OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x43072df4, 0xc291eeb4, 0x3fb70000, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:34] [debug] #1 00019b24 in public OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x43072df4, 0xc291eeb4, 0x3fb70000, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:35] [debug] Run time error 4: "Array index out of bounds"
[16:47:35] [debug]  Accessing element at index 108 past array upper bound 9
[16:47:35] [debug] AMX backtrace:
[16:47:35] [debug] #0 0001a284 in public Streamer_OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x43072df4, 0xc291eeb4, 0x3f1ea3d8, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:35] [debug] #1 00019b24 in public OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x43072df4, 0xc291eeb4, 0x3f1ea3d8, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:35] [debug] Run time error 4: "Array index out of bounds"
[16:47:35] [debug]  Accessing element at index 108 past array upper bound 9
[16:47:35] [debug] AMX backtrace:
[16:47:35] [debug] #0 0001a284 in public Streamer_OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x43072df4, 0xc291eeb4, 0x3f82851f, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:35] [debug] #1 00019b24 in public OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x43072df4, 0xc291eeb4, 0x3f82851f, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:35] [debug] Run time error 4: "Array index out of bounds"
[16:47:35] [debug]  Accessing element at index 108 past array upper bound 9
[16:47:35] [debug] AMX backtrace:
[16:47:35] [debug] #0 0001a284 in public Streamer_OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x43072df4, 0xc291eeb4, 0x3f598520, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:35] [debug] #1 00019b24 in public OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x43072df4, 0xc291eeb4, 0x3f598520, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:36] [debug] Run time error 4: "Array index out of bounds"
[16:47:36] [debug]  Accessing element at index 108 past array upper bound 9
[16:47:36] [debug] AMX backtrace:
[16:47:36] [debug] #0 0001a284 in public Streamer_OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x43072df4, 0xc291eeb4, 0x3f5c147c, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:36] [debug] #1 00019b24 in public OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000001, 0x43072df4, 0xc291eeb4, 0x3f5c147c, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
And the function doesn't display message when I clicked "save" button thanks for help in advance
Lajko1 is offline   Reply With Quote
Old 09/06/2017, 04:21 PM   #2
Vince
Spam Machine
 
Vince's Avatar
 
Join Date: Sep 2007
Location: Belgium
Posts: 10,067
Reputation: 2660
Default Re: Just Practicing (Objects / edit objects)

Where and how does "tableid" get assigned? I also want to point out the redundancy of the temporary coord variables. Just fetch the coordinates into the array directly.
__________________
Vince is offline   Reply With Quote
Old 09/06/2017, 05:04 PM   #3
Lajko1
High-roller
 
Join Date: Oct 2008
Posts: 1,235
Reputation: 17
Default Re: Just Practicing (Objects / edit objects)

Hey, your answer is appriciated, here is the thing you asked for.

Code:
#define MAX_TABLES	10
Code:
enum TableInfo
{
	TableID, // this is how I'm trying to assign tableid which will be used futher on in saving.
	ObjectID,
	Text3D:Tableid,
	Float:X,
	Float:Y,
	Float:Z,
	Float:RX,
	Float:RY,
	Float:RZ,
code I'm using to avoid "undefined tableid" error:
Code:
new tableid = Table[tableid][TableID];
And didn't really understand last part you're trying to shove in my head is there a way to make it a little bit more simple? :P or to show example.

Thanks in advance
Lajko1 is offline   Reply With Quote
Old 09/06/2017, 09:09 PM   #4
Pottus
High-roller
 
Pottus's Avatar
 
Join Date: Jun 2012
Posts: 4,885
Reputation: 1337
Default Re: Just Practicing (Objects / edit objects)

This is such a basic problem really that with a bit of practice can be solved very easily every time. The biggest problem you have is the table creation function looks like a pretty shitty way to do it to me and that will cause issues with your whole system in the long run.

I always do it the same way every time when creating any kind of system like this for example. http://forum.sa-mp.com/showpost.php?...5&postcount=10
Pottus is offline   Reply With Quote
Old 09/06/2017, 10:19 PM   #5
Lajko1
High-roller
 
Join Date: Oct 2008
Posts: 1,235
Reputation: 17
Default Re: Just Practicing (Objects / edit objects)

Thank you, will try to follow to your guide repped, if I will encounter any problems I will post it here

Last edited by Lajko1; 10/06/2017 at 08:50 AM.
Lajko1 is offline   Reply With Quote
Old 10/06/2017, 09:00 AM   #6
Lajko1
High-roller
 
Join Date: Oct 2008
Posts: 1,235
Reputation: 17
Default Re: Just Practicing (Objects / edit objects)

Okay so I changed my script a bit so I won't get confused that much, I added stuff you mentioned in link you provided, this is how my code looks like right now:

Code:
#define MAX_POKERTABLES			10
#define POKER_TABLE_OBJECT    	19474
#define POKER_TABLE_DIST     	150.0

#define DIALOG_CREATEPOKER				5000

#define TableBounds(%0,%1); \
	if(%0 < 0 || %0 > MAX_POKERTABLES) \
	{ \
		print(%1); \
	    return 0; \
	}
Code:
enum PokerInfo
{
	TableID,
	ObjectID,
	Float:PokerX,
	Float:PokerY,
	Float:PokerZ,
	Float:PokerRX,
	Float:PokerRY,
	Float:PokerRZ,
// stuff below
OnGameModeInit / Exit
Code:
public OnGameModeInit()
{
	for(new i = 0; i < MAX_POKERTABLES; i++)
	{
	    PokerTable[i][ObjectID] = INVALID_OBJECT_ID;
	}
	return 1;
}

public OnGameModeExit()
{
	for(new i = 0; i < MAX_POKERTABLES; i++)
	{
	    if(PokerTable[i][ObjectID] != INVALID_OBJECT_ID) DestroyObject(PokerTable[i][ObjectID]);
	}
	return 1;
}
Creating the Table - via dialogs

Code:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    new Float:x, Float:y, Float:z;
	GetPlayerPos(playerid, x, y, z);
    if(dialogid == DIALOG_CREATEPOKER)
    {
        if(response)
        {
            if(CreatePokerTable(x, y, z) == -1) return SendClientMessage(playerid, 0xFF0000FF, "There are too many tables");
            SendClientMessage(playerid, -1, "New table created use /edittable to place it at desired location!!");
        }
        else
        {
            SendClientMessage(playerid, -1, "You canceled the poker creating menu!");
        }
        return 1;
    }

    return 0;
}
stock
Code:
stock CreatePokerTable(Float:x, Float:y, Float:z)
{
    for(new i = 0; i < MAX_POKERTABLES; i++)
    {
        if(PokerTable[i][ObjectID] != INVALID_OBJECT_ID) continue;
        
        PokerTable[i][ObjectID] = CreateObject(POKER_TABLE_OBJECT, x, y, z, 0.0, 0.0, 0.0, POKER_TABLE_DIST);
        PokerTable[i][PokerX] = Float:x;
		PokerTable[i][PokerY] = Float:y;
		PokerTable[i][PokerZ] = Float:z;
		return PokerTable[i][ObjectID];
	}
	print("ERROR: Tried to add too many hearts");
	return INVALID_OBJECT_ID;
}
but what the current problem is.. I can't really solve those "errors" I'm getting:
Code:
[16:47:34] [debug]  Accessing element at index 108 past array upper bound 9
[16:47:34] [debug] AMX backtrace:
[16:47:34] [debug] #0 0001a284 in public Streamer_OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x43072df4, 0xc291eeb4, 0x3fb70000, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:34] [debug] #1 00019b24 in public OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x43072df4, 0xc291eeb4, 0x3fb70000, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:35] [debug] Run time error 4: "Array index out of bounds"
[16:47:35] [debug]  Accessing element at index 108 past array upper bound 9
[16:47:35] [debug] AMX backtrace:
[16:47:35] [debug] #0 0001a284 in public Streamer_OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x43072df4, 0xc291eeb4, 0x3f1ea3d8, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:35] [debug] #1 00019b24 in public OnPlayerEditObject (0x00000000, 0x00000001, 0x00000001, 0x00000002, 0x43072df4, 0xc291eeb4, 0x3f1ea3d8, 0x00000000, 0x00000000, 0x00000000) from Poker.amx
[16:47:35] [debug] Run time error 4: "Array index out of bounds"
[16:47:35] [debug]  Accessing element at index 108 past array upper bound 9
[16:47:35] [debug] AMX backtrace:
Errors pops out whenever I'm editing the object with "SelectObject" function aka everytime I use the UI that SelectObject provides:
This is my OnPlayerEditObject callback I believe mistakes are in here:

Code:
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
    new tableid = PokerTable[tableid][TableID];
    new testmsg[600];
	new Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ;
	GetObjectPos(objectid, oldX, oldY, oldZ);
	GetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
	
	if(!playerobject) // If this is a global object, sync the position for other players // global = 0 | player = 1
	{
	    if(!IsValidObject(objectid)) return 1;
	    SetObjectPos(objectid, fX, fY, fZ);
     	SetObjectRot(objectid, fRotX, fRotY, fRotZ);
	}

	if(response == EDIT_RESPONSE_FINAL)
	{
	    new Float:x, Float:y, Float:z;
		GetObjectPos(objectid, x, y, z);
		PokerTable[tableid][PokerX] = Float:x;
		PokerTable[tableid][PokerY] = Float:y;
		PokerTable[tableid][PokerZ] = Float:z;
		
		new Float:RotX,Float:RotY,Float:RotZ;
		GetObjectRot(objectid, RotX, RotY, RotZ);
		PokerTable[tableid][PokerRX] = Float:RotX;
		PokerTable[tableid][PokerRY] = Float:RotY;
		PokerTable[tableid][PokerRZ] = Float:RotZ;
		format(testmsg,sizeof(testmsg),"Table is set at X: %f | Y: %f | Z: %f | RX: %f | RY: %f | RZ: %f",x,y,z,RotX,RotY,RotZ);
		SendClientMessage(playerid,-1, testmsg);
		// The player clicked on the save icon
		// Do anything here to save the updated object position (and rotation)
		
	}

	if(response == EDIT_RESPONSE_CANCEL)
	{
		//The player cancelled, so put the object back to it's old position
		if(!playerobject) //Object is not a playerobject
		{
			SetObjectPos(objectid, oldX, oldY, oldZ);
			SetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
		}
		else
		{
			SetPlayerObjectPos(playerid, objectid, oldX, oldY, oldZ);
			SetPlayerObjectRot(playerid, objectid, oldRotX, oldRotY, oldRotZ);
		}
	}
	return 1;
}
Biggest part is from wiki as I'm using this callback from samp wiki, so can you point me at right direction how to get rid of errors ? :/ what I'm trying to do is, when I place the table at desired location it should message me it's current coordinats x y z etc.
Lajko1 is offline   Reply With Quote
Old 10/06/2017, 03:15 PM   #7
Pottus
High-roller
 
Pottus's Avatar
 
Join Date: Jun 2012
Posts: 4,885
Reputation: 1337
Default Re: Just Practicing (Objects / edit objects)

return PokerTable[i][ObjectID]; should be the index of the poker table which is the variable "i". Think of the poker table as it's own entity an entity can contain many elements and elements of different types (objects, 3d text, textdraw etc) that are used in the system you are creating. Therefore you reference the array index ---PokerTable[ARRAY INDEX]--- of the given entity then reference it's elements of composition through the use of an enum ---PokerTable[ARRAY INDEX][ObjectID]---.
Pottus is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
How to edit attached objects to vehicles? IulyZNX Scripting Help 1 04/01/2015 09:01 PM
Edit Blank Objects For SetObjectMaterialText ilepopivanov Scripting Help 3 15/11/2014 07:01 PM
[FilterScript] G2BH Objects [LOAD/SAVE/EDIT] Glad2BeHere Filterscripts 3 10/03/2013 04:51 PM
[GameMode] Plasma'o`Funzone - scriptable gamemode-500+objects|Freeroam/DM/Stunts/Mini-Games/Race-Easy to edit RanSEE Gamemode Scripts 24 13/06/2012 05:41 PM
How to edit objects in Samp? nandusak_11 General 5 21/10/2011 12:07 PM


All times are GMT. The time now is 04:51 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.