Jump to content
  • 0

pomoc Dueljoin X,X,Y,Y


[Hades]

Dotaz

Popis problému:

Zdravím mam problem z pozici pro duel ale jde o pozici zony zmenil sem misto konanani duelu

a tim padem se musi zmenit i zona duelu jde o 8 cisel pozic if(X >= && X <= && Y >= && Y <= ).

Tato funkce ma vytvaret zonu duelu ale jak je tam dosadit tak aby to nevihazovalo :d

 

Chyby/varování kompilátoru a při běhu:

--

 

Kód:

 

[spoiler]Puvodni duel z fora:
#include 

#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
#define BARVA_MODRA 0x33CCFFAA
#define BARVA_BILA 0xEFEFF7AA
#define MAX_PLAYERS_EX 200

forward duelTimerStart();
forward duelTimerUpdate();

enum DUEL_INFO
{
Started,
Counter,
Pocethracu,
TimerStart,
TimerUpdate
}
new Duel[DUEL_INFO];
new IsPlayerInDuel[MAX_PLAYERS_EX];
new DuelZbran[MAX_PLAYERS_EX];

stock WeaponName(weapon)
{
new Nazev[50];

if (weapon == 0) Nazev = "Nic";
else if(weapon == 1) Nazev = "Boxer";
else if(weapon == 2) Nazev = "Golfova hul";
else if(weapon == 3) Nazev = "Hul";
else if(weapon == 4) Nazev = "Nuz";
else if(weapon == 5) Nazev = "Baseballka";
else if(weapon == 6) Nazev = "Lopata";
else if(weapon == 7) Nazev = "Kulecnikova hul";
else if(weapon == 8) Nazev = "Katana";
else if(weapon == 9) Nazev = "Motorovka";
else if(weapon == 10) Nazev = "Dildo";
else if(weapon == 11) Nazev = "Dildo2";
else if(weapon == 12) Nazev = "Vibrator";
else if(weapon == 13) Nazev = "Vibrator2";
else if(weapon == 14) Nazev = "Kvetiny";
else if(weapon == 15) Nazev = "Cane";
else if(weapon == 16) Nazev = "Granat";
else if(weapon == 17) Nazev = "Slzny plyn";
else if(weapon == 18) Nazev = "Molotovuv koktejl";
else if(weapon == 22) Nazev = "Kolt45";
else if(weapon == 23) Nazev = "Pistole s tlumicem";
else if(weapon == 24) Nazev = "Desert Eagle";
else if(weapon == 25) Nazev = "Shotgun";
else if(weapon == 26) Nazev = "Sawn-off Shotgun";
else if(weapon == 27) Nazev = "Combat Shotgun";
else if(weapon == 28) Nazev = "Uzi";
else if(weapon == 29) Nazev = "Mp5";
else if(weapon == 30) Nazev = "AK47";
else if(weapon == 31) Nazev = "M4";
else if(weapon == 32) Nazev = "Tec9";
else if(weapon == 33) Nazev = "Rifle";
else if(weapon == 34) Nazev = "Sniperka";
else if(weapon == 35) Nazev = "Raketomet";
else if(weapon == 36) Nazev = "Teplonavadeci Raketomet";
else if(weapon == 37) Nazev = "Plamenomet";
else if(weapon == 38) Nazev = "Minigun";
else if(weapon == 39) Nazev = "Satchel";
else if(weapon == 40) Nazev = "Bomba";
else if(weapon == 41) Nazev = "Spray";
else if(weapon == 42) Nazev = "Hasicak";
else if(weapon == 43) Nazev = "Fotak";
else if(weapon == 44) Nazev = "Noční vidění";
else if(weapon == 45) Nazev = "Infračervená vize";
else if(weapon == 46) Nazev = "Padak";

return Nazev;
}

stock Jmeno(playerid)
{
new p[MAX_PLAYER_NAME];
if(IsPlayerConnected(playerid)) GetPlayerName(playerid,p,MAX_PLAYER_NAME);
return p;
}

IsNumeric(string[]){ for (new i = 0,j = strlen(string); i < j; i++) if(string[i] > '9' || string[i] < '0') return 0; return 1; }

public duelTimerStart()
{
new string[10];
Duel[Counter]--;
if(Duel[Counter] > 0) Duel[TimerStart] = SetTimer("duelTimerStart",1000,0);
for(new i=0; i< MAX_PLAYERS_EX; i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInDuel[i] != 0)
{
if(Duel[Counter] > 0)
{
format(string,sizeof(string),"%d",Duel[Counter]);
GameTextForPlayer(i,string,1000,4);
}else{
GameTextForPlayer(i,"~r~START!",2000,4);
GivePlayerWeapon(i,DuelZbran[i],99999);
}
}
}
}
return 1;
}

public duelTimerUpdate()
{
for(new i=0; i< MAX_PLAYERS_EX; i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInDuel[i] != 0)
{
new Float:X,Float:Y,Float:Z;
GetPlayerPos(i,X,Y,Z);
if(X >= 2445.0791 && X = 2350.9741 && Y  47 || zbranid < 0 || zbranid == 44 || zbranid == 45 || zbranid == 19 || zbranid == 20 || zbranid == 21 || zbranid == 38 || zbranid == 43) return SendClientMessage(playerid,BARVA_BILA,"[!] Spatne zvolena zbran! Mrknete se na /duelweaponlist");
else
{
Duel[Pocethracu] ++ ;
DuelZbran[playerid] = zbranid;
IsPlayerInDuel[playerid] = 1;
ResetPlayerWeapons(playerid);
KillTimer(Duel[TimerUpdate]);
Duel[TimerUpdate] = SetTimer("duelTimerUpdate",1000,1);
Duel[Counter] = 3;
SetPlayerHealth(playerid,100);
SetPlayerArmour(playerid,0);
SetPlayerInterior(playerid,0);
format(string,sizeof(string),"Hrac %s byl pripojen do duelu se zbrani %s (%d)",Jmeno(playerid),WeaponName(zbranid),zbranid);
SendClientMessageToAll(BARVA_MODRA,string);

if(Duel[Pocethracu] == 1)
{
SetPlayerPos(playerid,2449.7778,2378.5486,71.0496);
}
else if(Duel[Pocethracu] == 2)
{
SetPlayerPos(playerid,2489.5415,2378.6658,71.0496);
Duel[Started] = 1;
SendClientMessageToAll(BARVA_MODRA,"Duel zahajen,pripravit...");
Duel[TimerStart] = SetTimer("duelTimerStart",1000,0);
}
}
}
return 1;
}

dcmd_duelweaponlist(playerid,params[])
{
#pragma unused params
if(IsPlayerConnected(playerid))
{
SendClientMessage(playerid,BARVA_MODRA,"Duel Weapons List:");
SendClientMessage(playerid,BARVA_MODRA,"Desert Eagle - 24");
SendClientMessage(playerid,BARVA_MODRA,"Shotgun - 25");
SendClientMessage(playerid,BARVA_MODRA,"Sawn Off Shotgun - 26");
SendClientMessage(playerid,BARVA_MODRA,"Combat Shotgun - 27");
SendClientMessage(playerid,BARVA_MODRA,"Uzi - 28");
SendClientMessage(playerid,BARVA_MODRA,"MP5 - 29");
SendClientMessage(playerid,BARVA_MODRA,"AK47 - 30");
SendClientMessage(playerid,BARVA_MODRA,"M4 - 31");
SendClientMessage(playerid,BARVA_MODRA,"Tec9 -32");
}
return 1;
}

dcmd_duelguest(playerid,params[])
{
#pragma unused params
if(IsPlayerConnected(playerid))
{
new string[150];
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,2460.1892,2336.0178,82.7734);
ResetPlayerWeapons(playerid);
format(string,sizeof(string),"Hrac %s se prisel podivat na duel.",Jmeno(playerid));
SendClientMessageToAll(BARVA_MODRA,string);
}
return 1;
}[/spoiler]

 

 

 

Dodatečné poznámky:

Mě jde vlastne o tyto pozice

if(X >= 2445.0791 && X <= 2497.3074 && Y >= 2350.9741 && Y <= 2402.0007)

a zde sou me souradnice kde by se to melo odehravat (místo je ve vzduchu v kleci)

AddPlayerClass(276,537.8679,-1472.1122,716.8849,218.0587,0,0,0,0,0,0); // arena

AddPlayerClass(276,554.3687,-1488.7344,716.8849,44.4938,0,0,0,0,0,0); // arena

ja to mel takto:

if(X >= 537.8679 && X <= 554.3687 && Y >= -1472.1122 && Y <= -1488.7344)

ale jak sem zjistil tak je to spatne :)

předem diky za pomoc a vysvětlení

Link to comment
Share on other sites

5 odpovědí na tuto otázku

Recommended Posts

  • 0

Mám na tebe jeden dotaz, co má vlastně dělat tahle funkce... Je strašně neoptimalizované.. pro každého hráče kontroluješ pozic, zbraně a nastavuješ x proměnných. Určitě by šla vylepšit, jen popiš k čemu všemu slouží:

 

 

public duelTimerUpdate()
{
for(new i=0; i< MAX_PLAYERS_EX; i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInDuel[i] != 0)
{
new Float:X,Float:Y,Float:Z;
GetPlayerPos(i,X,Y,Z);
if(X >= 2445.0791 && X = 2350.9741 && Y  47 || zbranid < 0 || zbranid == 44 || zbranid == 45 || zbranid == 19 || zbranid == 20 || zbranid == 21 || zbranid == 38 || zbranid == 43) return SendClientMessage(playerid,BARVA_BILA,"[!] Spatne zvolena zbran! Mrknete se na /duelweaponlist");
else
{
Duel[Pocethracu] ++ ;
DuelZbran[playerid] = zbranid;
IsPlayerInDuel[playerid] = 1;
ResetPlayerWeapons(playerid);
KillTimer(Duel[TimerUpdate]);
Duel[TimerUpdate] = SetTimer("duelTimerUpdate",1000,1);
Duel[Counter] = 3;
SetPlayerHealth(playerid,100);
SetPlayerArmour(playerid,0);
SetPlayerInterior(playerid,0);
format(string,sizeof(string),"Hrac %s byl pripojen do duelu se zbrani %s (%d)",Jmeno(playerid),WeaponName(zbranid),zbranid);
SendClientMessageToAll(BARVA_MODRA,string);

if(Duel[Pocethracu] == 1)
{
SetPlayerPos(playerid,2449.7778,2378.5486,71.0496);
}
else if(Duel[Pocethracu] == 2)
{
SetPlayerPos(playerid,2489.5415,2378.6658,71.0496);
Duel[Started] = 1;
SendClientMessageToAll(BARVA_MODRA,"Duel zahajen,pripravit...");
Duel[TimerStart] = SetTimer("duelTimerStart",1000,0);
}
}
}
return 1;
}
 

 

 

 

A co se té zóny týče, tak

        MinY
             v
      MinX > *-------------
             |            |
             |  gangzone  |
             |   center   |
             |            |
             -------------* < MaxX
                          ^
                          MaxY    

zde máš obrázek z wiki jak to vlastně vypadá. Takže co ty potřebuješ je: stoupnout si do jednoho rohu, kde chceš vytvořit tu zónu a /save. Poté do protějšího rohu a zase /save. A tyhle pozice (jenom X a Y, pokud ti nezáleží na Z) dosadit do té podmínky. ;) Musíš si dávat pozor na operátory --> tzn. správně umístit ty pozice v podmínce, aby jsi je neprohodil, to by ti pak správně nefungovalo. ;) 

Link to comment
Share on other sites

  • 0

mela by to byt funkce ze pokud opusti zonu tak to napise ze hrac odesel z duelu a vyhodí ho to z duelu na pozici kde byl a nacte puvodni zbrane  a ume by to asi ani tam nemuselo byt protoze duel ma byt v kleci co sem vytvoril  a ve finále mě ani nedošlo že tu klec neopustí takže když se nikdo nepripoji bude to chtit prikaz /duelend  hrac %s  se odpojil z duelu icon_e_smile.gif a pokud by si byl tak ochoten a nevedl me spravnou cestou jak na to icon_e_smile.gif


Takto by to bylo kdybych od dělal zonu ale neopustim duel dobrovolne pokud by se nepripojil souper

 

 

#include

#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
#define BARVA_MODRA 0x33CCFFAA
#define BARVA_BILA 0xEFEFF7AA
#define MAX_PLAYERS_EX 200

forward duelTimerStart();
forward duelTimerUpdate();

enum DUEL_INFO
{
Started,
Counter,
Pocethracu,
TimerStart,
TimerUpdate
}
new Duel[DUEL_INFO];
new IsPlayerInDuel[MAX_PLAYERS_EX];
new DuelZbran[MAX_PLAYERS_EX];

stock WeaponName(weapon)
{
new Nazev[50];

if (weapon == 0) Nazev = "Nic";
else if(weapon == 1) Nazev = "Boxer";
else if(weapon == 2) Nazev = "Golfova hul";
else if(weapon == 3) Nazev = "Hul";
else if(weapon == 4) Nazev = "Nuz";
else if(weapon == 5) Nazev = "Baseballka";
else if(weapon == 6) Nazev = "Lopata";
else if(weapon == 7) Nazev = "Kulecnikova hul";
else if(weapon == 8) Nazev = "Katana";
else if(weapon == 9) Nazev = "Motorovka";
else if(weapon == 10) Nazev = "Dildo";
else if(weapon == 11) Nazev = "Dildo2";
else if(weapon == 12) Nazev = "Vibrator";
else if(weapon == 13) Nazev = "Vibrator2";
else if(weapon == 14) Nazev = "Kvetiny";
else if(weapon == 15) Nazev = "Cane";
else if(weapon == 16) Nazev = "Granat";
else if(weapon == 17) Nazev = "Slzny plyn";
else if(weapon == 18) Nazev = "Molotovuv koktejl";
else if(weapon == 22) Nazev = "Kolt45";
else if(weapon == 23) Nazev = "Pistole s tlumicem";
else if(weapon == 24) Nazev = "Desert Eagle";
else if(weapon == 25) Nazev = "Shotgun";
else if(weapon == 26) Nazev = "Sawn-off Shotgun";
else if(weapon == 27) Nazev = "Combat Shotgun";
else if(weapon == 28) Nazev = "Uzi";
else if(weapon == 29) Nazev = "Mp5";
else if(weapon == 30) Nazev = "AK47";
else if(weapon == 31) Nazev = "M4";
else if(weapon == 32) Nazev = "Tec9";
else if(weapon == 33) Nazev = "Rifle";
else if(weapon == 34) Nazev = "Sniperka";
else if(weapon == 35) Nazev = "Raketomet";
else if(weapon == 36) Nazev = "Teplonavadeci Raketomet";
else if(weapon == 37) Nazev = "Plamenomet";
else if(weapon == 38) Nazev = "Minigun";
else if(weapon == 39) Nazev = "Satchel";
else if(weapon == 40) Nazev = "Bomba";
else if(weapon == 41) Nazev = "Spray";
else if(weapon == 42) Nazev = "Hasicak";
else if(weapon == 43) Nazev = "Fotak";
else if(weapon == 44) Nazev = "Noční vidění";
else if(weapon == 45) Nazev = "Infračervená vize";
else if(weapon == 46) Nazev = "Padak";

return Nazev;
}

stock Jmeno(playerid)
{
new p[MAX_PLAYER_NAME];
if(IsPlayerConnected(playerid)) GetPlayerName(playerid,p,MAX_PLAYER_NAME);
return p;
}

IsNumeric(string[]){ for (new i = 0,j = strlen(string); i < j; i++) if(string > '9' || string < '0') return 0; return 1; }

public duelTimerStart()
{
new string[10];
Duel[Counter]--;
if(Duel[Counter] > 0) Duel[TimerStart] = SetTimer("duelTimerStart",1000,0);
for(new i=0; i< MAX_PLAYERS_EX; i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInDuel != 0)
{
if(Duel[Counter] > 0)
{
format(string,sizeof(string),"%d",Duel[Counter]);
GameTextForPlayer(i,string,1000,4);
}else{
GameTextForPlayer(i,"~r~START!",2000,4);
GivePlayerWeapon(i,DuelZbran,99999);
}
}
}
}
return 1;
}

public duelTimerUpdate()
{
for(new i=0; i< MAX_PLAYERS_EX; i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInDuel != 0)
{
new Float:X,Float:Y,Float:Z;
GetPlayerPos(i,X,Y,Z);
if(Duel[Counter] == 0)
{
if(Duel[Pocethracu] == 1)
{
new string[150];
format(string,sizeof(string),"Vitezem duelu je %s.",Jmeno(i));
SendClientMessageToAll(BARVA_MODRA,string);
KillTimer(Duel[TimerUpdate]);
DuelZbran = 0;
IsPlayerInDuel = 0;
SpawnPlayer(i);
Duel[started] = 0;
Duel[Pocethracu] = 0;
}
}
}else{
DuelZbran = 0;
IsPlayerInDuel = 0;
SpawnPlayer(i);
new string[150];
format(string,sizeof(string),"Hrac %s opustil duel.",Jmeno(i));
SendClientMessageToAll(BARVA_MODRA,string);
Duel[Pocethracu] --;
if(Duel[Pocethracu] == 0)
{
KillTimer(Duel[TimerUpdate]);
Duel[started] = 0;
}
}
}
}
return 1;
}

public OnPlayerCommandText(playerid,cmdtext[])
{
if(IsPlayerConnected(playerid))
{
dcmd(duel,4,cmdtext);
dcmd(dueljoin,8,cmdtext);
dcmd(duelguest,9,cmdtext);
dcmd(duelweaponlist,14,cmdtext);
}
return 0;
}

dcmd_duel(playerid,params[])
{
#pragma unused params
if(IsPlayerConnected(playerid))
{
SendClientMessage(playerid,BARVA_MODRA,"Duel:");
SendClientMessage(playerid,BARVA_MODRA,"/dueljoin");
SendClientMessage(playerid,BARVA_MODRA,"/duelstart");
SendClientMessage(playerid,BARVA_MODRA,"/duelguest");
SendClientMessage(playerid,BARVA_MODRA,"/duelweaponlist");
}
return 1;
}

