SHOW:
|
|
- or go back to the newest paste.
| 1 | #include < a_samp > | |
| 2 | #include < YSI\y_ini > | |
| 3 | - | #include < YSI\y_commands > |
| 3 | + | #include < Pawn.cmd > |
| 4 | #include < sscanf2 > | |
| 5 | ||
| 6 | enum {
| |
| 7 | ||
| 8 | DIALOG_AKTORPANEL, | |
| 9 | DIALOG_KREIRAJAKTORA1, | |
| 10 | DIALOG_KREIRAJAKTORA2, | |
| 11 | DIALOG_AKTORANIMACIJA, | |
| 12 | DIALOG_IZMENIAKTORA, | |
| 13 | DIALOG_IZMENIPOZICIJU, | |
| 14 | DIALOG_IZMENIANIMACIJU, | |
| 15 | DIALOG_IZMENISKIN, | |
| 16 | DIALOG_IZMENIIME, | |
| 17 | DIALOG_IZBRISIAKTORA, | |
| 18 | DIALOG_BRISANJEAKTORA | |
| 19 | } | |
| 20 | ||
| 21 | #define AKTOR_FILE "/Aktori/%d.ini" | |
| 22 | #define MAX_AKTORI 300 | |
| 23 | ||
| 24 | enum AKTOR_INFO {
| |
| 25 | ||
| 26 | Float:aktorX, | |
| 27 | Float:aktorY, | |
| 28 | Float:aktorZ, | |
| 29 | Float:aktorA, | |
| 30 | aktorskin, | |
| 31 | aktorime[ 40 ], | |
| 32 | aktoranimacija, | |
| 33 | aktorid | |
| 34 | } | |
| 35 | ||
| 36 | new AktorInfo[ MAX_AKTORI ][ AKTOR_INFO ], KreiraAktora[ MAX_PLAYERS ], Text3D:AktorLabel[ sizeof(AktorInfo) ]; | |
| 37 | ||
| 38 | public OnFilterScriptInit() {
| |
| 39 | ||
| 40 | print("===========================\n\n- Aktor system by Shomy -\n- Ucitan -\n\n===========================");
| |
| 41 | return 1; | |
| 42 | } | |
| 43 | ||
| 44 | public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
| |
| 45 | ||
| 46 | if(dialogid == DIALOG_AKTORPANEL) {
| |
| 47 | if(!response) return 1; | |
| 48 | if(response) {
| |
| 49 | switch(listitem) {
| |
| 50 | case 0: return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA1, DIALOG_STYLE_INPUT, "{0077C7}KREIRANJE {FFFFFF}AKTORA", "Unesite ID skina aktora.\nPrimer: 294", "U redu", "Izlaz");
| |
| 51 | case 1: return ShowPlayerDialog(playerid, DIALOG_AKTORANIMACIJA, DIALOG_STYLE_LIST, "{0077C7}ANIMACIJA {FFFFFF}AKTORA", "Animacija 1\n Animacija 2\nAnimacija 3", "Izaberi", "Izlaz");
| |
| 52 | case 2: return ShowPlayerDialog(playerid, DIALOG_IZMENIAKTORA, DIALOG_STYLE_LIST, "{0077C7}IZMENI {FFFFFF}AKTORA", "Promeni poziciju\nPromeni skin\nPromeni ime\nPromeni animaciju", "Izaberi", "Izlaz");
| |
| 53 | case 3: return ShowPlayerDialog(playerid, DIALOG_IZBRISIAKTORA, DIALOG_STYLE_LIST, "{0077C7}IZBRISI {FFFFFF}AKTORA", "Najblizeg aktora\nID aktora", "Izaberi", "Izlaz");
| |
| 54 | } | |
| 55 | } | |
| 56 | } | |
| 57 | else if(dialogid == DIALOG_KREIRAJAKTORA1) {
| |
| 58 | if(!response) return 1; | |
| 59 | if(response) {
| |
| 60 | new skinid, i = NextAktorID(MAX_AKTORI), Float:X, Float:Y, Float:Z, Float:A; | |
| 61 | if(sscanf(inputtext, "d", skinid)) return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA1, DIALOG_STYLE_INPUT, "{0077C7}KREIRANJE {FFFFFF}AKTORA", "Unesite ID skina aktora.\nPrimer: 294", "U redu", "Izlaz");
| |
| 62 | if(skinid > 311) return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA1, DIALOG_STYLE_INPUT, "{FF1414}NEPOSTOJECI ID SKINA {FFFFFF}(0-311)", "Unesite ID skina aktora.\nPrimer: 294", "U redu", "Izlaz");
| |
| 63 | GetPlayerPos(playerid, X,Y,Z); GetPlayerFacingAngle(playerid, A); | |
| 64 | AktorInfo[ i ][ aktorX ] = X; AktorInfo[ i ][ aktorY ] = Y; AktorInfo[ i ][ aktorZ ] = Z; AktorInfo[ i ][ aktorA ] = A; | |
| 65 | AktorInfo[ i ][ aktorskin ] = skinid; | |
| 66 | AktorInfo[ i ][ aktoranimacija ] = 0; | |
| 67 | KreiraAktora[ playerid ] = i; | |
| 68 | ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA2, DIALOG_STYLE_INPUT, "{0077C7}KREIRANJE {FFFFFF}AKTORA", "Unesite ime aktora.\nPrimer: Shomy", "U redu", "Izlaz");
| |
| 69 | } | |
| 70 | } | |
| 71 | else if(dialogid == DIALOG_KREIRAJAKTORA2) {
| |
| 72 | if(!response) return 1; | |
| 73 | if(response) {
| |
| 74 | new aktornick[ 40 ], str[ 56 ], i = KreiraAktora[ playerid ]; | |
| 75 | if(sscanf(inputtext, "s[40]", aktornick)) return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA2, DIALOG_STYLE_INPUT, "{0077C7}KREIRANJE {FFFFFF}AKTORA", "Unesite ime aktora.\nPrimer: Shomy", "U redu", "Izlaz");
| |
| 76 | AktorInfo[ i ][ aktorime ] = aktornick; | |
| 77 | AktorInfo[ i ][ aktorid ] = CreateActor(AktorInfo[ i ][ aktorskin ], AktorInfo[ i ][ aktorX ], AktorInfo[ i ][ aktorY ], AktorInfo[ i ][ aktorZ ], AktorInfo[ i ][ aktorA ]); | |
| 78 | SetPlayerPos(playerid, AktorInfo[ i ][ aktorX ]+2, AktorInfo[ i ][ aktorY ]+2, AktorInfo[ i ][ aktorZ ]); | |
| 79 | format(str, sizeof(str), "%s {0077C7}[ID %d]", aktornick, i);
| |
| 80 | AktorLabel[ i ] = Create3DTextLabel(str, 0xFFFFFFFF, AktorInfo[ i ][ aktorX ], AktorInfo[ i ][ aktorY ], AktorInfo[ i ][ aktorZ ]+1.0, 10.0, 0); | |
| 81 | SaveAktor(i); | |
| 82 | SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Ukoliko zelite da dodate aktoru animaciju - {0077C7}/aktorpanel");
| |
| 83 | } | |
| 84 | } | |
| 85 | else if(dialogid == DIALOG_IZMENIAKTORA) {
| |
| 86 | if(!response) return 1; | |
| 87 | if(response) {
| |
| 88 | switch(listitem) {
| |
| 89 | case 0: return ShowPlayerDialog(playerid, DIALOG_IZMENIPOZICIJU, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}POZICIJE", "Unesite ID aktora.", "U redu", "Izlaz");
| |
| 90 | case 1: return ShowPlayerDialog(playerid, DIALOG_IZMENISKIN, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}SKINA", "Unesite ID skina.\n{FF1414}NAPOMENA: {FFFFFF}Menja skin aktoru najblizem Vama.", "U redu", "Izlaz");
| |
| 91 | case 2: return ShowPlayerDialog(playerid, DIALOG_IZMENIIME, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}IMENA", "Unesite novo ime.\n{FF1414}NAPOMENA: {FFFFFF}Menja ime aktoru najblizem Vama.", "U redu", "Izlaz");
| |
| 92 | case 3: return ShowPlayerDialog(playerid, DIALOG_IZMENIANIMACIJU, DIALOG_STYLE_LIST, "{0077C7}Menja animaciju aktoru najblizem Vama", "Stance\nSit\nLay\nGround Sit", "Izaberi","Izlaz"); //za jos animacija dodaj naziv animacije, ostalo dole u dialog..
| |
| 93 | } | |
| 94 | } | |
| 95 | } | |
| 96 | else if(dialogid == DIALOG_IZMENIPOZICIJU) {
| |
| 97 | if(!response) return 1; | |
| 98 | if(response) {
| |
| 99 | new i, Float:X, Float:Y, Float:Z, Float:A, str[ 60 ]; | |
| 100 | if(sscanf(inputtext, "d", i)) return ShowPlayerDialog(playerid, DIALOG_IZMENIPOZICIJU, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}POZICIJE", "Unesite ID aktora.", "U redu", "Izlaz");
| |
| 101 | GetPlayerPos(playerid, X,Y,Z); GetPlayerFacingAngle(playerid, A); | |
| 102 | SetPlayerPos(playerid, X+2, Y+2, Z); | |
| 103 | SetActorPos(AktorInfo[ i ][ aktorid ], X, Y, Z); | |
| 104 | SetActorFacingAngle(AktorInfo[ i ][ aktorid ], A); | |
| 105 | Delete3DTextLabel(AktorLabel[ i ]); | |
| 106 | format(str, sizeof(str), "%s {0077C7}[ID %d]", AktorInfo[ i ][ aktorime ], i);
| |
| 107 | AktorLabel[ i ] = Create3DTextLabel(str, 0xFFFFFFFF, X,Y,Z+1.0, 10.0, 0); | |
| 108 | AktorInfo[ i ][ aktorX ] = X; AktorInfo[ i ][ aktorY ] = Y; AktorInfo[ i ][ aktorZ ] = Z; AktorInfo[ i ][ aktorA ] = A; | |
| 109 | SaveAktor(i); | |
| 110 | SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Uspesno ste promenili poziciju aktoru.");
| |
| 111 | } | |
| 112 | } | |
| 113 | else if(dialogid == DIALOG_IZMENISKIN) {
| |
| 114 | if(!response) return 1; | |
| 115 | if(response) {
| |
| 116 | new skinid, i = GetNearestAktor(playerid); | |
| 117 | if(i == -1) return SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Niste blizu aktora.");
| |
| 118 | if(sscanf(inputtext, "d", skinid)) return ShowPlayerDialog(playerid, DIALOG_IZMENISKIN, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}SKINA", "Unesite ID skina.\n{FF1414}NAPOMENA: {FFFFFF}Menja skin aktoru najblizem Vama.", "U redu", "Izlaz");
| |
| 119 | if(skinid > 311) return ShowPlayerDialog(playerid, DIALOG_KREIRAJAKTORA1, DIALOG_STYLE_INPUT, "{FF1414}NEPOSTOJECI ID SKINA {FFFFFF}(0-311)", "Unesite ID skina aktora.\nPrimer: 294", "U redu", "Izlaz");
| |
| 120 | DestroyActor(AktorInfo[ i ][ aktorid ]); | |
| 121 | AktorInfo[ i ][ aktorid ] = CreateActor(skinid, AktorInfo[ i ][ aktorX ], AktorInfo[ i ][ aktorY ] , AktorInfo[ i ][ aktorZ ], AktorInfo[ i ][ aktorA ]); | |
| 122 | AktorInfo[ i ][ aktorskin ] = skinid; | |
| 123 | SaveAktor(i); | |
| 124 | SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Uspesno ste promenili skin aktoru.");
| |
| 125 | } | |
| 126 | } | |
| 127 | else if(dialogid == DIALOG_IZMENIIME) {
| |
| 128 | if(!response) return 1; | |
| 129 | if(response) {
| |
| 130 | new actime[ 40 ], str[ 60 ], i = GetNearestAktor(playerid); | |
| 131 | if(i == -1) return SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Niste blizu aktora.");
| |
| 132 | if(sscanf(inputtext, "s[40]", actime)) return ShowPlayerDialog(playerid, DIALOG_IZMENIIME, DIALOG_STYLE_INPUT, "{0077C7}MENJANJE {FFFFFF}IMENA", "Unesite novo ime.\n{FF1414}NAPOMENA: {FFFFFF}Menja ime aktoru najblizem Vama.", "U redu", "Izlaz");
| |
| 133 | format(str, sizeof(str), "%s {0077C7}[ID %d]", actime, i);
| |
| 134 | Update3DTextLabelText(AktorLabel[ i ], 0xFFFFFFFF, str); | |
| 135 | AktorInfo[ i ][ aktorime ] = actime; | |
| 136 | SaveAktor(i); | |
| 137 | SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Uspesno ste promenili ime aktoru.");
| |
| 138 | } | |
| 139 | } | |
| 140 | else if(dialogid == DIALOG_IZBRISIAKTORA) {
| |
| 141 | if(!response) return 1; | |
| 142 | if(response) {
| |
| 143 | switch(listitem) {
| |
| 144 | case 0: {
| |
| 145 | if(GetNearestAktor(playerid) == -1) return SendClientMessage(playerid, 0x0077C7FF, "[AKTOR SYSTEM] {FFFFFF}Niste blizu aktora.");
| |
| 146 | new i = GetNearestAktor(playerid), aktorFile[ 60 ], str[ 60 ]; | |
| 147 | DestroyActor(AktorInfo[ i ][ aktorid ]); | |
| 148 | Delete3DTextLabel(AktorLabel[ i ]); | |
| 149 | AktorInfo[ i ][ aktorX ] = 0.0; AktorInfo[ i ][ aktorY ] = 0.0; AktorInfo[ i ][ aktorZ ] = 0.0; AktorInfo[ i ][ aktorA ] = 0.0; | |
| 150 | format(str, sizeof(str), "[AKTOR SYSTEM] {FFFFFF}Uspesno ste obrisali aktora ID %d.", i);
| |
| 151 | SendClientMessage(playerid, 0x0077C7FF, str); | |
| 152 | format(aktorFile, sizeof(aktorFile), AKTOR_FILE, i); | |
| 153 | if(fexist(aktorFile)) { fremove(aktorFile); }
| |
| 154 | } | |
| 155 | case 1: return ShowPlayerDialog(playerid, DIALOG_BRISANJEAKTORA, DIALOG_STYLE_INPUT, "{0077C7}BRISANJE {FFFFFF}AKTORA", "Unesite ID aktora.","U redu","Izlaz");
| |
| 156 | } | |
| 157 | } | |
| 158 | } | |
| 159 | else if(dialogid == DIALOG_BRISANJEAKTORA) {
| |
| 160 | if(!response) return 1; | |
| 161 | if(response) {
| |
| 162 | new i, str[ 60 ], aktorFile[ 60 ]; | |
| 163 | if(sscanf(inputtext, "%d", i)) return ShowPlayerDialog(playerid, DIALOG_BRISANJEAKTORA, DIALOG_STYLE_INPUT, "{0077C7}BRISANJE {FFFFFF}AKTORA", "Unesite ID aktora.","U redu","Izlaz");
| |
| 164 | DestroyActor(AktorInfo[ i ][ aktorid ]); | |
| 165 | Delete3DTextLabel(AktorLabel[ i ]); | |
| 166 | AktorInfo[ i ][ aktorX ] = 0.0; AktorInfo[ i ][ aktorY ] = 0.0; AktorInfo[ i ][ aktorZ ] = 0.0; AktorInfo[ i ][ aktorA ] = 0.0; | |
| 167 | format(str, sizeof(str), "[AKTOR SYSTEM] {FFFFFF}Uspesno ste obrisali aktora ID %d.", i);
| |
| 168 | SendClientMessage(playerid, 0x0077C7FF, str); | |
| 169 | format(aktorFile, sizeof(aktorFile), AKTOR_FILE, i); | |
| 170 | if(fexist(aktorFile)) { fremove(aktorFile); }
| |
| 171 | } | |
| 172 | } | |
| 173 | else if(dialogid == DIALOG_AKTORANIMACIJA && response) | |
| 174 | {
| |
| 175 | new i = GetNearestAktor(playerid); | |
| 176 | if(i == -1) return SendErrorMessage(playerid, "Niste blizu aktora."); | |
| 177 | switch(listitem) | |
| 178 | {
| |
| 179 | case 0: ApplyActorAnimation(AktorInfo[ i ][ aktorid ], "DEALER", "DEALER_IDLE", 4.0, 1, 0, 0, 0, 0); | |
| 180 | case 1: ApplyActorAnimation(AktorInfo[ i ][ aktorid ], "MISC", "SEAT_LR", 4.0, 1, 0, 0, 0, 0); | |
| 181 | case 2: ApplyActorAnimation(AktorInfo[ i ][ aktorid ], "BEACH", "bather", 4.0, 0, 1, 1, 1, -1); | |
| 182 | case 3: ApplyActorAnimation(AktorInfo[ i ][ aktorid ], "BEACH", "ParkSit_M_loop", 4.0, 0, 1, 1, 1, -1); | |
| 183 | } | |
| 184 | AktorInfo[ i ][ aktoranimacija ] = listitem+1; | |
| 185 | SaveAktor(i); | |
| 186 | } | |
| 187 | return 1; | |
| 188 | } | |
| 189 | ||
| 190 | CMD:aktorpanel(playerid, params[]) {
| |
| 191 | ||
| 192 | if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, "Niste ulogovani kao RCON admin."); | |
| 193 | ShowPlayerDialog(playerid, DIALOG_AKTORPANEL, DIALOG_STYLE_LIST, "{0077C7}AKTOR {FFFFFF}PANEL", "Kreiraj aktora\nDodaj aktoru animaciju\nIzmeni aktora\nIzbrisi aktora","Izaberi","Izlaz");
| |
| 194 | return 1; | |
| 195 | } | |
| 196 | GetNearestAktor( playerid ) {
| |
| 197 | for( new b = 1; b < sizeof(AktorInfo); b++) {
| |
| 198 | if( IsPlayerInRangeOfPoint( playerid, 4.0, AktorInfo[ b ][ aktorX ], AktorInfo[ b ][ aktorY ], AktorInfo[ b ][ aktorZ ] ) ) return b; } | |
| 199 | return -1; | |
| 200 | } | |
| 201 | stock NextAktorID(const len) {
| |
| 202 | new id = (-1); | |
| 203 | for( new loop = ( 0 ), provjera = ( -1 ), Data_[ 64 ] = "\0"; loop != len; ++ loop ) {
| |
| 204 | provjera = ( loop+1 ); | |
| 205 | format( Data_, ( sizeof Data_ ), AKTOR_FILE, provjera ); | |
| 206 | if(!fexist(Data_)) {
| |
| 207 | id = ( provjera ); | |
| 208 | break; } } | |
| 209 | return ( id ); | |
| 210 | } | |
| 211 | stock SaveAktor(id) {
| |
| 212 | new aktorFile[ 60 ]; | |
| 213 | format(aktorFile, sizeof(aktorFile), AKTOR_FILE, id); | |
| 214 | new INI:File = INI_Open(aktorFile); | |
| 215 | INI_WriteString(File, "Ime", AktorInfo[ id ][ aktorime ]); | |
| 216 | INI_WriteFloat(File, "Lokacija_X", AktorInfo[ id ][ aktorX ]); | |
| 217 | INI_WriteFloat(File, "Lokacija_Y", AktorInfo[ id ][ aktorY ]); | |
| 218 | INI_WriteFloat(File, "Lokacija_Z", AktorInfo[ id ][ aktorZ ]); | |
| 219 | INI_WriteFloat(File, "Rotacija_A", AktorInfo[ id ][ aktorA ]); | |
| 220 | INI_WriteInt(File, "Skin", AktorInfo[ id ][ aktorskin ]); | |
| 221 | INI_Close(File); | |
| 222 | } |