Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums



(Advanced Search)

Forum Statistics
» Members: 7,043
» Latest member: Robert Kim
» Forum threads: 2,350
» Forum posts: 12,241

Full Statistics

Online Users
There are currently 320 online users.
» 0 Member(s) | 317 Guest(s)
Bing, Google, Yandex

Latest Threads
Windows virus recognizion
Forum: Support
Last Post: Robert Kim
5 hours ago
» Replies: 2
» Views: 1,280
SA-MP isn't working
Forum: General Discussions
Last Post: Robert Kim
5 hours ago
» Replies: 4
» Views: 3,182
GTA SA DE is the future
Forum: General Discussions
Last Post: Robert Kim
5 hours ago
» Replies: 5
» Views: 5,243
Error
Forum: Pawn Scripting
Last Post: -N0FeaR-
Yesterday, 12:05 PM
» Replies: 0
» Views: 16
GTA Multigames [ MultiMod...
Forum: Advertisements
Last Post: Undead
Yesterday, 07:37 AM
» Replies: 0
» Views: 22
Atlanta DeathMatch
Forum: Advertisements
Last Post: NixaSha
Yesterday, 01:19 AM
» Replies: 0
» Views: 23
will open.mp supports hig...
Forum: Questions and Suggestions
Last Post: NoxxeR
2025-04-23, 07:10 PM
» Replies: 2
» Views: 408
black screen
Forum: Support
Last Post: geppetog
2025-04-23, 05:34 PM
» Replies: 0
» Views: 33
Discord server - Ban Appe...
Forum: Chat
Last Post: joshcoconutard
2025-04-22, 06:42 PM
» Replies: 0
» Views: 50
I know Kalcor left the bu...
Forum: Questions and Suggestions
Last Post: NoxxeR
2025-04-22, 02:22 PM
» Replies: 4
» Views: 173

 
  A little bit of my designs
Posted by: daddy. - 2020-08-27, 01:37 AM - Forum: Art - Replies (10)

Hi, this is some of my designs that I have done in the past 3-4 months.

If You have an idea what to improve in these logo / cover designs please tell me, I really appreciate it. ;)

P.S. I am amateur

This was simple logo for ,right now not existing, esports org.

[Image: WStransparent.png]





This was design concept for album

[Image: albumnsn.png]





This is GIF cover for one of the servers

[Image: TS3-FUSIONGAMINGFULL.gif]





Next designs are a little bit more complex ones



[Image: daddycsgo-novi-logo.png]



[Image: ATTOXCOVERFB.png]



[Image: geprlogo.png]





And this is the last logo I've done for one digital label



[Image: L4-RTRANSPARENT.png]


  [Help] Can't change avatar
Posted by: robertocaribbean - 2020-08-27, 12:32 AM - Forum: Chat - Replies (4)

I get the following error when tried to upload an image file in the user panel: "The file upload failed. Please choose a valid file and try again."



I tried:


  • Upload images in .jpg, .png, .gif, .bmp

  • Resize/Compress images manually.


  Best server OS/Hardware
Posted by: Pinch - 2020-08-23, 05:00 PM - Forum: General Discussions - Replies (5)

As the title says, I need the stablest server OS (for example Ubuntu 14 is Stabler than 18.04) and the best server hardware (i7-7700K is "better performing" than i9-9900k(less tickrate but it's at least playable)


  Dynamic Polygon Street Names
Posted by: Torque - 2020-08-21, 09:11 PM - Forum: Pawn Scripting - Replies (9)

Good evening all,

I'm currently setting up polygon areas for street names. Currently, I have it set as follows:

Code:
new area_StreetName;
new Float:Array_StreetName[] =
{
   x, y,
   x, y,
   x, y
};

I have about 20 of these so far, and to me, this seems really inefficient.

What I would like, is a float which contains the street name, and county, and then the points, like so...

Code:
new Float:StreetNames[][StreetInfo]
{ "StreetName", "TownName, CountyName", POINTS },

Code:
enum StreetInfo {
   StreetName_1[64],
   StreetName_2[64],
   Float:POINTS
};

Perhaps using an enum to store that information. But because the amount of points for a given street could be anything from 4 to 25 points, how would I go about storing this into an enum?

Thanks


  Necesito ayuda con mi gm de Texture Studio
Posted by: DanielFz - 2020-08-10, 04:25 PM - Forum: Programaci?n - No Replies

Bueno, debido a que llevo 11 horas esperando una respuesta a el post que publiqu? en PawnScripting, lo publico ac?, mi problema es que los usuarios conectados a una red creada por mi en hamachi no pueden unirse a mi servidor con la gm de Texture Studio 1.9D, s?, usamos la misma ip y los mismos puertos, usamos la misma red y utilizan mi ip de hamachi, tambi?n tengo otra gm que estoy haciendo desde 0 y con esta misma si funciona, parece ser el error exclusivo de Texture Studio 1.9D.
Gracias por leer y gracias de antemano.


  I need help with my Texture Studio Gamemode
Posted by: DanielFz - 2020-08-10, 05:01 AM - Forum: Pawn Scripting - Replies (1)

Hi boys, first sorry for my bad english, i'm from Venezuela, my native language is spanish, now, my problem is that it does not allow other players to enter my local server, yes, we are all in hamachi and on the same network, and all has connected on hamachi, everyone place my HAMACHI IP, and the ports of server.cfg, and, in other gm?we can play good, it only happens in Texture Studio.



Thanks for read


  Noise Meter
Posted by: Pinch - 2020-08-04, 08:39 PM - Forum: Questions and Suggestions - Replies (1)

https://www.youtube.com/watch?v=d7DKVevNPoM



Basically, just add a?function that returns GTA SA world's?noise

It should be somewhere there :D


  Delete me
Posted by: Torque - 2020-08-04, 11:39 AM - Forum: Pawn Scripting - Replies (1)

Delete me. Had a newb moment


  "Attach player to player" to carry or move other user
Posted by: Javi - 2020-08-01, 01:35 PM - Forum: Questions and Suggestions - Replies (3)

What was said in the title, create a new function that allows you to move other players

Perfect to RolePlay servers.


[Image: It4pToZ.jpg]
[Image: 14044620362693_gta_sa-2014-07-04-07-10-59-42.jpg]


  Make simple entrance
Posted by: Tama - 2020-07-30, 10:08 AM - Forum: Tutorials - Replies (2)

Hello guys, today i want to teach you how to make a simple entrance, it's easy to make entrance.

All you need to do just follow my instruction, okay ;)



First, you need to download these includes below.


Then you need to extract each of that include to each folder. If you found .dll file, put it on Plugins and if you found .inc file you can put on "pawno/includes"

Okay, i assuming you have extracted the include/plugins, now let's get started.



Make a base script, like this:

PHP Code:
#define FILTERSCRIPT



#include <a_samp>

#include <sscanf2>

#include <streamer>

#include <Pawn.CMD>



public OnFilterScriptInit()?{

? ? return 
1;

}



public 
OnFilterScriptExit()?{

? ? return 
1;





Add MAX_ENTRANCE, enum (alias), and public variable like this:

PHP Code:
#define MAX_ENTRANCE 22 // maximum entrance "server" could handle/store temporarily



enum?

? ??
e_ENTRANCE_DATA {

? ? 
bool:isExists// checking if entrance exists

? ? name[24], // entrance name

? ? Float:pos[3], // outside position

? ? Float:intPos[3], // inside position

? ? int// interior id

? ? world // world id

};

new 
EntranceData[MAX_ENTRANCE][e_ENTRANCE_DATA]; 



Next step is making a command, use your word like "entrancecreate, entranceedit, entrancedelete" or anything for the command name.

And adding "security" like?IsPlayerAdmin(playerid) you can preventing people from creating a entrance.

You can do like this if you want:

PHP Code:
CMD:makeentrance(playeridparams[]) {

? ? if (!
IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1"You are not administrator");

? ? if (!
isnull(params)) return SendClientMessage(playerid, -1"/makeentrance <name>"); // tell player if "params" is null 



Inside the?cmd, you need to add this.

PHP Code:
? ?// getting the next slot with checking if isExists on "i" variable?is false

? ? for (new iMAX_ENTRANCE) if (!EntranceData[i][isExists]) {



? ? ? ? 
// storing useful data to server, this prevents for "false detection"

? ? ? ? EntranceData[i][isExists] = true;



? ? ? ??
//you can use strcat if you want, but i prefer format

? ? ? ? format(EntranceData[i][name], 24params);



? ? ? ?
// getting player position and angle for teleport/spawning pickup

? ? ? ? GetPlayerPos(playeridEntranceData[i][pos][0],?EntranceData[i][pos][1],?EntranceData[i][pos][2]);

? ? ? ? 
GetPlayerFacingAngle(playeridEntranceData[i][pos][3]);

? ? ? ?

? ? ? ? 
// spawning "dynamic pickup" on stored location

? ? ? ? EntranceData[i][text] = CreateDynamic3DTextLabel(EntranceData[i][name], -1EntranceData[i][pos][0],?EntranceData[i][pos][1],?EntranceData[i][pos][2], 4.0);

? ? ? ? 
EntranceData[i][model] = CreateDynamicPickup(modelidtypeEntranceData[i][pos][0],?EntranceData[i][pos][1],?EntranceData[i][pos][2], 00);



? ? ? ??
// and tell player if everything done

? ? ? ??SendClientMessage(playerid, -1"Successfully making a entrance");

? ? ? ? return 
1;

? ??}

? ? ?
// if MAX_ENTRANCE has reached, tell player

? ? ?SendClientMessage(playerid, -1"Server cannot handle more entrance");

? ? ?return 
1;





That?code will checking if number within "i" variable is free to use, and if is then the code will set isExists to prevent "overwriting" data/false detection.

And storing player position and angle is useful for teleporting and "spawning" pickup on that positon.



After making command for creating entrance, now you need to make another command for storing interior position, so you can enter/exit.

For example, i will make "entrancepos" instead "entranceedit" because i want to make things simpler.

PHP Code:
CMD:interiorentrance(playeridparams[]) {

? ??

? ? 
// make local variable first to avoid warning/error

? ??new entId;

? ??

? ?
// check if player not input anything or if player input is NaN

? ? if (sscanf(params"i"entId))

? ? ? ? return 
SendClientMessage(playerid, -1"/nteriorentrance<entrance ID>"); // then tell player to do like this.

??

? ? 
// check again if entrance is valid, using this method will avoid any warning like "Array out of bonds"

? ? if ((entId || entId >= MAX_ENTRANCE) && (!EntranceData[entId][isExists]))

? ? ? ? return 
SendClientMessage(playerid, -1"Invalid entrance ID"); // if is, tell player that ID is not exists.



? ? // if things are clear, now we can safely store our position to Entrance Data.

? ? GetPlayerPos(playeridEntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2]);

? ? 
GetPlayerFacingAngle(playeridEntranceData[entId][pos][3]);

?

? ? 
EntranceData[entId][int] = GetPlayerInterior(playerid);

? ? 
EntranceData[entId][world] = GetPlayerVirtualWorld(playerid);

? ??

? ? 
// tell player if script successfully storing data.

? ? SendClientMessage(playerid, -1"Successfully editing Entrance Interior");

? ? return 
1;





We're finish making those command, now the last but not least.. Making a delete command.

PHP Code:
CMD:deleteentrance(playeridparams[]) {

? ? 
// make local variable first to avoid warning/error

? ??new entId;

? ??

? ?
// check if player not input anything or if player input is NaN

? ? if (sscanf(params"i"entId))

? ? ? ? return 
SendClientMessage(playerid, -1"/deleteentrance <entrance ID>"); // then tell player to do like this.

??

? ? 
// check again if entrance is valid, using this method will avoid any warning like "Array out of bonds"

? ? if ((entId || entId >= MAX_ENTRANCE) && (!EntranceData[entId][isExists]))

? ? ? ? return 
SendClientMessage(playerid, -1"Invalid entrance ID"); // if is, tell player that ID is not exists.



? ? // okay?first, we gonna kick people if they are inside of what we want to destroy/delete.

? ? for (new iGetPlayerPoolSize(); j) if (PlayerInEntrance[i] == entId) {



? ? ? ? 
SetPlayerPos(playeridEntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2]);

? ? ? ? 
SetPlayerFacingAngle(playeridEntranceData[entId][pos][3]);

?

? ? ? ? 
SetPlayerInterior(playerid0);

? ? ? ? 
SetPlayerVirtualWorld(playerid0);



? ? ? ? 
PlayerInEntrance[playerid] = -1;

? ? }



? ? 
// and?let's destroy entrance pickup and text.

? ??if (IsValidDynamic3DTextLabel(EntranceData[entId][text]))

? ? ? ? 
DestroyDynamic3DTextLabel(EntranceData[entId][text]);



? ? if (
IsValidDynamicPickup(EntranceData[entId][model]))

? ? ? ? 
DestroyDynamicPickup(EntranceData[entId][model]);



? ? 
// if things are clear, now we can safely reset?Entrance Data.

? ? new tmpReset[e_ENTRANCE_DATA];

? ? 
EntranceData[entId]?= tmpReset;

? ? 
EntranceData[entId][isExists] = false;

? ? return 
1;





Now we're done with command, lets go to the next step.

Okay, we need to make a code so people can enter a entrance with "F" or whatever key you'll use.

Lets say i want to make "F" for enter/exit the entrance.

PHP Code:
public OnPlayerKeyStatechange(playeridnewkeysoldkeys) {



? ? 
// this code?is detecting if player pressed KEY_FIRE (F/Enter/LMB/TAB)

? ? if ((newkeys KEY_FIRE) && !(oldkeys KEY_FIRE)) {



? ? ? ??
//making local variabel for storing entrance ID

? ? ? ? new entId;



? ? ? ? 
// we need to make a function which detects if player is nearing any

? ? ? ? // entrance within radius 2.5, if does?then script?returning a entrance ID.

? ? ? ? if ((entId GetNearestEntrance(playerid2.5)) != -1) {



? ? ? ? ? ? 
// after that, teleport player to inside?of nearest entrance

? ? ? ? ? ? SetPlayerPos(playeridEntranceData[entId][intPos][0],?EntranceData[entId][intPos][1],?EntranceData[entId][intPos][2]);

? ? ? ? ? ? 
SetPlayerFacingAngle(playeridEntranceData[entId][intPos][3]);

?

? ? ? ? ? ? 
SetPlayerInterior(playeridEntranceData[entId][int]);

? ? ? ? ? ? 
SetPlayerVirtualWorld(playeridEntranceData[entId][world]);



? ? ? ? ? ? 
// storing entrance ID to player variable, so we can use that later.

? ? ? ? ? ? PlayerInEntrance[playerid] = entId;

? ? ? ? }?



? ? ? ? 
// this code checking player if they pressed "F"/KEY_FIRE and player in near exit  player inside a entrance.

? ? ? ? if ((entId =?PlayerInEntrance[playerid] != -1)?&& IsPlayerInRangeOfPoint(playerid2.5,?EntranceData[entId][intPos][0],?EntranceData[entId][intPos][1],?EntranceData[entId][intPos][2])) {

? ? ? ? ? ? 
// after that, teleport player to outside?of nearest entrance

? ? ? ? ? ? SetPlayerPos(playeridEntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2]);

? ? ? ? ? ? 
SetPlayerFacingAngle(playeridEntranceData[entId][pos][3]);

?

? ? ? ? ? ? 
SetPlayerInterior(playerid0);

? ? ? ? ? ? 
SetPlayerVirtualWorld(playerid0);



? ? ? ? ? ? 
// change?player variable to -1 to avoid false detection.

? ? ? ? ? ? PlayerInEntrance[playerid] = -1;

? ? ? ? }

? ? }

? ? return 
1;





Last but not least, we're gonna make "function" to check is player near any entrance?

and returning entrance ID if that entrance is closest to player than any entrance.



PHP Code:
GetNearestEntrance(playeridFloat:radius 4.0) {

? ? for (new 
iMAX_ENTRANCE) if (IsPlayerInRangeOfPoint(playerid2.5,?EntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2])) {

? ? ? ? return 
i;? ??

? ??}

? ? return -
1;





Yaay, we finish making Entrance System, if you don't understand please reply so i/other people can give you proper way to make you understand.

Sorry if my bad english hehe ~



Oh yeah, btw here is the full code:

PHP Code:
#define FILTERSCRIPT



#include <a_samp>

#include <sscanf2>

#include <streamer>

#include <Pawn.CMD>



public OnFilterScriptInit()?{

? ? return 
1;

}



public 
OnFilterScriptExit()?{

? ? return 
1;

}



CMD:makeentrance(playeridparams[]) {

? ? if (!
IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1"You are not administrator");

? ? if (!
isnull(params)) return SendClientMessage(playerid, -1"/makeentrance <name>"); // tell player if "params" is null



? ?// getting the next slot with checking if isExists on "i" variable?is false

? ? for (new iMAX_ENTRANCE) if (!EntranceData[i][isExists]) {



? ? ? ? 
// storing useful data to server, this prevents for "false detection"

? ? ? ? EntranceData[i][isExists] = true;



? ? ? ??
//you can use strcat if you want, but i prefer format

? ? ? ? format(EntranceData[i][name], 24params);



? ? ? ?
// getting player position and angle for teleport/spawning pickup

? ? ? ? GetPlayerPos(playeridEntranceData[i][pos][0],?EntranceData[i][pos][1],?EntranceData[i][pos][2]);

? ? ? ? 
GetPlayerFacingAngle(playeridEntranceData[i][pos][3]);

? ? ? ?

? ? ? ? 
// spawning "dynamic pickup" on stored location

? ? ? ? EntranceData[i][text] = CreateDynamic3DTextLabel(EntranceData[i][name], -1EntranceData[i][pos][0],?EntranceData[i][pos][1],?EntranceData[i][pos][2], 4.0);

? ? ? ? 
EntranceData[i][model] = CreateDynamicPickup(modelidtypeEntranceData[i][pos][0],?EntranceData[i][pos][1],?EntranceData[i][pos][2], 00);



? ? ? ??
// and tell player if everything done

? ? ? ??SendClientMessage(playerid, -1"Successfully making a entrance");

? ? ? ? return 
1;

? ??}

? ? ?
// if MAX_ENTRANCE has reached, tell player

? ? ?SendClientMessage(playerid, -1"Server cannot handle more entrance");

? ? ?return 
1;

}



CMD:interiorentrance(playeridparams[]) {

? ??

? ? 
// make local variable first to avoid warning/error

? ??new entId;

? ??

? ?
// check if player not input anything or if player input is NaN

? ? if (sscanf(params"i"entId))

? ? ? ? return 
SendClientMessage(playerid, -1"/nteriorentrance<entrance ID>"); // then tell player to do like this.

??

? ? 
// check again if entrance is valid, using this method will avoid any warning like "Array out of bonds"

? ? if ((entId || entId >= MAX_ENTRANCE) && (!EntranceData[entId][isExists]))

? ? ? ? return 
SendClientMessage(playerid, -1"Invalid entrance ID"); // if is, tell player that ID is not exists.



? ? // if things are clear, now we can safely store our position to Entrance Data.

? ? GetPlayerPos(playeridEntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2]);

? ? 
GetPlayerFacingAngle(playeridEntranceData[entId][pos][3]);

?

? ? 
EntranceData[entId][int] = GetPlayerInterior(playerid);

? ? 
EntranceData[entId][world] = GetPlayerVirtualWorld(playerid);

? ??

? ? 
// tell player if script successfully storing data.

? ? SendClientMessage(playerid, -1"Successfully editing Entrance Interior");

? ? return 
1;

}



CMD:deleteentrance(playeridparams[]) {

? ? 
// make local variable first to avoid warning/error

? ??new entId;

? ??

? ?
// check if player not input anything or if player input is NaN

? ? if (sscanf(params"i"entId))

? ? ? ? return 
SendClientMessage(playerid, -1"/deleteentrance <entrance ID>"); // then tell player to do like this.

??

? ? 
// check again if entrance is valid, using this method will avoid any warning like "Array out of bonds"

? ? if ((entId || entId >= MAX_ENTRANCE) && (!EntranceData[entId][isExists]))

? ? ? ? return 
SendClientMessage(playerid, -1"Invalid entrance ID"); // if is, tell player that ID is not exists.



? ? // okay?first, we gonna kick people if they are inside of what we want to destroy/delete.

? ? for (new iGetPlayerPoolSize(); j) if (PlayerInEntrance[i] == entId) {



? ? ? ? 
SetPlayerPos(playeridEntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2]);

? ? ? ? 
SetPlayerFacingAngle(playeridEntranceData[entId][pos][3]);

?

? ? ? ? 
SetPlayerInterior(playerid0);

? ? ? ? 
SetPlayerVirtualWorld(playerid0);



? ? ? ? 
PlayerInEntrance[playerid] = -1;

? ? }



? ? 
// and?let's destroy entrance pickup and text.

? ??if (IsValidDynamic3DTextLabel(EntranceData[entId][text]))

? ? ? ? 
DestroyDynamic3DTextLabel(EntranceData[entId][text]);



? ? if (
IsValidDynamicPickup(EntranceData[entId][model]))

? ? ? ? 
DestroyDynamicPickup(EntranceData[entId][model]);



? ? 
// if things are clear, now we can safely reset?Entrance Data.

? ? new tmpReset[e_ENTRANCE_DATA];

? ? 
EntranceData[entId]?= tmpReset;

? ? 
EntranceData[entId][isExists] = false;

? ? return 
1;

}



public 
OnPlayerKeyStatechange(playeridnewkeysoldkeys) {



? ? 
// this code?is detecting if player pressed KEY_FIRE (F/Enter/LMB/TAB)

? ? if ((newkeys KEY_FIRE) && !(oldkeys KEY_FIRE)) {



? ? ? ??
//making local variabel for storing entrance ID

? ? ? ? new entId;



? ? ? ? 
// we need to make a function which detects if player is nearing any

? ? ? ? // entrance within radius 2.5, if does?then script?returning a entrance ID.

? ? ? ? if ((entId GetNearestEntrance(playerid2.5)) != -1) {



? ? ? ? ? ? 
// after that, teleport player to inside?of nearest entrance

? ? ? ? ? ? SetPlayerPos(playeridEntranceData[entId][intPos][0],?EntranceData[entId][intPos][1],?EntranceData[entId][intPos][2]);

? ? ? ? ? ? 
SetPlayerFacingAngle(playeridEntranceData[entId][intPos][3]);

?

? ? ? ? ? ? 
SetPlayerInterior(playeridEntranceData[entId][int]);

? ? ? ? ? ? 
SetPlayerVirtualWorld(playeridEntranceData[entId][world]);



? ? ? ? ? ? 
// storing entrance ID to player variable, so we can use that later.

? ? ? ? ? ? PlayerInEntrance[playerid] = entId;

? ? ? ? }?



? ? ? ? 
// this code checking player if they pressed "F"/KEY_FIRE and player in near exit  player inside a entrance.

? ? ? ? if ((entId =?PlayerInEntrance[playerid] != -1)?&& IsPlayerInRangeOfPoint(playerid2.5,?EntranceData[entId][intPos][0],?EntranceData[entId][intPos][1],?EntranceData[entId][intPos][2])) {

? ? ? ? ? ? 
// after that, teleport player to outside?of nearest entrance

? ? ? ? ? ? SetPlayerPos(playeridEntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2]);

? ? ? ? ? ? 
SetPlayerFacingAngle(playeridEntranceData[entId][pos][3]);

?

? ? ? ? ? ? 
SetPlayerInterior(playerid0);

? ? ? ? ? ? 
SetPlayerVirtualWorld(playerid0);



? ? ? ? ? ? 
// change?player variable to -1 to avoid false detection.

? ? ? ? ? ? PlayerInEntrance[playerid] = -1;

? ? ? ? }

? ? }

? ? return 
1;

}



GetNearestEntrance(playeridFloat:radius 4.0) {

? ? for (new 
iMAX_ENTRANCE) if (IsPlayerInRangeOfPoint(playerid2.5,?EntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2])) {

? ? ? ? return 
i;? ??

? ??}

? ? return -
1;