dcmd_dueljoin(playerid,params[])
{
if(IsPlayerConnected(playerid))
{
new string[150];
new zbranid=strval(params);
if(!params[0]||!IsNumeric(params)) return SendClientMessage(playerid,BARVA_BILA,"[!] Použití: /dueljoin [zbranid]");
else if(Duel[started] != 0) return SendClientMessage(playerid,BARVA_BILA,"[!] Duel jiz probiha,vyckejte!");
else if(IsPlayerInDuel[playerid] != 0) return SendClientMessage(playerid,BARVA_BILA,"[!] Jiz jste v duelu!");
else if(zbranid > 47 || zbranid < 0 || zbranid == 44 || zbranid == 45 || zbranid == 19 || zbranid == 20 || zbranid == 21 || zbranid == 38 || zbranid == 43) return SendClientMessage(playerid,BARVA_BILA,"[!] Spatne zvolena zbran! Mrknete se na /duelweaponlist");
else
{
Duel[Pocethracu] ++ ;
DuelZbran[playerid] = zbranid;
IsPlayerInDuel[playerid] = 1;
ResetPlayerWeapons(playerid);
KillTimer(Duel[TimerUpdate]);
Duel[TimerUpdate] = SetTimer("duelTimerUpdate",1000,1);
Duel[Counter] = 3;
SetPlayerHealth(playerid,100);
SetPlayerArmour(playerid,0);
SetPlayerInterior(playerid,0);
format(string,sizeof(string),"Hrac %s byl pripojen do duelu se zbrani %s (%d)",Jmeno(playerid),WeaponName(zbranid),zbranid);
SendClientMessageToAll(BARVA_MODRA,string);

if(Duel[Pocethracu] == 1)
{
SetPlayerPos(playerid,536.2170,-1481.2561,717.2756);
}
else if(Duel[Pocethracu] == 2)
{
SetPlayerPos(playerid,556.7703,-1481.2313,717.2756);
Duel[started] = 1;
SendClientMessageToAll(BARVA_MODRA,"Duel zahajen,pripravit...");
Duel[TimerStart] = SetTimer("duelTimerStart",1000,0);
}
}
}
return 1;
}

dcmd_duelweaponlist(playerid,params[])
{
#pragma unused params
if(IsPlayerConnected(playerid))
{
SendClientMessage(playerid,BARVA_MODRA,"Duel Weapons List:");
SendClientMessage(playerid,BARVA_MODRA,"Desert Eagle - 24");
SendClientMessage(playerid,BARVA_MODRA,"Shotgun - 25");
SendClientMessage(playerid,BARVA_MODRA,"Sawn Off Shotgun - 26");
SendClientMessage(playerid,BARVA_MODRA,"Combat Shotgun - 27");
SendClientMessage(playerid,BARVA_MODRA,"Uzi - 28");
SendClientMessage(playerid,BARVA_MODRA,"MP5 - 29");
SendClientMessage(playerid,BARVA_MODRA,"AK47 - 30");
SendClientMessage(playerid,BARVA_MODRA,"M4 - 31");
SendClientMessage(playerid,BARVA_MODRA,"Tec9 -32");
}
return 1;
}

dcmd_duelguest(playerid,params[])
{
#pragma unused params
if(IsPlayerConnected(playerid))
{
new string[150];
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,539.7651,-1470.2284,716.8849);
ResetPlayerWeapons(playerid);
format(string,sizeof(string),"Hrac %s se prisel podivat na duel.",Jmeno(playerid));
SendClientMessageToAll(BARVA_MODRA,string);
}
return 1;
}

 


vlaste se jen odelal radek ze zonou 

if(X >=532.2701 && X <=559.5403 && Y >=-1481.0779 && Y <=-1481.0552)
{
ale jak ted ukoncit duel pomoci prikazu :) 
Edited by Doobyvatel
Link to comment
Share on other sites

  • 0

Uprav podľa seba ten duel join, keď hráč zakladá ten duel, takže všetko čo je pred if(duel[počethraču] == 1), takže ak to založí, tak sprav timer napr. na 20sec. A keď skončí timer, tak zruší duel. Skús si pozrieť duelupdate public a všetko za }else{ slúži ku ukončeniu duelu. A potom, keď sa napojí druhý hráč, takže pod if(duel[počethraču] == 1) skonči timer. To by si mohol zvládnuť


Funkcie kt. budeš potrebovať, sú v tom duelupdate timer

 

napr. CMD:

...

for(new i = 0; i <= MAX_PLAYERS; i++)
{

DuelZbran = 0;
IsPlayerInDuel = 0;
SpawnPlayer(i);
Duel[Pocethracu] --;
if(Duel[Pocethracu] == 0)
KillTimer(Duel[TimerUpdate]);
Duel[started] = 0;

a tak ďalej

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...