Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Feuerwerksystem by ErikSon */
- #include <a_samp>
- #include <ocmd>
- #include <mapandreas>
- /* Settings */
- #undef MAX_PLAYERS
- #define MAX_PLAYERS 5 //Spielerslot-Anzahl angeben!
- #define FW_RaketenPreis 50 //Preis pro Rakete
- #define FW_BollerPreis 20 //Preis pro Böller
- /* Settings */
- enum{
- FW_dShop = 2000,
- FW_dShop_Rakete,
- FW_dShop_Boller,
- FW_dInv,
- FW_dInv_Rakete,
- FW_dInv_Boller,
- FW_dAuswahl
- }
- enum FW_p{
- Name[MAX_PLAYER_NAME],
- Raketen,
- Boller,
- InHand //0 = nichts ; 1 = Rakete ; 2 = Böller
- }
- new FW_Player[MAX_PLAYERS][FW_p];
- new FW_fmex[128];
- #define FW_formatEx(%0,%1,%2) format(%0,sizeof(%0),%1,%2)
- #define FW_SCM(%0,%1) format(FW_fmex,128,%1) && SendClientMessage(playerid,-1,FW_fmex)
- #define MAX_BOUNCEOBJECTS 70
- new FW_timer;
- enum ObjectInfo {
- ObjectID,
- bool:created,
- bool:physics,
- Float:gravity,
- Float:bounce_factor,
- Float:vx,
- Float:vy,
- Float:vz,
- Float:radiuss,
- Float:OldZ,
- Multiple,
- Float:friction,
- FW_art,
- FW_time,
- FW_go
- }
- new OBJ[MAX_BOUNCEOBJECTS][ObjectInfo];
- public OnFilterScriptInit(){
- print("\n--------------------------------------");
- print(" Feuerwerksystem by ErikSon");
- print("--------------------------------------\n");
- return FW_timer = SetTimer("Bounce",30,1);
- }
- public OnFilterScriptExit(){
- for(new i = 0; i<MAX_PLAYERS; i++)RemovePlayerAttachedObject(i,0);
- KillTimer(FW_timer);
- for(new i = 0; i != MAX_BOUNCEOBJECTS; i++) {
- if(OBJ[i][created] == true) {
- DestroyObject(OBJ[i][ObjectID]);
- }
- }
- return 1;
- }
- public OnPlayerConnect(playerid){
- return FW_Player[playerid][InHand] = 0, FW_Player[playerid][Boller] = 0, FW_Player[playerid][Raketen] = 0;
- }
- public OnPlayerDisconnect(playerid, reason){
- return FW_Player[playerid][InHand] = 0, FW_Player[playerid][Boller] = 0, FW_Player[playerid][Raketen] = 0;
- }
- public OnPlayerSpawn(playerid){
- return FW_Player[playerid][InHand] = 0;
- }
- public OnPlayerDeath(playerid, killerid, reason){
- return FW_Player[playerid][InHand] = 0;
- }
- public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){
- if(newkeys & KEY_FIRE && FW_Player[playerid][InHand] != 0){
- switch(FW_Player[playerid][InHand]){
- case 1:{
- new Float:pX, Float:pY,Float:pZ,ID;
- GetPlayerPos(playerid,pX,pY,pZ);
- for(new i = 0; i != MAX_BOUNCEOBJECTS; i++){
- if(OBJ[i][created] == false){
- ID = i;
- }
- RemovePlayerAttachedObject(playerid,0);
- OBJ[ID][created] = true;
- FW_Player[playerid][InHand] = 0;
- FW_Player[playerid][Raketen] --;
- OBJ[ID][FW_art] = 2;
- OBJ[ID][FW_time] = 0,OBJ[ID][FW_go] = 0;
- OBJ[ID][ObjectID] = CreateObject(18644,pX+0.8,pY+0.2,pZ-0.3,0.0,0.0,0.0);
- return ApplyAnimation(playerid,"BOMBER","BOM_Plant",3.0,0,0,0,0,0);
- }
- }
- case 2:{
- new Float:pX, Float:pY,Float:pZ,Float:ang,ID;
- GetPlayerFacingAngle(playerid, ang);
- GetPlayerPos(playerid,pX,pY,pZ);
- for(new i = 0; i != MAX_BOUNCEOBJECTS; i++){
- if(OBJ[i][created] == false){
- ID = i;
- }
- if(ID != -1) {
- RemovePlayerAttachedObject(playerid,0);
- OBJ[ID][ObjectID] = CreateObject(1654,pX,pY,pZ,0.0,0.0,0.0);
- OBJ[ID][vx] = floatsin(-ang, degrees) * -5.5;
- OBJ[ID][vy] = floatcos(-ang, degrees) * -5.5;
- OBJ[ID][vz] = -3.5;
- OBJ[ID][gravity] = 10.1;
- OBJ[ID][bounce_factor] = 40.49;
- OBJ[ID][radiuss] = 0.2;
- OBJ[ID][friction] = 0.001;
- OBJ[ID][Multiple] = 0;
- OBJ[ID][FW_art] = 1;
- OBJ[ID][physics] = true;
- FW_Player[playerid][InHand] = 0;
- FW_Player[playerid][Boller] --;
- OBJ[ID][created] = true;
- return ApplyAnimation(playerid,"GRENADE","WEAPON_throwu",3.0,0,0,0,0,0);
- }
- }
- }
- }
- }
- return 1;
- }
- public OnPlayerUpdate(playerid){
- if(GetPlayerWeapon(playerid) == 0 && FW_Player[playerid][InHand] != 0){
- switch(FW_Player[playerid][InHand]){
- case 1:return RemovePlayerAttachedObject(playerid,0),SetPlayerAttachedObject(playerid, 0, 18644, 6, 0.054999, 0.017999, 0.255000);
- case 2:return RemovePlayerAttachedObject(playerid,0),SetPlayerAttachedObject(playerid, 0, 1654, 6, 0.067000, 0.000000, 0.138000,0,0,0, 0.18999995, 0.11100002, 0.81099998);
- }
- }
- else if(GetPlayerWeapon(playerid) != 0 && FW_Player[playerid][InHand] != 0)RemovePlayerAttachedObject(playerid,0);
- else if(FW_Player[playerid][InHand] == 1 && !FW_Player[playerid][Raketen] || FW_Player[playerid][InHand] == 2 && !FW_Player[playerid][Boller])RemovePlayerAttachedObject(playerid,0);
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]){
- switch(dialogid){
- case FW_dAuswahl:{
- if(!response)return 1;
- switch(listitem){
- case 0:{
- new str[32]; FW_formatEx(str,"Raketen: '%i'\nBöller: '%i'",FW_Player[playerid][Raketen],FW_Player[playerid][Boller]);
- return ShowPlayerDialog(playerid,FW_dInv,DIALOG_STYLE_LIST,"Feuerwerk | Inventar",str,"Auswählen","Abbrechen");
- }
- case 1:{
- new str[64]; FW_formatEx(str,"Rakete: '%i$' / Stück\nBöller: '%i$' / Stück",FW_RaketenPreis,FW_BollerPreis);
- return ShowPlayerDialog(playerid,FW_dShop,DIALOG_STYLE_LIST,"Feuerwerk | Shop",str,"Auswählen","Abbrechen");
- }
- }
- }
- case FW_dShop:{
- if(!response)return 1;
- switch(listitem){
- case 0:{
- new str[80]; FW_formatEx(str,"Gebe an, wie viele Raketen du kaufen möchtest:\n\nEine Rakete kostet '%i$'",FW_RaketenPreis);
- return ShowPlayerDialog(playerid,FW_dShop_Rakete,DIALOG_STYLE_INPUT,"Feuerwerks-Shop | Raketen",str,"Kaufen","Abbrechen");
- }
- case 1:{
- new str[80]; FW_formatEx(str,"Gebe an, wie viele Böller du kaufen möchtest:\n\nEin Böller kostet '%i$'",FW_BollerPreis);
- return ShowPlayerDialog(playerid,FW_dShop_Boller,DIALOG_STYLE_INPUT,"Feuerwerks-Shop | Böller",str,"Kaufen","Abbrechen");
- }
- }
- }
- case FW_dShop_Rakete:{
- if(!response)return ocmd_feuerwerk(playerid);
- if(!strval(inputtext) || strval(inputtext) > 10 || strval(inputtext) + FW_Player[playerid][Raketen] >= 10)return ocmd_feuerwerk(playerid),FW_SCM(playerid,"* Du musst mindestens eine und darfst höchstens 10 Raketen bei dir haben. Du besitzt '%i' Raketen.",FW_Player[playerid][Raketen]);
- else if(GetPlayerMoney(playerid) < strval(inputtext) * FW_RaketenPreis)return ocmd_feuerwerk(playerid),FW_SCM(playerid,"* Du hast nicht genug Geld dabei! Du benötigst '%i$'.",strval(inputtext) * FW_RaketenPreis);
- GivePlayerMoney(playerid,-strval(inputtext) * FW_RaketenPreis);
- return FW_Player[playerid][Raketen] += strval(inputtext);
- }
- case FW_dShop_Boller:{
- if(!response)return ocmd_feuerwerk(playerid);
- if(!strval(inputtext) || strval(inputtext) > 10 || strval(inputtext) + FW_Player[playerid][Boller] >= 10)return ocmd_feuerwerk(playerid),FW_SCM(playerid,"* Du musst mindestens eine und darfst höchstens 10 Böller bei dir haben. Du besitzt '%i' Böller.",FW_Player[playerid][Boller]);
- else if(GetPlayerMoney(playerid) < strval(inputtext) * FW_BollerPreis)return ocmd_feuerwerk(playerid),FW_SCM(playerid,"* Du hast nicht genug Geld dabei! Du benötigst '%i$'.",strval(inputtext) * FW_BollerPreis);
- GivePlayerMoney(playerid,-strval(inputtext) * FW_BollerPreis);
- return FW_Player[playerid][Boller] += strval(inputtext);
- }
- case FW_dInv:{
- if(!response)return 1;
- switch(listitem){
- case 0:return ShowPlayerDialog(playerid,FW_dInv_Rakete,DIALOG_STYLE_LIST,"Feuerwerk | Inventar | Raketen","Rakete nehmen\nRaketen wegwerfen","Auswählen","Abbrechen");
- case 1:return ShowPlayerDialog(playerid,FW_dInv_Boller,DIALOG_STYLE_LIST,"Feuerwerk | Inventar | Böller","Böller nehmen\nBöller wegwerfen","Auswählen","Abbrechen");
- }
- }
- case FW_dInv_Rakete:{
- if(!response)return ocmd_feuerwerk(playerid);
- if(FW_Player[playerid][Raketen] <= 0)return FW_SCM(playerid,"* Du hast keine Raketen bei dir!");
- switch(listitem){
- case 0:return FW_Player[playerid][InHand] = 1, FW_SCM(playerid,"Du hast eine Rakete in die Hand genommen. Du kannst sie mit der 'Schlag-Taste' benutzen.");
- case 1:return FW_Player[playerid][InHand] = 0, FW_Player[playerid][Raketen] = 0, FW_SCM(playerid,"Du hast deine Raketen weggeworfen."),RemovePlayerAttachedObject(playerid,0);
- }
- }
- case FW_dInv_Boller:{
- if(!response)return ocmd_feuerwerk(playerid);
- if(FW_Player[playerid][Boller] <= 0)return FW_SCM(playerid,"* Du hast keine Böller bei dir!");
- switch(listitem){
- case 0:return FW_Player[playerid][InHand] = 2, FW_SCM(playerid,"Du hast einen Böller in die Hand genommen. Du kannst ihn mit der 'Schlag-Taste' benutzen.");
- case 1:return FW_Player[playerid][InHand] = 0, FW_Player[playerid][Boller] = 0, FW_SCM(playerid,"Du hast deine Böller weggeworfen."),RemovePlayerAttachedObject(playerid,0);
- }
- }
- }
- return 0;
- }
- ocmd:feuerwerk(playerid){
- return ShowPlayerDialog(playerid,FW_dAuswahl,DIALOG_STYLE_LIST,"Feuerwerk","Inventar\nFeuerwerks-Shop","Auswählen","Abbrechen");
- }
- forward Bounce();
- public Bounce()
- {
- for(new i = 0; i != MAX_BOUNCEOBJECTS; i++) {
- switch(OBJ[i][FW_art]){
- case 1:{
- if(OBJ[i][created] == true && OBJ[i][physics] == true) {
- new Float:pos[3],Float:speed,Float:angle,Float:z;
- GetObjectPos(OBJ[i][ObjectID],pos[0],pos[1],pos[2]);
- MapAndreas_FindZ_For2DCoord(pos[0],pos[1],z);
- speed = floatsqroot(OBJ[i][vx]*OBJ[i][vx] + OBJ[i][vy]*OBJ[i][vy]);
- if (speed > OBJ[i][friction])speed -= OBJ[i][friction] * (30/1000.0);
- else speed = 0;
- angle = atan2(OBJ[i][vy], OBJ[i][vx]);
- OBJ[i][vx] = floatcos(angle, degrees) * speed;
- OBJ[i][vy] = floatsin(angle, degrees) * speed;
- OBJ[i][vz] += OBJ[i][gravity] * (30/1000.0);
- pos[0] -= OBJ[i][vx] * (30/1000.0);
- pos[1] -= OBJ[i][vy] * (30/1000.0);
- pos[2] -= OBJ[i][vz] * (30/1000.0);
- if((pos[2] - OBJ[i][radiuss]) <= z) {
- if(z > (pos[2] - OBJ[i][radiuss]) + 2)OBJ[i][vx] *= -OBJ[i][bounce_factor] * (30/1000.0),OBJ[i][vy] *= -OBJ[i][bounce_factor] * (30/1000.0);
- else pos[2] = z + OBJ[i][radiuss];
- OBJ[i][vz] *= -OBJ[i][bounce_factor] * (30/1000.0);
- if(++OBJ[i][Multiple] > 1)OBJ[i][physics] = false;
- else OBJ[i][Multiple] = 0,OBJ[i][OldZ] = z;
- }
- if(pos[2] >8)SetObjectPos(OBJ[i][ObjectID],pos[0],pos[1],pos[2]);
- else DestroyObject(OBJ[i][ObjectID]),CreateExplosion(pos[0],pos[1],pos[2],11,1);
- }
- }
- case 2:{
- if(OBJ[i][created] == true && OBJ[i][FW_go] >= 65) {
- new Float:pos[3]; GetObjectPos(OBJ[i][ObjectID],pos[0],pos[1],pos[2]);
- SetObjectPos(OBJ[i][ObjectID],pos[0],pos[1],pos[2]+0.4);
- OBJ[i][FW_time] ++;
- if(OBJ[i][FW_time] >= 150){
- OBJ[i][FW_time] = 0,OBJ[i][FW_go] = 0;
- DestroyObject(OBJ[i][ObjectID]);
- return CreateExplosion(pos[0],pos[1],pos[2],6,1);
- }
- }
- else if(OBJ[i][created] == true && OBJ[i][FW_go] <65)return OBJ[i][FW_go] ++;
- }
- }
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment