Welcome, Guest |
You have to register before you can post on our site.
|
Online Users |
There are currently 524 online users. » 1 Member(s) | 520 Guest(s) Google, Bing, Yandex, SodaCola
|
Latest Threads |
Interesting
Forum: Chat
Last Post: Gerty23461
2 hours ago
» Replies: 1
» Views: 3
|
I humor myself
Forum: Programming
Last Post: nami16504
Yesterday, 04:28 PM
» Replies: 5
» Views: 8,054
|
Command does not work in-...
Forum: Pawn Scripting
Last Post: PANZEHIR_
2024-11-23, 06:36 PM
» Replies: 0
» Views: 43
|
White Screen
Forum: Support
Last Post: Phat202146_real
2024-11-21, 02:50 PM
» Replies: 0
» Views: 44
|
I get error 021 using y_h...
Forum: Pawn Scripting
Last Post: daniscript18
2024-11-18, 11:34 PM
» Replies: 0
» Views: 61
|
Il reste des français sur...
Forum: French/Fran?ais
Last Post: tysanio
2024-11-18, 05:39 AM
» Replies: 2
» Views: 474
|
Object creation issues
Forum: Programming
Last Post: K1271
2024-11-15, 11:51 PM
» Replies: 0
» Views: 56
|
Is the SAMP Hosting the s...
Forum: General Discussions
Last Post: OperaGX
2024-11-14, 09:33 PM
» Replies: 0
» Views: 76
|
Run time error 19: "File ...
Forum: Pawn Scripting
Last Post: Rexey
2024-11-14, 03:50 AM
» Replies: 0
» Views: 65
|
How to Compile Your Gamem...
Forum: Tutorials
Last Post: thelante
2024-11-13, 08:50 AM
» Replies: 3
» Views: 478
|
|
|
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(playerid, params[]) {
? ? 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 i; i < MAX_ENTRANCE; i ) 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], 24, params);
? ? ? ?// getting player position and angle for teleport/spawning pickup
? ? ? ? GetPlayerPos(playerid, EntranceData[i][pos][0],?EntranceData[i][pos][1],?EntranceData[i][pos][2]);
? ? ? ? GetPlayerFacingAngle(playerid, EntranceData[i][pos][3]);
? ? ? ?
? ? ? ? // spawning "dynamic pickup" on stored location
? ? ? ? EntranceData[i][text] = CreateDynamic3DTextLabel(EntranceData[i][name], -1, EntranceData[i][pos][0],?EntranceData[i][pos][1],?EntranceData[i][pos][2], 4.0);
? ? ? ? EntranceData[i][model] = CreateDynamicPickup(modelid, type, EntranceData[i][pos][0],?EntranceData[i][pos][1],?EntranceData[i][pos][2], 0, 0);
? ? ? ??// 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(playerid, params[]) {
? ??
? ? // 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 < 1 || 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(playerid, EntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2]);
? ? GetPlayerFacingAngle(playerid, EntranceData[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(playerid, params[]) {
? ? // 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 < 1 || 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 i, j = GetPlayerPoolSize(); i < j; i ) if (PlayerInEntrance[i] == entId) {
? ? ? ? SetPlayerPos(playerid, EntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2]);
? ? ? ? SetPlayerFacingAngle(playerid, EntranceData[entId][pos][3]);
?
? ? ? ? SetPlayerInterior(playerid, 0);
? ? ? ? SetPlayerVirtualWorld(playerid, 0);
? ? ? ? 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(playerid, newkeys, oldkeys) {
? ? // 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(playerid, 2.5)) != -1) {
? ? ? ? ? ? // after that, teleport player to inside?of nearest entrance
? ? ? ? ? ? SetPlayerPos(playerid, EntranceData[entId][intPos][0],?EntranceData[entId][intPos][1],?EntranceData[entId][intPos][2]);
? ? ? ? ? ? SetPlayerFacingAngle(playerid, EntranceData[entId][intPos][3]);
?
? ? ? ? ? ? SetPlayerInterior(playerid, EntranceData[entId][int]);
? ? ? ? ? ? SetPlayerVirtualWorld(playerid, EntranceData[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(playerid, 2.5,?EntranceData[entId][intPos][0],?EntranceData[entId][intPos][1],?EntranceData[entId][intPos][2])) {
? ? ? ? ? ? // after that, teleport player to outside?of nearest entrance
? ? ? ? ? ? SetPlayerPos(playerid, EntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2]);
? ? ? ? ? ? SetPlayerFacingAngle(playerid, EntranceData[entId][pos][3]);
?
? ? ? ? ? ? SetPlayerInterior(playerid, 0);
? ? ? ? ? ? SetPlayerVirtualWorld(playerid, 0);
? ? ? ? ? ? // 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(playerid, Float:radius = 4.0) {
? ? for (new i; i < MAX_ENTRANCE; i ) if (IsPlayerInRangeOfPoint(playerid, 2.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(playerid, params[]) {
? ? 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 i; i < MAX_ENTRANCE; i ) 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], 24, params);
? ? ? ?// getting player position and angle for teleport/spawning pickup
? ? ? ? GetPlayerPos(playerid, EntranceData[i][pos][0],?EntranceData[i][pos][1],?EntranceData[i][pos][2]);
? ? ? ? GetPlayerFacingAngle(playerid, EntranceData[i][pos][3]);
? ? ? ?
? ? ? ? // spawning "dynamic pickup" on stored location
? ? ? ? EntranceData[i][text] = CreateDynamic3DTextLabel(EntranceData[i][name], -1, EntranceData[i][pos][0],?EntranceData[i][pos][1],?EntranceData[i][pos][2], 4.0);
? ? ? ? EntranceData[i][model] = CreateDynamicPickup(modelid, type, EntranceData[i][pos][0],?EntranceData[i][pos][1],?EntranceData[i][pos][2], 0, 0);
? ? ? ??// 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(playerid, params[]) {
? ??
? ? // 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 < 1 || 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(playerid, EntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2]);
? ? GetPlayerFacingAngle(playerid, EntranceData[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(playerid, params[]) {
? ? // 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 < 1 || 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 i, j = GetPlayerPoolSize(); i < j; i ) if (PlayerInEntrance[i] == entId) {
? ? ? ? SetPlayerPos(playerid, EntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2]);
? ? ? ? SetPlayerFacingAngle(playerid, EntranceData[entId][pos][3]);
?
? ? ? ? SetPlayerInterior(playerid, 0);
? ? ? ? SetPlayerVirtualWorld(playerid, 0);
? ? ? ? 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(playerid, newkeys, oldkeys) {
? ? // 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(playerid, 2.5)) != -1) {
? ? ? ? ? ? // after that, teleport player to inside?of nearest entrance
? ? ? ? ? ? SetPlayerPos(playerid, EntranceData[entId][intPos][0],?EntranceData[entId][intPos][1],?EntranceData[entId][intPos][2]);
? ? ? ? ? ? SetPlayerFacingAngle(playerid, EntranceData[entId][intPos][3]);
?
? ? ? ? ? ? SetPlayerInterior(playerid, EntranceData[entId][int]);
? ? ? ? ? ? SetPlayerVirtualWorld(playerid, EntranceData[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(playerid, 2.5,?EntranceData[entId][intPos][0],?EntranceData[entId][intPos][1],?EntranceData[entId][intPos][2])) {
? ? ? ? ? ? // after that, teleport player to outside?of nearest entrance
? ? ? ? ? ? SetPlayerPos(playerid, EntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2]);
? ? ? ? ? ? SetPlayerFacingAngle(playerid, EntranceData[entId][pos][3]);
?
? ? ? ? ? ? SetPlayerInterior(playerid, 0);
? ? ? ? ? ? SetPlayerVirtualWorld(playerid, 0);
? ? ? ? ? ? // change?player variable to -1 to avoid false detection.
? ? ? ? ? ? PlayerInEntrance[playerid] = -1;
? ? ? ? }
? ? }
? ? return 1;
}
GetNearestEntrance(playerid, Float:radius = 4.0) {
? ? for (new i; i < MAX_ENTRANCE; i ) if (IsPlayerInRangeOfPoint(playerid, 2.5,?EntranceData[entId][pos][0],?EntranceData[entId][pos][1],?EntranceData[entId][pos][2])) {
? ? ? ? return i;? ??
? ??}
? ? return -1;
}
|
|
|
cusCMD - Custom Command |
Posted by: Tama - 2020-07-30, 09:50 AM - Forum: Libraries
- No Replies
|
|
Yeah i know it may be useless for you who reliable to speed like Pawn.CMD, but i managed to porting izcmd to this.
You can change prefix or sensitive char....
PHP Code: #define CUSTOM_CMD "." #define CMD_SENSITIVE false #include <cusCMD>
For command processing you'll changing CMD: to Process:
Here's example code:
PHP Code: #include <a_samp>
#define CMD_PREFIX ">" #define CMD_SENSTIVE false
#include <cusCMD>
// Output: >help Process:help(playerid, params[]) { ? ? SendClientMessage(playerid, -1, "Yay!"); ? ? return 0; }
NOTE: use only special char, otherwise it won't work ( maybe ?\_(?)_/? )
?If you're interested, you can download and test it yourself.
https://pastebin.com/JqeHAGmQ
|
|
|
So I created SAMP app redesign in Figma |
Posted by: dayew - 2020-07-28, 02:21 PM - Forum: Art
- Replies (16)
|
|
I played SAMP about 7 years (maybe less) and all time in my head was question: Why SAMP interface?has not any progress?
I dont speak about custom models from servers - maybe it's too hard to realize, but interface - it is first, what sees user after installing, and it's need to be upgraded.
I worked on this project about week in Figma, and created this minimalistic, and user-frendly interface, so what do you guys think?
|
|
|
samp-advanced-kicks |
Posted by: Mergevos - 2020-07-27, 12:24 AM - Forum: Libraries
- Replies (4)
|
|
samp-delayed-kick
?Installation
Simply?install?to?your?project:
Code: sampctl?package?install?Mergevos/samp-advanced-kick
Include?in?your?code?and?begin?using?the?library:
Usage
To?use?this?include,?simply?include?it.?There's?no?need?for?fixing?kick?and?SendClientMessage(etc...)?due?to?its?problems.
There're?a?few?functions.?
Very?famous?function,?already?known.
Code: KickEx(playerid,?string:?reason[],?bool:usecallback=false)??
?
Sister?function?of?famous?Kick.?You?may?now?kick?with?reason,?that's?going?to?be?send?like?a?message??
Code: AdvancedKick(playerid,?targetid,?string:?reason[],?time);??
This?function?will?check?whether?the?playerid?or?targetid?are?connected,?returning?a?`OnPlayerKicked`?callback.?Allowing?you?to?choose?interval?after?which?will?player?get?kicked.??
Code: public?OnlayerKicked(playerid,?kickerid,?string:?reason[],?time,?responselevel)
Allows?player?to?choose?and?create?their?own?response?if?the?either?player?or?target's?not?connected??
Code: enum?{
????KICK_SUCCESS?=?1,?//?Kick's?successful??
????KICK_KICKEROFFLINE,?//?Player?offline,?target?id?not?player?id??
????KICK_TARGETOFFLINE?//?Target?offline,?player?id?not?kicker?id??
}
Theese're?the?response?levels?used?by?a?responselevel?param?in?OnPlayerKicked?callback
Testing
To?test,?simply?run?the?package:
Other
I don't know why I've just?had published this
|
|
|
Map location for player |
Posted by: Godfather - 2020-07-22, 08:59 AM - Forum: Questions and Suggestions
- Replies (2)
|
|
On roleplay servers there can be properties and enterable buildings that teleports you to some interior. These interiors often throw player somewhere to the desert/LV/SF/Montgomery.
It would be cool if we can set like map location of that player so when the player opens the map from pause menu?he will be shown there where we set the x and y.
|
|
|
Can anyone give me the full archive of Y_Less tutorials? |
Posted by: justinnn - 2020-07-20, 08:51 AM - Forum: General Discussions
- Replies (1)
|
|
After I've read Y_Less' code optimization tutorial: https://forum.sa-mp.com/showthread.php?t=57018
I feel like I want more. It is old but its literally gold. Has anyone has a list of tutorials that Y_Less made on SAMP Forums? Link is enough given that it can be accessed it web.archive but I cant find more because some pages of samp forums are broken.
It really helps me alot especially this quarantine wherein schools are closed. It gives me something to read that I have interest into. I know you'll tell me go learn newer language instead of pawn but Im just at senior high and its long way ahead. I just want to practice my C lang skills on a game that I really love.
|
|
|
|